Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 333427a5 authored by Jeff Layton's avatar Jeff Layton
Browse files

btrfs: minimal conversion to errseq_t writeback error reporting on fsync



Just check and advance the errseq_t in the file before returning, and
use an errseq_t based check for writeback errors.

Other internal callers of filemap_* functions are left as-is.

Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
parent 1b180274
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -2011,7 +2011,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
	struct btrfs_root *root = BTRFS_I(inode)->root;
	struct btrfs_trans_handle *trans;
	struct btrfs_log_ctx ctx;
	int ret = 0;
	int ret = 0, err;
	bool full_sync = 0;
	u64 len;

@@ -2030,7 +2030,7 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
	 */
	ret = start_ordered_ops(inode, start, end);
	if (ret)
		return ret;
		goto out;

	inode_lock(inode);
	atomic_inc(&root->log_batch);
@@ -2135,10 +2135,10 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
		 * An ordered extent might have started before and completed
		 * already with io errors, in which case the inode was not
		 * updated and we end up here. So check the inode's mapping
		 * flags for any errors that might have happened while doing
		 * writeback of file data.
		 * for any errors that might have happened since we last
		 * checked called fsync.
		 */
		ret = filemap_check_errors(inode->i_mapping);
		ret = filemap_check_wb_err(inode->i_mapping, file->f_wb_err);
		inode_unlock(inode);
		goto out;
	}
@@ -2227,6 +2227,9 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
		ret = btrfs_end_transaction(trans);
	}
out:
	err = file_check_and_advance_wb_err(file);
	if (!ret)
		ret = err;
	return ret > 0 ? -EIO : ret;
}