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--; } } -- 2.10.1 ------------------------------------------------------------------------------ _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel