Ping ... On 2016/11/25 11:53, Junling Zheng wrote: > Sorry, I forget to get the return value of dev_write_block :( > Please review the following patch :) > > --- > fsck/resize.c | 25 ++++++++++++++----------- > 1 file changed, 14 insertions(+), 11 deletions(-) > > diff --git a/fsck/resize.c b/fsck/resize.c > index 46aa30e..9f9c7a6 100644 > --- a/fsck/resize.c > +++ b/fsck/resize.c > @@ -207,30 +207,33 @@ static void migrate_ssa(struct f2fs_sb_info *sbi, > block_t old_sum_blkaddr = get_sb(ssa_blkaddr); > block_t new_sum_blkaddr = get_newsb(ssa_blkaddr); > block_t end_sum_blkaddr = get_newsb(main_blkaddr); > + block_t expand_sum_blkaddr = new_sum_blkaddr + > + TOTAL_SEGS(sbi) - offset; > block_t blkaddr; > + int ret; > void *zero_block = calloc(BLOCK_SZ, 1); > - > ASSERT(zero_block); > > if (offset && new_sum_blkaddr < old_sum_blkaddr + offset) { > blkaddr = new_sum_blkaddr; > while (blkaddr < end_sum_blkaddr) { > - if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi)) > - move_ssa(sbi, offset, blkaddr); > - else > - dev_write_block(zero_block, blkaddr); > - offset++; > - blkaddr++; > + if (blkaddr < expand_sum_blkaddr) > + move_ssa(sbi, offset++, blkaddr++); > + else { > + ret = dev_write_block(zero_block, blkaddr++); > + ASSERT(ret >=0); > + } > } > } else { > blkaddr = end_sum_blkaddr - 1; > offset = TOTAL_SEGS(sbi) - 1; > while (blkaddr >= new_sum_blkaddr) { > - if (blkaddr >= TOTAL_SEGS(sbi) + new_sum_blkaddr) > - dev_write_block(zero_block, blkaddr); > + if (blkaddr >= expand_sum_blkaddr) { > + ret = dev_write_block(zero_block, blkaddr--); > + ASSERT(ret >=0); > + } > else > - move_ssa(sbi, offset--, blkaddr); > - blkaddr--; > + move_ssa(sbi, offset--, blkaddr--); > } > } > > > On 2016/11/25 11:32, Junling Zheng wrote: >> How about the following patch, which I think would be a little better :) >> >> diff --git a/fsck/resize.c b/fsck/resize.c >> index 46aa30e..c295a06 100644 >> --- a/fsck/resize.c >> +++ b/fsck/resize.c >> @@ -207,30 +207,33 @@ static void migrate_ssa(struct f2fs_sb_info *sbi, >> block_t old_sum_blkaddr = get_sb(ssa_blkaddr); >> block_t new_sum_blkaddr = get_newsb(ssa_blkaddr); >> block_t end_sum_blkaddr = get_newsb(main_blkaddr); >> + block_t expand_sum_blkaddr = new_sum_blkaddr + >> + TOTAL_SEGS(sbi) - offset; >> block_t blkaddr; >> + int ret; >> void *zero_block = calloc(BLOCK_SZ, 1); >> - >> ASSERT(zero_block); >> >> if (offset && new_sum_blkaddr < old_sum_blkaddr + offset) { >> blkaddr = new_sum_blkaddr; >> while (blkaddr < end_sum_blkaddr) { >> - if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi)) >> - move_ssa(sbi, offset, blkaddr); >> - else >> - dev_write_block(zero_block, blkaddr); >> - offset++; >> - blkaddr++; >> + if (blkaddr < expand_sum_blkaddr) >> + move_ssa(sbi, offset++, blkaddr++); >> + else { >> + dev_write_block(zero_block, blkaddr++); >> + ASSERT(ret >=0); > > forget to get the return value of dev_write_block :( > >> + } >> } >> } else { >> blkaddr = end_sum_blkaddr - 1; >> offset = TOTAL_SEGS(sbi) - 1; >> while (blkaddr >= new_sum_blkaddr) { >> - if (blkaddr >= TOTAL_SEGS(sbi) + new_sum_blkaddr) >> - dev_write_block(zero_block, blkaddr); >> + if (blkaddr >= expand_sum_blkaddr) { >> + dev_write_block(zero_block, blkaddr--); >> + ASSERT(ret >=0); >> + } >> else >> - move_ssa(sbi, offset--, blkaddr); >> - blkaddr--; >> + move_ssa(sbi, offset--, blkaddr--); >> } >> } >> >> >> On 2016/11/24 15:33, Yunlei He wrote: >>> This patch fix an error in migrate_ssa when resize with condition >>> that offset is not zero && new_sum_blkaddr > old_sum_blkaddr + offset >>> >>> Signed-off-by: Yunlei He <heyun...@huawei.com> >>> --- >>> fsck/resize.c | 37 +++++++++++++++++++++++++++---------- >>> 1 file changed, 27 insertions(+), 10 deletions(-) >>> >>> diff --git a/fsck/resize.c b/fsck/resize.c >>> index 46aa30e..70dbef5 100644 >>> --- a/fsck/resize.c >>> +++ b/fsck/resize.c >>> @@ -208,28 +208,45 @@ static void migrate_ssa(struct f2fs_sb_info *sbi, >>> block_t new_sum_blkaddr = get_newsb(ssa_blkaddr); >>> block_t end_sum_blkaddr = get_newsb(main_blkaddr); >>> block_t blkaddr; >>> + unsigned int offset1 = offset; >>> + int ret = 1; >>> void *zero_block = calloc(BLOCK_SZ, 1); >>> >>> ASSERT(zero_block); >>> >>> - if (offset && new_sum_blkaddr < old_sum_blkaddr + offset) { >>> - blkaddr = new_sum_blkaddr; >>> - while (blkaddr < end_sum_blkaddr) { >>> - if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi)) >>> - move_ssa(sbi, offset, blkaddr); >>> - else >>> - dev_write_block(zero_block, blkaddr); >>> - offset++; >>> - blkaddr++; >>> + if (offset) { >>> + if (new_sum_blkaddr < old_sum_blkaddr + offset) { >>> + blkaddr = new_sum_blkaddr; >>> + while (blkaddr < end_sum_blkaddr) { >>> + if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi) >>> - offset1) >>> + move_ssa(sbi, offset, blkaddr); >>> + else >>> + ret = dev_write_block(zero_block, >>> blkaddr); >>> + ASSERT(ret >= 0); >>> + offset++; >>> + blkaddr++; >>> + } >>> + } else { >>> + blkaddr = end_sum_blkaddr - 1; >>> + offset = TOTAL_SEGS(sbi)-1; >>> + while (blkaddr >= new_sum_blkaddr) { >>> + if (blkaddr >= TOTAL_SEGS(sbi) - offset1 + >>> new_sum_blkaddr) >>> + ret = dev_write_block(zero_block, >>> blkaddr); >>> + else >>> + move_ssa(sbi, offset--, blkaddr); >>> + ASSERT(ret >= 0); >>> + blkaddr--; >>> + } >>> } >>> } else { >>> blkaddr = end_sum_blkaddr - 1; >>> offset = TOTAL_SEGS(sbi) - 1; >>> while (blkaddr >= new_sum_blkaddr) { >>> if (blkaddr >= TOTAL_SEGS(sbi) + new_sum_blkaddr) >>> - dev_write_block(zero_block, blkaddr); >>> + ret = dev_write_block(zero_block, blkaddr); >>> else >>> move_ssa(sbi, offset--, blkaddr); >>> + ASSERT(ret >= 0); >>> blkaddr--; >>> } >>> } >>> >> >> >> >> . >> >
------------------------------------------------------------------------------ _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel