]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
f2fs: clear PageError on writepage
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 12 Apr 2018 06:09:04 +0000 (23:09 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 2 May 2018 21:30:58 +0000 (14:30 -0700)
This patch clears PageError in some pages tagged by read path, but when we
write the pages with valid contents, writepage should clear the bit likewise
ext4.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c
fs/f2fs/gc.c
fs/f2fs/inline.c
fs/f2fs/node.c
fs/f2fs/segment.c

index 0f652b05decc3ae0d3c40bcafa88489772b2f271..5477fc09c3cdf7c7b4591ad8301b9aa93099e654 100644 (file)
@@ -1735,6 +1735,7 @@ got_it:
                        goto out_writepage;
 
                set_page_writeback(page);
+               ClearPageError(page);
                f2fs_put_dnode(&dn);
                if (fio->need_lock == LOCK_REQ)
                        f2fs_unlock_op(fio->sbi);
@@ -1757,6 +1758,7 @@ got_it:
                goto out_writepage;
 
        set_page_writeback(page);
+       ClearPageError(page);
 
        /* LFS mode write path */
        write_data_page(&dn, fio);
index 70418b34c5f6ef9a26f9bfa19661589d70f9fd58..a7de8b3431a9aad44a6caefac6173fb33ef15378 100644 (file)
@@ -693,6 +693,7 @@ static void move_data_block(struct inode *inode, block_t bidx,
                dec_page_count(fio.sbi, F2FS_DIRTY_META);
 
        set_page_writeback(fio.encrypted_page);
+       ClearPageError(page);
 
        /* allocate block address */
        f2fs_wait_on_page_writeback(dn.node_page, NODE, true);
index 767e41d944c607813f45d5e8cac97dd25816ef70..bc571942885ef53f0fc8760ce478310268265388 100644 (file)
@@ -139,6 +139,7 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
 
        /* write data page to try to make data consistent */
        set_page_writeback(page);
+       ClearPageError(page);
        fio.old_blkaddr = dn->data_blkaddr;
        set_inode_flag(dn->inode, FI_HOT_DATA);
        write_data_page(dn, &fio);
index ae83ca9d2d3147aa9fe2c98b2b2e7a4c83816a82..3a3d38b3e9ec5c8160070fc936ca5f008e943c9e 100644 (file)
@@ -1394,6 +1394,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
                fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
 
        set_page_writeback(page);
+       ClearPageError(page);
        fio.old_blkaddr = ni.blk_addr;
        write_node_page(nid, &fio);
        set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page));
index 5854cc4e1d67c01045f41b99403aaaefbfc27894..1e365e9138586a1c945a36689b53609c57e27c1e 100644 (file)
@@ -2757,6 +2757,7 @@ void write_meta_page(struct f2fs_sb_info *sbi, struct page *page,
                fio.op_flags &= ~REQ_META;
 
        set_page_writeback(page);
+       ClearPageError(page);
        f2fs_submit_page_write(&fio);
 
        f2fs_update_iostat(sbi, io_type, F2FS_BLKSIZE);