diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2018-09-17 17:36:06 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2018-09-28 10:39:58 -0700 |
commit | edc55aaf0d1712b54a3704dd58423c7e495534fe (patch) | |
tree | c3f2bf974a3706d91b231b309c2c9427d9adfe5b /fs/f2fs/gc.c | |
parent | 4a1728cad6340bfbe17bd17fd158b2165cd99508 (diff) | |
download | lwn-edc55aaf0d1712b54a3704dd58423c7e495534fe.tar.gz lwn-edc55aaf0d1712b54a3704dd58423c7e495534fe.zip |
f2fs: avoid f2fs_bug_on if f2fs_get_meta_page_nofail got EIO
This patch avoids BUG_ON when f2fs_get_meta_page_nofail got EIO during
xfstests/generic/475.
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/gc.c')
-rw-r--r-- | fs/f2fs/gc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 77ffa8045a3b..247b31e73303 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -1066,6 +1066,18 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi, /* reference all summary page */ while (segno < end_segno) { sum_page = f2fs_get_sum_page(sbi, segno++); + if (IS_ERR(sum_page)) { + int err = PTR_ERR(sum_page); + + end_segno = segno - 1; + for (segno = start_segno; segno < end_segno; segno++) { + sum_page = find_get_page(META_MAPPING(sbi), + GET_SUM_BLOCK(sbi, segno)); + f2fs_put_page(sum_page, 0); + f2fs_put_page(sum_page, 0); + } + return err; + } unlock_page(sum_page); } |