@@ -876,6 +876,20 @@ static ssize_t gfs2_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
876
876
return written ? written : ret ;
877
877
}
878
878
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
+
879
893
/**
880
894
* gfs2_file_write_iter - Perform a write to a file
881
895
* @iocb: The io context
@@ -927,9 +941,7 @@ static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
927
941
goto out_unlock ;
928
942
929
943
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 );
933
945
if (unlikely (buffered <= 0 )) {
934
946
if (!ret )
935
947
ret = buffered ;
@@ -943,21 +955,16 @@ static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
943
955
* the direct I/O range as we don't know if the buffered pages
944
956
* made it to disk.
945
957
*/
946
- iocb -> ki_pos += buffered ;
947
958
ret2 = generic_write_sync (iocb , buffered );
948
959
invalidate_mapping_pages (mapping ,
949
960
(iocb -> ki_pos - buffered ) >> PAGE_SHIFT ,
950
961
(iocb -> ki_pos - 1 ) >> PAGE_SHIFT );
951
962
if (!ret || ret2 > 0 )
952
963
ret += ret2 ;
953
964
} 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 ))
959
967
ret = generic_write_sync (iocb , ret );
960
- }
961
968
}
962
969
963
970
out_unlock :
0 commit comments