Skip to content

Commit 2eb7509

Browse files
author
Andreas Gruenbacher
committed
gfs2: Add wrapper for iomap_file_buffered_write
Add a wrapper around iomap_file_buffered_write. We'll add code for when the operation needs to be retried here later. Signed-off-by: Andreas Gruenbacher <[email protected]>
1 parent cdd591f commit 2eb7509

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

fs/gfs2/file.c

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -876,6 +876,20 @@ static ssize_t gfs2_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
876876
return written ? written : ret;
877877
}
878878

879+
static ssize_t gfs2_file_buffered_write(struct kiocb *iocb, struct iov_iter *from)
880+
{
881+
struct file *file = iocb->ki_filp;
882+
struct inode *inode = file_inode(file);
883+
ssize_t ret;
884+
885+
current->backing_dev_info = inode_to_bdi(inode);
886+
ret = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops);
887+
current->backing_dev_info = NULL;
888+
if (ret > 0)
889+
iocb->ki_pos += ret;
890+
return ret;
891+
}
892+
879893
/**
880894
* gfs2_file_write_iter - Perform a write to a file
881895
* @iocb: The io context
@@ -927,9 +941,7 @@ static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
927941
goto out_unlock;
928942

929943
iocb->ki_flags |= IOCB_DSYNC;
930-
current->backing_dev_info = inode_to_bdi(inode);
931-
buffered = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops);
932-
current->backing_dev_info = NULL;
944+
buffered = gfs2_file_buffered_write(iocb, from);
933945
if (unlikely(buffered <= 0)) {
934946
if (!ret)
935947
ret = buffered;
@@ -943,21 +955,16 @@ static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
943955
* the direct I/O range as we don't know if the buffered pages
944956
* made it to disk.
945957
*/
946-
iocb->ki_pos += buffered;
947958
ret2 = generic_write_sync(iocb, buffered);
948959
invalidate_mapping_pages(mapping,
949960
(iocb->ki_pos - buffered) >> PAGE_SHIFT,
950961
(iocb->ki_pos - 1) >> PAGE_SHIFT);
951962
if (!ret || ret2 > 0)
952963
ret += ret2;
953964
} else {
954-
current->backing_dev_info = inode_to_bdi(inode);
955-
ret = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops);
956-
current->backing_dev_info = NULL;
957-
if (likely(ret > 0)) {
958-
iocb->ki_pos += ret;
965+
ret = gfs2_file_buffered_write(iocb, from);
966+
if (likely(ret > 0))
959967
ret = generic_write_sync(iocb, ret);
960-
}
961968
}
962969

963970
out_unlock:

0 commit comments

Comments
 (0)