From: Chao Yu Date: Tue, 24 Mar 2020 06:20:57 +0000 (+0800) Subject: f2fs: fix to avoid double unlock X-Git-Tag: microblaze-v5.10~1051^2~14 X-Git-Url: http://git.monstr.eu/?a=commitdiff_plain;h=74878565fbbf29d9be092504e87ec219e1359a43;p=linux-2.6-microblaze.git f2fs: fix to avoid double unlock On image that has verity and compression feature, if compressed pages and non-compressed pages are mixed in one bio, we may double unlock non-compressed page in below flow: - f2fs_post_read_work - f2fs_decompress_work - f2fs_decompress_bio - __read_end_io - unlock_page - fsverity_enqueue_verify_work - f2fs_verity_work - f2fs_verify_bio - unlock_page So it should skip handling non-compressed page in f2fs_decompress_work() if verity is on. Besides, add missing dec_page_count() in f2fs_verify_bio(). Signed-off-by: Chao Yu Signed-off-by: Jaegeuk Kim --- diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 0197b7b80d19..24643680489b 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -139,6 +139,8 @@ static void __read_end_io(struct bio *bio, bool compr, bool verity) f2fs_decompress_pages(bio, page, verity); continue; } + if (verity) + continue; #endif /* PG_error was set if any post_read step failed */ @@ -216,6 +218,7 @@ clear_uptodate: ClearPageUptodate(page); ClearPageError(page); unlock: + dec_page_count(F2FS_P_SB(page), __read_io_type(page)); unlock_page(page); } }