Skip to content

Commit 800ba29

Browse files
author
Matthew Wilcox (Oracle)
committed
fs: Pass an iocb to generic_perform_write()
We can extract both the file pointer and the pos from the iocb. This simplifies each caller as well as allowing generic_perform_write() to see more of the iocb contents in the future. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Christian Brauner <brauner@kernel.org> Reviewed-by: Al Viro <viro@zeniv.linux.org.uk> Acked-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent b2403a6 commit 800ba29

6 files changed

Lines changed: 11 additions & 9 deletions

File tree

fs/ceph/file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1869,7 +1869,7 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
18691869
* are pending vmtruncate. So write and vmtruncate
18701870
* can not run at the same time
18711871
*/
1872-
written = generic_perform_write(file, from, pos);
1872+
written = generic_perform_write(iocb, from);
18731873
if (likely(written >= 0))
18741874
iocb->ki_pos = pos + written;
18751875
ceph_end_io_write(inode);

fs/ext4/file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ static ssize_t ext4_buffered_write_iter(struct kiocb *iocb,
267267
goto out;
268268

269269
current->backing_dev_info = inode_to_bdi(inode);
270-
ret = generic_perform_write(iocb->ki_filp, from, iocb->ki_pos);
270+
ret = generic_perform_write(iocb, from);
271271
current->backing_dev_info = NULL;
272272

273273
out:

fs/f2fs/file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4448,7 +4448,7 @@ static ssize_t f2fs_buffered_write_iter(struct kiocb *iocb,
44484448
return -EOPNOTSUPP;
44494449

44504450
current->backing_dev_info = inode_to_bdi(inode);
4451-
ret = generic_perform_write(file, from, iocb->ki_pos);
4451+
ret = generic_perform_write(iocb, from);
44524452
current->backing_dev_info = NULL;
44534453

44544454
if (ret > 0) {

fs/nfs/file.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from)
646646
result = generic_write_checks(iocb, from);
647647
if (result > 0) {
648648
current->backing_dev_info = inode_to_bdi(inode);
649-
result = generic_perform_write(file, from, iocb->ki_pos);
649+
result = generic_perform_write(iocb, from);
650650
current->backing_dev_info = NULL;
651651
}
652652
nfs_end_io_write(inode);

include/linux/fs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2999,7 +2999,7 @@ extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
29992999
extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
30003000
extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
30013001
extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *);
3002-
extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t);
3002+
ssize_t generic_perform_write(struct kiocb *, struct iov_iter *);
30033003

30043004
ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos,
30053005
rwf_t flags);

mm/filemap.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3752,9 +3752,10 @@ generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from)
37523752
}
37533753
EXPORT_SYMBOL(generic_file_direct_write);
37543754

3755-
ssize_t generic_perform_write(struct file *file,
3756-
struct iov_iter *i, loff_t pos)
3755+
ssize_t generic_perform_write(struct kiocb *iocb, struct iov_iter *i)
37573756
{
3757+
struct file *file = iocb->ki_filp;
3758+
loff_t pos = iocb->ki_pos;
37583759
struct address_space *mapping = file->f_mapping;
37593760
const struct address_space_operations *a_ops = mapping->a_ops;
37603761
long status = 0;
@@ -3884,7 +3885,8 @@ ssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
38843885
if (written < 0 || !iov_iter_count(from) || IS_DAX(inode))
38853886
goto out;
38863887

3887-
status = generic_perform_write(file, from, pos = iocb->ki_pos);
3888+
pos = iocb->ki_pos;
3889+
status = generic_perform_write(iocb, from);
38883890
/*
38893891
* If generic_perform_write() returned a synchronous error
38903892
* then we want to return the number of bytes which were
@@ -3916,7 +3918,7 @@ ssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
39163918
*/
39173919
}
39183920
} else {
3919-
written = generic_perform_write(file, from, iocb->ki_pos);
3921+
written = generic_perform_write(iocb, from);
39203922
if (likely(written > 0))
39213923
iocb->ki_pos += written;
39223924
}

0 commit comments

Comments
 (0)