|
@@ -1993,31 +1993,16 @@ static ssize_t ocfs2_file_splice_write(struct pipe_inode_info *pipe,
|
|
|
|
|
|
if (ret > 0) {
|
|
|
unsigned long nr_pages;
|
|
|
+ int err;
|
|
|
|
|
|
- *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);
|
|
|
+ err = generic_write_sync(out, *ppos, ret);
|
|
|
+ if (err)
|
|
|
+ ret = err;
|
|
|
+ else
|
|
|
+ *ppos += ret;
|
|
|
|
|
|
- if (err)
|
|
|
- ret = err;
|
|
|
- }
|
|
|
balance_dirty_pages_ratelimited_nr(mapping, nr_pages);
|
|
|
}
|
|
|
|