diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2013-03-20 13:04:20 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-04-09 14:12:56 -0400 |
commit | 03d95eb2f2578083a3f6286262e1cb5d88a00c02 (patch) | |
tree | a82585b55080628e0ba0028dfb100886bf5b4099 /fs/read_write.c | |
parent | 72ec35163f9f728ba1579fd80682e51e933dfa8a (diff) |
lift sb_start_write() out of ->write()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/read_write.c')
-rw-r--r-- | fs/read_write.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/fs/read_write.c b/fs/read_write.c index e6dd1c2d0592..a1f4d44cbc03 100644 --- a/fs/read_write.c +++ b/fs/read_write.c | |||
@@ -398,7 +398,6 @@ ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, lof | |||
398 | struct kiocb kiocb; | 398 | struct kiocb kiocb; |
399 | ssize_t ret; | 399 | ssize_t ret; |
400 | 400 | ||
401 | file_start_write(filp); | ||
402 | init_sync_kiocb(&kiocb, filp); | 401 | init_sync_kiocb(&kiocb, filp); |
403 | kiocb.ki_pos = *ppos; | 402 | kiocb.ki_pos = *ppos; |
404 | kiocb.ki_left = len; | 403 | kiocb.ki_left = len; |
@@ -414,7 +413,6 @@ ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, lof | |||
414 | if (-EIOCBQUEUED == ret) | 413 | if (-EIOCBQUEUED == ret) |
415 | ret = wait_on_sync_kiocb(&kiocb); | 414 | ret = wait_on_sync_kiocb(&kiocb); |
416 | *ppos = kiocb.ki_pos; | 415 | *ppos = kiocb.ki_pos; |
417 | file_end_write(filp); | ||
418 | return ret; | 416 | return ret; |
419 | } | 417 | } |
420 | 418 | ||
@@ -458,6 +456,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_ | |||
458 | ret = rw_verify_area(WRITE, file, pos, count); | 456 | ret = rw_verify_area(WRITE, file, pos, count); |
459 | if (ret >= 0) { | 457 | if (ret >= 0) { |
460 | count = ret; | 458 | count = ret; |
459 | file_start_write(file); | ||
461 | if (file->f_op->write) | 460 | if (file->f_op->write) |
462 | ret = file->f_op->write(file, buf, count, pos); | 461 | ret = file->f_op->write(file, buf, count, pos); |
463 | else | 462 | else |
@@ -467,6 +466,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_ | |||
467 | add_wchar(current, ret); | 466 | add_wchar(current, ret); |
468 | } | 467 | } |
469 | inc_syscw(current); | 468 | inc_syscw(current); |
469 | file_end_write(file); | ||
470 | } | 470 | } |
471 | 471 | ||
472 | return ret; | 472 | return ret; |
@@ -758,16 +758,18 @@ static ssize_t do_readv_writev(int type, struct file *file, | |||
758 | } else { | 758 | } else { |
759 | fn = (io_fn_t)file->f_op->write; | 759 | fn = (io_fn_t)file->f_op->write; |
760 | fnv = file->f_op->aio_write; | 760 | fnv = file->f_op->aio_write; |
761 | file_start_write(file); | ||
761 | } | 762 | } |
762 | 763 | ||
763 | if (fnv) { | 764 | if (fnv) |
764 | file_start_write(file); | ||
765 | ret = do_sync_readv_writev(file, iov, nr_segs, tot_len, | 765 | ret = do_sync_readv_writev(file, iov, nr_segs, tot_len, |
766 | pos, fnv); | 766 | pos, fnv); |
767 | file_end_write(file); | 767 | else |
768 | } else | ||
769 | ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn); | 768 | ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn); |
770 | 769 | ||
770 | if (type != READ) | ||
771 | file_end_write(file); | ||
772 | |||
771 | out: | 773 | out: |
772 | if (iov != iovstack) | 774 | if (iov != iovstack) |
773 | kfree(iov); | 775 | kfree(iov); |
@@ -936,16 +938,18 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, | |||
936 | } else { | 938 | } else { |
937 | fn = (io_fn_t)file->f_op->write; | 939 | fn = (io_fn_t)file->f_op->write; |
938 | fnv = file->f_op->aio_write; | 940 | fnv = file->f_op->aio_write; |
941 | file_start_write(file); | ||
939 | } | 942 | } |
940 | 943 | ||
941 | if (fnv) { | 944 | if (fnv) |
942 | file_start_write(file); | ||
943 | ret = do_sync_readv_writev(file, iov, nr_segs, tot_len, | 945 | ret = do_sync_readv_writev(file, iov, nr_segs, tot_len, |
944 | pos, fnv); | 946 | pos, fnv); |
945 | file_end_write(file); | 947 | else |
946 | } else | ||
947 | ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn); | 948 | ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn); |
948 | 949 | ||
950 | if (type != READ) | ||
951 | file_end_write(file); | ||
952 | |||
949 | out: | 953 | out: |
950 | if (iov != iovstack) | 954 | if (iov != iovstack) |
951 | kfree(iov); | 955 | kfree(iov); |