Message ID | 20240223025403.1180558-1-chao@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [f2fs-dev] f2fs: fix to use correct segment type in f2fs_allocate_data_block() | expand |
On 02/23, Chao Yu wrote: > @type in f2fs_allocate_data_block() indicates log header's type, it > can be CURSEG_COLD_DATA_PINNED or CURSEG_ALL_DATA_ATGC, rather than > type of data/node, however IS_DATASEG()/IS_NODESEG() only accept later > one, fix it. > > Fixes: 093749e296e2 ("f2fs: support age threshold based garbage collection") > Signed-off-by: Chao Yu <chao@kernel.org> > --- > fs/f2fs/segment.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > index d0209ea77dd2..76422f50e6cc 100644 > --- a/fs/f2fs/segment.c > +++ b/fs/f2fs/segment.c > @@ -3505,12 +3505,12 @@ void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page, > locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr)); > locate_dirty_segment(sbi, GET_SEGNO(sbi, *new_blkaddr)); > > - if (IS_DATASEG(type)) > + if (IS_DATASEG(se->type)) We have se only when type is CURSEG_ALL_DATA_ATGC. We may need to change IS_DATASEG()? > atomic64_inc(&sbi->allocated_data_blocks); > > up_write(&sit_i->sentry_lock); > > - if (page && IS_NODESEG(type)) { > + if (page && IS_NODESEG(se->type)) { > fill_node_footer_blkaddr(page, NEXT_FREE_BLKADDR(sbi, curseg)); > > f2fs_inode_chksum_set(sbi, page); > -- > 2.40.1
On 2024/2/24 4:52, Jaegeuk Kim wrote: > On 02/23, Chao Yu wrote: >> @type in f2fs_allocate_data_block() indicates log header's type, it >> can be CURSEG_COLD_DATA_PINNED or CURSEG_ALL_DATA_ATGC, rather than >> type of data/node, however IS_DATASEG()/IS_NODESEG() only accept later >> one, fix it. >> >> Fixes: 093749e296e2 ("f2fs: support age threshold based garbage collection") >> Signed-off-by: Chao Yu <chao@kernel.org> >> --- >> fs/f2fs/segment.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >> index d0209ea77dd2..76422f50e6cc 100644 >> --- a/fs/f2fs/segment.c >> +++ b/fs/f2fs/segment.c >> @@ -3505,12 +3505,12 @@ void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page, >> locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr)); >> locate_dirty_segment(sbi, GET_SEGNO(sbi, *new_blkaddr)); >> >> - if (IS_DATASEG(type)) >> + if (IS_DATASEG(se->type)) > > We have se only when type is CURSEG_ALL_DATA_ATGC. We may need to change Oops, correct. > IS_DATASEG()? Sure, I guess one other way is to use curseg->seg_type, let me know if you prefer to change IS_DATASEG(). Thanks, > >> atomic64_inc(&sbi->allocated_data_blocks); >> >> up_write(&sit_i->sentry_lock); >> >> - if (page && IS_NODESEG(type)) { >> + if (page && IS_NODESEG(se->type)) { >> fill_node_footer_blkaddr(page, NEXT_FREE_BLKADDR(sbi, curseg)); >> >> f2fs_inode_chksum_set(sbi, page); >> -- >> 2.40.1
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index d0209ea77dd2..76422f50e6cc 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -3505,12 +3505,12 @@ void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page, locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr)); locate_dirty_segment(sbi, GET_SEGNO(sbi, *new_blkaddr)); - if (IS_DATASEG(type)) + if (IS_DATASEG(se->type)) atomic64_inc(&sbi->allocated_data_blocks); up_write(&sit_i->sentry_lock); - if (page && IS_NODESEG(type)) { + if (page && IS_NODESEG(se->type)) { fill_node_footer_blkaddr(page, NEXT_FREE_BLKADDR(sbi, curseg)); f2fs_inode_chksum_set(sbi, page);
@type in f2fs_allocate_data_block() indicates log header's type, it can be CURSEG_COLD_DATA_PINNED or CURSEG_ALL_DATA_ATGC, rather than type of data/node, however IS_DATASEG()/IS_NODESEG() only accept later one, fix it. Fixes: 093749e296e2 ("f2fs: support age threshold based garbage collection") Signed-off-by: Chao Yu <chao@kernel.org> --- fs/f2fs/segment.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)