diff options
author | Christoph Hellwig <hch@lst.de> | 2009-12-17 08:24:40 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-12-17 11:03:25 -0500 |
commit | 7a0ad10c367ab57c899d340372f37880cbe6ab52 (patch) | |
tree | 7e21f078c03cbeb350d964c23a2c49f7016f5ef7 | |
parent | 76b7e0058d09f8104387980a690001681c04cc0a (diff) |
fold do_sync_file_range into sys_sync_file_range
We recently go rid of all callers of do_sync_file_range as they're better
served with vfs_fsync or the filemap_write_and_wait. Now that
do_sync_file_range is down to a single caller fold it into it so that people
don't start using it again accidentally. While at it also switch it from
using __filemap_fdatawrite_range(..., WB_SYNC_ALL) to the more clear
filemap_fdatawrite_range().
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/sync.c | 59 | ||||
-rw-r--r-- | include/linux/fs.h | 4 |
2 files changed, 23 insertions, 40 deletions
@@ -355,6 +355,7 @@ SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes, | |||
355 | { | 355 | { |
356 | int ret; | 356 | int ret; |
357 | struct file *file; | 357 | struct file *file; |
358 | struct address_space *mapping; | ||
358 | loff_t endbyte; /* inclusive */ | 359 | loff_t endbyte; /* inclusive */ |
359 | int fput_needed; | 360 | int fput_needed; |
360 | umode_t i_mode; | 361 | umode_t i_mode; |
@@ -405,7 +406,28 @@ SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes, | |||
405 | !S_ISLNK(i_mode)) | 406 | !S_ISLNK(i_mode)) |
406 | goto out_put; | 407 | goto out_put; |
407 | 408 | ||
408 | ret = do_sync_mapping_range(file->f_mapping, offset, endbyte, flags); | 409 | mapping = file->f_mapping; |
410 | if (!mapping) { | ||
411 | ret = -EINVAL; | ||
412 | goto out_put; | ||
413 | } | ||
414 | |||
415 | ret = 0; | ||
416 | if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) { | ||
417 | ret = filemap_fdatawait_range(mapping, offset, endbyte); | ||
418 | if (ret < 0) | ||
419 | goto out_put; | ||
420 | } | ||
421 | |||
422 | if (flags & SYNC_FILE_RANGE_WRITE) { | ||
423 | ret = filemap_fdatawrite_range(mapping, offset, endbyte); | ||
424 | if (ret < 0) | ||
425 | goto out_put; | ||
426 | } | ||
427 | |||
428 | if (flags & SYNC_FILE_RANGE_WAIT_AFTER) | ||
429 | ret = filemap_fdatawait_range(mapping, offset, endbyte); | ||
430 | |||
409 | out_put: | 431 | out_put: |
410 | fput_light(file, fput_needed); | 432 | fput_light(file, fput_needed); |
411 | out: | 433 | out: |
@@ -437,38 +459,3 @@ asmlinkage long SyS_sync_file_range2(long fd, long flags, | |||
437 | } | 459 | } |
438 | SYSCALL_ALIAS(sys_sync_file_range2, SyS_sync_file_range2); | 460 | SYSCALL_ALIAS(sys_sync_file_range2, SyS_sync_file_range2); |
439 | #endif | 461 | #endif |
440 | |||
441 | /* | ||
442 | * `endbyte' is inclusive | ||
443 | */ | ||
444 | int do_sync_mapping_range(struct address_space *mapping, loff_t offset, | ||
445 | loff_t endbyte, unsigned int flags) | ||
446 | { | ||
447 | int ret; | ||
448 | |||
449 | if (!mapping) { | ||
450 | ret = -EINVAL; | ||
451 | goto out; | ||
452 | } | ||
453 | |||
454 | ret = 0; | ||
455 | if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) { | ||
456 | ret = filemap_fdatawait_range(mapping, offset, endbyte); | ||
457 | if (ret < 0) | ||
458 | goto out; | ||
459 | } | ||
460 | |||
461 | if (flags & SYNC_FILE_RANGE_WRITE) { | ||
462 | ret = __filemap_fdatawrite_range(mapping, offset, endbyte, | ||
463 | WB_SYNC_ALL); | ||
464 | if (ret < 0) | ||
465 | goto out; | ||
466 | } | ||
467 | |||
468 | if (flags & SYNC_FILE_RANGE_WAIT_AFTER) { | ||
469 | ret = filemap_fdatawait_range(mapping, offset, endbyte); | ||
470 | } | ||
471 | out: | ||
472 | return ret; | ||
473 | } | ||
474 | EXPORT_SYMBOL_GPL(do_sync_mapping_range); | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index 66bc0a54b284..77a975089d9a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1095,10 +1095,6 @@ struct file_lock { | |||
1095 | 1095 | ||
1096 | extern void send_sigio(struct fown_struct *fown, int fd, int band); | 1096 | extern void send_sigio(struct fown_struct *fown, int fd, int band); |
1097 | 1097 | ||
1098 | /* fs/sync.c */ | ||
1099 | extern int do_sync_mapping_range(struct address_space *mapping, loff_t offset, | ||
1100 | loff_t endbyte, unsigned int flags); | ||
1101 | |||
1102 | #ifdef CONFIG_FILE_LOCKING | 1098 | #ifdef CONFIG_FILE_LOCKING |
1103 | extern int fcntl_getlk(struct file *, struct flock __user *); | 1099 | extern int fcntl_getlk(struct file *, struct flock __user *); |
1104 | extern int fcntl_setlk(unsigned int, struct file *, unsigned int, | 1100 | extern int fcntl_setlk(unsigned int, struct file *, unsigned int, |