* [PATCH] resize.f2fs: fix an error in migrate_ssa @ 2016-11-24 7:33 Yunlei He 2016-11-25 3:32 ` Junling Zheng 0 siblings, 1 reply; 5+ messages in thread From: Yunlei He @ 2016-11-24 7:33 UTC (permalink / raw) To: linux-f2fs-devel, jaegeuk, yuchao0 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 <heyunlei@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--; } } -- 2.10.1 ------------------------------------------------------------------------------ ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] resize.f2fs: fix an error in migrate_ssa 2016-11-24 7:33 [PATCH] resize.f2fs: fix an error in migrate_ssa Yunlei He @ 2016-11-25 3:32 ` Junling Zheng 2016-11-25 3:53 ` Junling Zheng 0 siblings, 1 reply; 5+ messages in thread From: Junling Zheng @ 2016-11-25 3:32 UTC (permalink / raw) To: Yunlei He, linux-f2fs-devel, jaegeuk, yuchao0 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); + } } } 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 <heyunlei@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--; > } > } > ------------------------------------------------------------------------------ ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] resize.f2fs: fix an error in migrate_ssa 2016-11-25 3:32 ` Junling Zheng @ 2016-11-25 3:53 ` Junling Zheng 2016-11-29 8:43 ` Junling Zheng 0 siblings, 1 reply; 5+ messages in thread From: Junling Zheng @ 2016-11-25 3:53 UTC (permalink / raw) To: Yunlei He, linux-f2fs-devel, jaegeuk, yuchao0 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 <heyunlei@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--; >> } >> } >> > > > > . > ------------------------------------------------------------------------------ ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] resize.f2fs: fix an error in migrate_ssa 2016-11-25 3:53 ` Junling Zheng @ 2016-11-29 8:43 ` Junling Zheng 2016-11-29 20:01 ` Jaegeuk Kim 0 siblings, 1 reply; 5+ messages in thread From: Junling Zheng @ 2016-11-29 8:43 UTC (permalink / raw) To: Yunlei He, linux-f2fs-devel, jaegeuk, yuchao0 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 <heyunlei@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--; >>> } >>> } >>> >> >> >> >> . >> > ------------------------------------------------------------------------------ ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] resize.f2fs: fix an error in migrate_ssa 2016-11-29 8:43 ` Junling Zheng @ 2016-11-29 20:01 ` Jaegeuk Kim 0 siblings, 0 replies; 5+ messages in thread From: Jaegeuk Kim @ 2016-11-29 20:01 UTC (permalink / raw) To: Junling Zheng; +Cc: linux-f2fs-devel Could you please resubmit a complete patch? On Tue, Nov 29, 2016 at 04:43:10PM +0800, Junling Zheng wrote: > 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 <heyunlei@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--; > >>> } > >>> } > >>> > >> > >> > >> > >> . > >> > > > ------------------------------------------------------------------------------ ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-11-29 20:01 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-11-24 7:33 [PATCH] resize.f2fs: fix an error in migrate_ssa Yunlei He 2016-11-25 3:32 ` Junling Zheng 2016-11-25 3:53 ` Junling Zheng 2016-11-29 8:43 ` Junling Zheng 2016-11-29 20:01 ` Jaegeuk Kim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).