diff options
Diffstat (limited to 'fs/nfs/file.c')
-rw-r--r-- | fs/nfs/file.c | 12 |
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 | */ |
236 | int | 236 | static int |
237 | nfs_file_fsync_commit(struct file *file, loff_t start, loff_t end, int datasync) | 237 | nfs_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) | |||
263 | out: | 263 | out: |
264 | return ret; | 264 | return ret; |
265 | } | 265 | } |
266 | EXPORT_SYMBOL_GPL(nfs_file_fsync_commit); | ||
267 | 266 | ||
268 | static int | 267 | int |
269 | nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync) | 268 | nfs_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 | } |
297 | EXPORT_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) |