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

Commit 3b49c9a1 authored by Jeff Layton's avatar Jeff Layton
Browse files

fs: convert a pile of fsync routines to errseq_t based reporting



This patch converts most of the in-kernel filesystems that do writeback
out of the pagecache to report errors using the errseq_t-based
infrastructure that was recently added. This allows them to report
errors once for each open file description.

Most filesystems have a fairly straightforward fsync operation. They
call filemap_write_and_wait_range to write back all of the data and
wait on it, and then (sometimes) sync out the metadata.

For those filesystems this is a straightforward conversion from calling
filemap_write_and_wait_range in their fsync operation to calling
file_write_and_wait_range.

Acked-by: default avatarJan Kara <jack@suse.cz>
Acked-by: default avatarDave Kleikamp <dave.kleikamp@oracle.com>
Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
parent d07a6ac7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1749,7 +1749,7 @@ static int spufs_mfc_flush(struct file *file, fl_owner_t id)
static int spufs_mfc_fsync(struct file *file, loff_t start, loff_t end, int datasync)
{
	struct inode *inode = file_inode(file);
	int err = filemap_write_and_wait_range(inode->i_mapping, start, end);
	int err = file_write_and_wait_range(file, start, end);
	if (!err) {
		inode_lock(inode);
		err = spufs_mfc_flush(file, NULL);
+1 −1
Original line number Diff line number Diff line
@@ -2364,7 +2364,7 @@ int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync)
	       PFID(ll_inode2fid(inode)), inode);
	ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_FSYNC, 1);

	rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
	rc = file_write_and_wait_range(file, start, end);
	inode_lock(inode);

	/* catch async errors that were recorded back when async writeback
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ int fb_deferred_io_fsync(struct file *file, loff_t start, loff_t end, int datasy
{
	struct fb_info *info = file->private_data;
	struct inode *inode = file_inode(file);
	int err = filemap_write_and_wait_range(inode->i_mapping, start, end);
	int err = file_write_and_wait_range(file, start, end);
	if (err)
		return err;

+2 −2
Original line number Diff line number Diff line
@@ -445,7 +445,7 @@ static int v9fs_file_fsync(struct file *filp, loff_t start, loff_t end,
	struct p9_wstat wstat;
	int retval;

	retval = filemap_write_and_wait_range(inode->i_mapping, start, end);
	retval = file_write_and_wait_range(filp, start, end);
	if (retval)
		return retval;

@@ -468,7 +468,7 @@ int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end,
	struct inode *inode = filp->f_mapping->host;
	int retval;

	retval = filemap_write_and_wait_range(inode->i_mapping, start, end);
	retval = file_write_and_wait_range(filp, start, end);
	if (retval)
		return retval;

+1 −1
Original line number Diff line number Diff line
@@ -954,7 +954,7 @@ int affs_file_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
	struct inode *inode = filp->f_mapping->host;
	int ret, err;

	err = filemap_write_and_wait_range(inode->i_mapping, start, end);
	err = file_write_and_wait_range(filp, start, end);
	if (err)
		return err;

Loading