Commit 17c50035 authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

f2fs: clear PageError on writepage



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: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent a90a0884
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -1735,6 +1735,7 @@ int do_write_data_page(struct f2fs_io_info *fio)
			goto out_writepage;
			goto out_writepage;


		set_page_writeback(page);
		set_page_writeback(page);
		ClearPageError(page);
		f2fs_put_dnode(&dn);
		f2fs_put_dnode(&dn);
		if (fio->need_lock == LOCK_REQ)
		if (fio->need_lock == LOCK_REQ)
			f2fs_unlock_op(fio->sbi);
			f2fs_unlock_op(fio->sbi);
@@ -1757,6 +1758,7 @@ int do_write_data_page(struct f2fs_io_info *fio)
		goto out_writepage;
		goto out_writepage;


	set_page_writeback(page);
	set_page_writeback(page);
	ClearPageError(page);


	/* LFS mode write path */
	/* LFS mode write path */
	write_data_page(&dn, fio);
	write_data_page(&dn, fio);
+1 −0
Original line number Original line Diff line number Diff line
@@ -693,6 +693,7 @@ static void move_data_block(struct inode *inode, block_t bidx,
		dec_page_count(fio.sbi, F2FS_DIRTY_META);
		dec_page_count(fio.sbi, F2FS_DIRTY_META);


	set_page_writeback(fio.encrypted_page);
	set_page_writeback(fio.encrypted_page);
	ClearPageError(page);


	/* allocate block address */
	/* allocate block address */
	f2fs_wait_on_page_writeback(dn.node_page, NODE, true);
	f2fs_wait_on_page_writeback(dn.node_page, NODE, true);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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 */
	/* write data page to try to make data consistent */
	set_page_writeback(page);
	set_page_writeback(page);
	ClearPageError(page);
	fio.old_blkaddr = dn->data_blkaddr;
	fio.old_blkaddr = dn->data_blkaddr;
	set_inode_flag(dn->inode, FI_HOT_DATA);
	set_inode_flag(dn->inode, FI_HOT_DATA);
	write_data_page(dn, &fio);
	write_data_page(dn, &fio);
+1 −0
Original line number Original line Diff line number Diff line
@@ -1394,6 +1394,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
		fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
		fio.op_flags |= REQ_PREFLUSH | REQ_FUA;


	set_page_writeback(page);
	set_page_writeback(page);
	ClearPageError(page);
	fio.old_blkaddr = ni.blk_addr;
	fio.old_blkaddr = ni.blk_addr;
	write_node_page(nid, &fio);
	write_node_page(nid, &fio);
	set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page));
	set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page));
+1 −0
Original line number Original line Diff line number Diff line
@@ -2757,6 +2757,7 @@ void write_meta_page(struct f2fs_sb_info *sbi, struct page *page,
		fio.op_flags &= ~REQ_META;
		fio.op_flags &= ~REQ_META;


	set_page_writeback(page);
	set_page_writeback(page);
	ClearPageError(page);
	f2fs_submit_page_write(&fio);
	f2fs_submit_page_write(&fio);


	f2fs_update_iostat(sbi, io_type, F2FS_BLKSIZE);
	f2fs_update_iostat(sbi, io_type, F2FS_BLKSIZE);