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

Commit d23c937b authored by Jan Kara's avatar Jan Kara
Browse files

ocfs2: Update syncing after splicing to match generic version



Update ocfs2 specific splicing code to use generic syncing helper. The sync now
does not happen under rw_lock because generic_write_sync() acquires i_mutex
which ranks above rw_lock. That should not matter because standard fsync path
does not hold it either.

Acked-by: default avatarJoel Becker <Joel.Becker@oracle.com>
Acked-by: default avatarMark Fasheh <mfasheh@suse.com>
CC: ocfs2-devel@oss.oracle.com
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent ebbbf757
Loading
Loading
Loading
Loading
+6 −21
Original line number Diff line number Diff line
@@ -1993,31 +1993,16 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe,

	if (ret > 0) {
		unsigned long nr_pages;

		*ppos += ret;
		nr_pages = (ret + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;

		/*
		 * If file or inode is SYNC and we actually wrote some data,
		 * sync it.
		 */
		if (unlikely((out->f_flags & O_SYNC) || IS_SYNC(inode))) {
		int err;

			mutex_lock(&inode->i_mutex);
			err = ocfs2_rw_lock(inode, 1);
			if (err < 0) {
				mlog_errno(err);
			} else {
				err = generic_osync_inode(inode, mapping,
						  OSYNC_METADATA|OSYNC_DATA);
				ocfs2_rw_unlock(inode, 1);
			}
			mutex_unlock(&inode->i_mutex);
		nr_pages = (ret + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;

		err = generic_write_sync(out, *ppos, ret);
		if (err)
			ret = err;
		}
		else
			*ppos += ret;

		balance_dirty_pages_ratelimited_nr(mapping, nr_pages);
	}