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

Commit 22401e7b authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

fuse: clean up fsync



Don't need to start I/O twice (once without i_mutex and one within).

Also make sure that even if the userspace filesystem doesn't support FSYNC
we do all the steps other than sending the message.

Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
parent 93d2269d
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -490,13 +490,6 @@ int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
	if (is_bad_inode(inode))
		return -EIO;

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

	if ((!isdir && fc->no_fsync) || (isdir && fc->no_fsyncdir))
		return 0;

	mutex_lock(&inode->i_mutex);

	/*
@@ -504,7 +497,7 @@ int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
	 * wait for all outstanding writes, before sending the FSYNC
	 * request.
	 */
	err = write_inode_now(inode, 0);
	err = filemap_write_and_wait_range(inode->i_mapping, start, end);
	if (err)
		goto out;

@@ -515,6 +508,8 @@ int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
		if (err)
			goto out;
	}
	if ((!isdir && fc->no_fsync) || (isdir && fc->no_fsyncdir))
		goto out;

	req = fuse_get_req_nopages(fc);
	if (IS_ERR(req)) {