diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2017-04-13 14:13:36 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2017-04-21 13:57:47 -0400 |
commit | 5ecda13711b3bd4a750b5740897bf13d1720de7c (patch) | |
tree | f1a1003f00826cc0924ac8dacd213f472a31fa08 | |
parent | 639a93a521c759ddb32cc875f3ea1965072b2cbc (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.c | 8 |
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 | } |