aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2017-04-13 14:13:36 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2017-04-21 13:57:47 -0400
commit5ecda13711b3bd4a750b5740897bf13d1720de7c (patch)
treef1a1003f00826cc0924ac8dacd213f472a31fa08
parent639a93a521c759ddb32cc875f3ea1965072b2cbc (diff)
generic_file_read_iter(): make use of iov_iter_revert()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--mm/filemap.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index 9f788eecd2c5..cc480c07c71b 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2033,7 +2033,6 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
2033 if (iocb->ki_flags & IOCB_DIRECT) { 2033 if (iocb->ki_flags & IOCB_DIRECT) {
2034 struct address_space *mapping = file->f_mapping; 2034 struct address_space *mapping = file->f_mapping;
2035 struct inode *inode = mapping->host; 2035 struct inode *inode = mapping->host;
2036 struct iov_iter data = *iter;
2037 loff_t size; 2036 loff_t size;
2038 2037
2039 size = i_size_read(inode); 2038 size = i_size_read(inode);
@@ -2044,11 +2043,12 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
2044 2043
2045 file_accessed(file); 2044 file_accessed(file);
2046 2045
2047 retval = mapping->a_ops->direct_IO(iocb, &data); 2046 retval = mapping->a_ops->direct_IO(iocb, iter);
2048 if (retval >= 0) { 2047 if (retval >= 0) {
2049 iocb->ki_pos += retval; 2048 iocb->ki_pos += retval;
2050 iov_iter_advance(iter, retval); 2049 count -= retval;
2051 } 2050 }
2051 iov_iter_revert(iter, iov_iter_count(iter) - count);
2052 2052
2053 /* 2053 /*
2054 * Btrfs can have a short DIO read if we encounter 2054 * Btrfs can have a short DIO read if we encounter
@@ -2059,7 +2059,7 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
2059 * the rest of the read. Buffered reads will not work for 2059 * the rest of the read. Buffered reads will not work for
2060 * DAX files, so don't bother trying. 2060 * DAX files, so don't bother trying.
2061 */ 2061 */
2062 if (retval < 0 || !iov_iter_count(iter) || iocb->ki_pos >= size || 2062 if (retval < 0 || !count || iocb->ki_pos >= size ||
2063 IS_DAX(inode)) 2063 IS_DAX(inode))
2064 goto out; 2064 goto out;
2065 } 2065 }