|
@@ -272,13 +272,13 @@ nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)
|
|
|
datasync);
|
|
|
|
|
|
ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
mutex_lock(&inode->i_mutex);
|
|
|
|
|
|
nfs_inc_stats(inode, NFSIOS_VFSFSYNC);
|
|
|
have_error = test_and_clear_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags);
|
|
|
status = nfs_commit_inode(inode, FLUSH_SYNC);
|
|
|
+ if (status >= 0 && ret < 0)
|
|
|
+ status = ret;
|
|
|
have_error |= test_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags);
|
|
|
if (have_error)
|
|
|
ret = xchg(&ctx->error, 0);
|