diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 13:30:18 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 13:30:18 -0400 |
commit | 16b9057804c02e2d351e9c8f606e909b43cbd9e7 (patch) | |
tree | a3ac6e1d9d57a8abf4267e5ead3f2de1309335eb /fs/afs | |
parent | 5c02c392cd2320e8d612376d6b72b6548a680923 (diff) | |
parent | c2338f2dc7c1e9f6202f370c64ffd7f44f3d4b51 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs updates from Al Viro:
"This the bunch that sat in -next + lock_parent() fix. This is the
minimal set; there's more pending stuff.
In particular, I really hope to get acct.c fixes merged this cycle -
we need that to deal sanely with delayed-mntput stuff. In the next
pile, hopefully - that series is fairly short and localized
(kernel/acct.c, fs/super.c and fs/namespace.c). In this pile: more
iov_iter work. Most of prereqs for ->splice_write with sane locking
order are there and Kent's dio rewrite would also fit nicely on top of
this pile"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (70 commits)
lock_parent: don't step on stale ->d_parent of all-but-freed one
kill generic_file_splice_write()
ceph: switch to iter_file_splice_write()
shmem: switch to iter_file_splice_write()
nfs: switch to iter_splice_write_file()
fs/splice.c: remove unneeded exports
ocfs2: switch to iter_file_splice_write()
->splice_write() via ->write_iter()
bio_vec-backed iov_iter
optimize copy_page_{to,from}_iter()
bury generic_file_aio_{read,write}
lustre: get rid of messing with iovecs
ceph: switch to ->write_iter()
ceph_sync_direct_write: stop poking into iov_iter guts
ceph_sync_read: stop poking into iov_iter guts
new helper: copy_page_from_iter()
fuse: switch to ->write_iter()
btrfs: switch to ->write_iter()
ocfs2: switch to ->write_iter()
xfs: switch to ->write_iter()
...
Diffstat (limited to 'fs/afs')
-rw-r--r-- | fs/afs/file.c | 8 | ||||
-rw-r--r-- | fs/afs/internal.h | 3 | ||||
-rw-r--r-- | fs/afs/write.c | 11 |
3 files changed, 10 insertions, 12 deletions
diff --git a/fs/afs/file.c b/fs/afs/file.c index 66d50fe2ee45..932ce07948b3 100644 --- a/fs/afs/file.c +++ b/fs/afs/file.c | |||
@@ -31,10 +31,10 @@ const struct file_operations afs_file_operations = { | |||
31 | .open = afs_open, | 31 | .open = afs_open, |
32 | .release = afs_release, | 32 | .release = afs_release, |
33 | .llseek = generic_file_llseek, | 33 | .llseek = generic_file_llseek, |
34 | .read = do_sync_read, | 34 | .read = new_sync_read, |
35 | .write = do_sync_write, | 35 | .write = new_sync_write, |
36 | .aio_read = generic_file_aio_read, | 36 | .read_iter = generic_file_read_iter, |
37 | .aio_write = afs_file_write, | 37 | .write_iter = afs_file_write, |
38 | .mmap = generic_file_readonly_mmap, | 38 | .mmap = generic_file_readonly_mmap, |
39 | .splice_read = generic_file_splice_read, | 39 | .splice_read = generic_file_splice_read, |
40 | .fsync = afs_fsync, | 40 | .fsync = afs_fsync, |
diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 590b55f46d61..71d5982312f3 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h | |||
@@ -747,8 +747,7 @@ extern int afs_write_end(struct file *file, struct address_space *mapping, | |||
747 | extern int afs_writepage(struct page *, struct writeback_control *); | 747 | extern int afs_writepage(struct page *, struct writeback_control *); |
748 | extern int afs_writepages(struct address_space *, struct writeback_control *); | 748 | extern int afs_writepages(struct address_space *, struct writeback_control *); |
749 | extern void afs_pages_written_back(struct afs_vnode *, struct afs_call *); | 749 | extern void afs_pages_written_back(struct afs_vnode *, struct afs_call *); |
750 | extern ssize_t afs_file_write(struct kiocb *, const struct iovec *, | 750 | extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *); |
751 | unsigned long, loff_t); | ||
752 | extern int afs_writeback_all(struct afs_vnode *); | 751 | extern int afs_writeback_all(struct afs_vnode *); |
753 | extern int afs_fsync(struct file *, loff_t, loff_t, int); | 752 | extern int afs_fsync(struct file *, loff_t, loff_t, int); |
754 | 753 | ||
diff --git a/fs/afs/write.c b/fs/afs/write.c index a890db4b9898..ab6adfd52516 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c | |||
@@ -625,15 +625,14 @@ void afs_pages_written_back(struct afs_vnode *vnode, struct afs_call *call) | |||
625 | /* | 625 | /* |
626 | * write to an AFS file | 626 | * write to an AFS file |
627 | */ | 627 | */ |
628 | ssize_t afs_file_write(struct kiocb *iocb, const struct iovec *iov, | 628 | ssize_t afs_file_write(struct kiocb *iocb, struct iov_iter *from) |
629 | unsigned long nr_segs, loff_t pos) | ||
630 | { | 629 | { |
631 | struct afs_vnode *vnode = AFS_FS_I(file_inode(iocb->ki_filp)); | 630 | struct afs_vnode *vnode = AFS_FS_I(file_inode(iocb->ki_filp)); |
632 | ssize_t result; | 631 | ssize_t result; |
633 | size_t count = iov_length(iov, nr_segs); | 632 | size_t count = iov_iter_count(from); |
634 | 633 | ||
635 | _enter("{%x.%u},{%zu},%lu,", | 634 | _enter("{%x.%u},{%zu},", |
636 | vnode->fid.vid, vnode->fid.vnode, count, nr_segs); | 635 | vnode->fid.vid, vnode->fid.vnode, count); |
637 | 636 | ||
638 | if (IS_SWAPFILE(&vnode->vfs_inode)) { | 637 | if (IS_SWAPFILE(&vnode->vfs_inode)) { |
639 | printk(KERN_INFO | 638 | printk(KERN_INFO |
@@ -644,7 +643,7 @@ ssize_t afs_file_write(struct kiocb *iocb, const struct iovec *iov, | |||
644 | if (!count) | 643 | if (!count) |
645 | return 0; | 644 | return 0; |
646 | 645 | ||
647 | result = generic_file_aio_write(iocb, iov, nr_segs, pos); | 646 | result = generic_file_write_iter(iocb, from); |
648 | if (IS_ERR_VALUE(result)) { | 647 | if (IS_ERR_VALUE(result)) { |
649 | _leave(" = %zd", result); | 648 | _leave(" = %zd", result); |
650 | return result; | 649 | return result; |