aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/file.c')
-rw-r--r--fs/nfs/file.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
index 748bb813b8ec..89bf093d342a 100644
--- a/fs/nfs/file.c
+++ b/fs/nfs/file.c
@@ -233,7 +233,7 @@ EXPORT_SYMBOL_GPL(nfs_file_mmap);
233 * nfs_file_write() that a write error occurred, and hence cause it to 233 * nfs_file_write() that a write error occurred, and hence cause it to
234 * fall back to doing a synchronous write. 234 * fall back to doing a synchronous write.
235 */ 235 */
236int 236static int
237nfs_file_fsync_commit(struct file *file, loff_t start, loff_t end, int datasync) 237nfs_file_fsync_commit(struct file *file, loff_t start, loff_t end, int datasync)
238{ 238{
239 struct nfs_open_context *ctx = nfs_file_open_context(file); 239 struct nfs_open_context *ctx = nfs_file_open_context(file);
@@ -263,9 +263,8 @@ nfs_file_fsync_commit(struct file *file, loff_t start, loff_t end, int datasync)
263out: 263out:
264 return ret; 264 return ret;
265} 265}
266EXPORT_SYMBOL_GPL(nfs_file_fsync_commit);
267 266
268static int 267int
269nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync) 268nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)
270{ 269{
271 int ret; 270 int ret;
@@ -273,13 +272,15 @@ nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)
273 272
274 trace_nfs_fsync_enter(inode); 273 trace_nfs_fsync_enter(inode);
275 274
276 nfs_inode_dio_wait(inode); 275 inode_dio_wait(inode);
277 do { 276 do {
278 ret = filemap_write_and_wait_range(inode->i_mapping, start, end); 277 ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
279 if (ret != 0) 278 if (ret != 0)
280 break; 279 break;
281 inode_lock(inode); 280 inode_lock(inode);
282 ret = nfs_file_fsync_commit(file, start, end, datasync); 281 ret = nfs_file_fsync_commit(file, start, end, datasync);
282 if (!ret)
283 ret = pnfs_sync_inode(inode, !!datasync);
283 inode_unlock(inode); 284 inode_unlock(inode);
284 /* 285 /*
285 * If nfs_file_fsync_commit detected a server reboot, then 286 * If nfs_file_fsync_commit detected a server reboot, then
@@ -293,6 +294,7 @@ nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)
293 trace_nfs_fsync_exit(inode, ret); 294 trace_nfs_fsync_exit(inode, ret);
294 return ret; 295 return ret;
295} 296}
297EXPORT_SYMBOL_GPL(nfs_file_fsync);
296 298
297/* 299/*
298 * Decide whether a read/modify/write cycle may be more efficient 300 * Decide whether a read/modify/write cycle may be more efficient
@@ -368,7 +370,7 @@ start:
368 /* 370 /*
369 * Wait for O_DIRECT to complete 371 * Wait for O_DIRECT to complete
370 */ 372 */
371 nfs_inode_dio_wait(mapping->host); 373 inode_dio_wait(mapping->host);
372 374
373 page = grab_cache_page_write_begin(mapping, index, flags); 375 page = grab_cache_page_write_begin(mapping, index, flags);
374 if (!page) 376 if (!page)