diff options
author | Chao Yu <yuchao0@huawei.com> | 2020-03-24 09:20:57 +0300 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2020-03-31 06:46:25 +0300 |
commit | 74878565fbbf29d9be092504e87ec219e1359a43 (patch) | |
tree | 63342baab26cbd938af78af60ae0bf14d63640d9 | |
parent | 7653b9d87516ed65e112d2273c65eca6f97d0a27 (diff) | |
download | linux-74878565fbbf29d9be092504e87ec219e1359a43.tar.xz |
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 <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r-- | fs/f2fs/data.c | 3 |
1 files changed, 3 insertions, 0 deletions
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); } } |