When we try to truncate read count in generic_file_buffered_read(),
should deliver (sb->s_maxbytes - offset) as maximum count not
sb->s_maxbytes itself.

Signed-off-by: Chengguang Xu <cgxu...@gmx.com>
---
 mm/filemap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/filemap.c b/mm/filemap.c
index 52517f28e6f4..5c2d481d21cf 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2064,7 +2064,7 @@ static ssize_t generic_file_buffered_read(struct kiocb 
*iocb,
 
        if (unlikely(*ppos >= inode->i_sb->s_maxbytes))
                return 0;
-       iov_iter_truncate(iter, inode->i_sb->s_maxbytes);
+       iov_iter_truncate(iter, inode->i_sb->s_maxbytes - *ppos);
 
        index = *ppos >> PAGE_SHIFT;
        prev_index = ra->prev_pos >> PAGE_SHIFT;
-- 
2.17.1

Reply via email to