From: Long Li Date: Sun, 16 Dec 2018 23:17:04 +0000 (+0000) Subject: CIFS: use the correct length when pinning memory for direct I/O for write X-Git-Tag: v5.0-rc1~62^2~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b6bc8a7b993e62f82415a5e3e4a6469e80fea19c;p=thirdparty%2Fkernel%2Flinux.git CIFS: use the correct length when pinning memory for direct I/O for write The current code attempts to pin memory using the largest possible wsize based on the currect SMB credits. This doesn't cause kernel oops but this is not optimal as we may pin more pages then actually needed. Fix this by only pinning what are needed for doing this write I/O. Signed-off-by: Long Li Cc: stable@vger.kernel.org Signed-off-by: Steve French Reviewed-by: Joey Pabalinas --- diff --git a/fs/cifs/file.c b/fs/cifs/file.c index c9bc56b1baac2..179991435777e 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -2617,11 +2617,13 @@ cifs_write_from_iter(loff_t offset, size_t len, struct iov_iter *from, if (rc) break; + cur_len = min_t(const size_t, len, wsize); + if (ctx->direct_io) { ssize_t result; result = iov_iter_get_pages_alloc( - from, &pagevec, wsize, &start); + from, &pagevec, cur_len, &start); if (result < 0) { cifs_dbg(VFS, "direct_writev couldn't get user pages "