diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c index 01de404771361d09f90869df901aa1597a0c2829..8b2b6792d3b1e7783b87467d1b4ba9fa088c5656 100644 --- a/fs/f2fs/compress.c +++ b/fs/f2fs/compress.c @@ -1118,6 +1118,7 @@ static int prepare_compress_overwrite(struct compress_ctx *cc, f2fs_compress_ctx_add_page(cc, page); if (!PageUptodate(page)) { + f2fs_handle_page_eio(sbi, page->index, DATA); release_and_retry: f2fs_put_rpages(cc); f2fs_unlock_rpages(cc, i + 1); diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 09541a004088e2abac64da7e9259080ff429ec7f..bd0df7f24857d9341311b74335532c830b589a47 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -2164,6 +2164,12 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret, int i; int ret = 0; + if (unlikely(f2fs_cp_error(sbi))) { + ret = -EIO; + from_dnode = false; + goto out_put_dnode; + } + f2fs_bug_on(sbi, f2fs_cluster_is_empty(cc)); last_block_in_file = bytes_to_blks(inode, @@ -2204,10 +2210,6 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret, if (ret) goto out; - if (unlikely(f2fs_cp_error(sbi))) { - ret = -EIO; - goto out_put_dnode; - } f2fs_bug_on(sbi, dn.data_blkaddr != COMPRESS_ADDR); skip_reading_dnode: