stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Patch "CIFS: Fix splice read for non-cached files" has been added to the 4.4-stable tree
@ 2017-03-08 10:27 gregkh
  2017-03-08 14:17 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: gregkh @ 2017-03-08 10:27 UTC (permalink / raw)
  To: pshilov, gregkh; +Cc: stable, stable-commits


This is a note to let you know that I've just added the patch titled

    CIFS: Fix splice read for non-cached files

to the 4.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     cifs-fix-splice-read-for-non-cached-files.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


>From 9c25702cee1405099f982894c865c163de7909a8 Mon Sep 17 00:00:00 2001
From: Pavel Shilovsky <pshilov@microsoft.com>
Date: Thu, 19 Jan 2017 13:53:15 -0800
Subject: CIFS: Fix splice read for non-cached files

From: Pavel Shilovsky <pshilov@microsoft.com>

commit 9c25702cee1405099f982894c865c163de7909a8 upstream.

Currently we call copy_page_to_iter() for uncached reading into a pipe.
This is wrong because it treats pages as VFS cache pages and copies references
rather than actual data. When we are trying to read from the pipe we end up
calling page_cache_pipe_buf_confirm() which returns -ENODATA. This error
is translated into 0 which is returned to a user.

This issue is reproduced by running xfs-tests suite (generic test #249)
against mount points with "cache=none". Fix it by mapping pages manually
and calling copy_to_iter() that copies data into the pipe.

Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/cifs/file.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -2840,7 +2840,15 @@ cifs_readdata_to_iov(struct cifs_readdat
 	for (i = 0; i < rdata->nr_pages; i++) {
 		struct page *page = rdata->pages[i];
 		size_t copy = min_t(size_t, remaining, PAGE_SIZE);
-		size_t written = copy_page_to_iter(page, 0, copy, iter);
+		size_t written;
+
+		if (unlikely(iter->type & ITER_PIPE)) {
+			void *addr = kmap_atomic(page);
+
+			written = copy_to_iter(addr, copy, iter);
+			kunmap_atomic(addr);
+		} else
+			written = copy_page_to_iter(page, 0, copy, iter);
 		remaining -= written;
 		if (written < copy && iov_iter_count(iter) > 0)
 			break;


Patches currently in stable-queue which might be from pshilov@microsoft.com are

queue-4.4/cifs-fix-splice-read-for-non-cached-files.patch

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Patch "CIFS: Fix splice read for non-cached files" has been added to the 4.4-stable tree
  2017-03-08 10:27 Patch "CIFS: Fix splice read for non-cached files" has been added to the 4.4-stable tree gregkh
@ 2017-03-08 14:17 ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2017-03-08 14:17 UTC (permalink / raw)
  To: pshilov; +Cc: stable, stable-commits

On Wed, Mar 08, 2017 at 11:27:22AM +0100, gregkh@linuxfoundation.org wrote:
> 
> This is a note to let you know that I've just added the patch titled
> 
>     CIFS: Fix splice read for non-cached files
> 
> to the 4.4-stable tree which can be found at:
>     http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
> 
> The filename of the patch is:
>      cifs-fix-splice-read-for-non-cached-files.patch
> and it can be found in the queue-4.4 subdirectory.
> 
> If you, or anyone else, feels it should not be added to the stable tree,
> please let <stable@vger.kernel.org> know about it.

Oops, nope, this breaks the build on 4.4-stable.  If it belongs there,
please send a properly backported version to me.

thanks,

greg k-h


> >From 9c25702cee1405099f982894c865c163de7909a8 Mon Sep 17 00:00:00 2001
> From: Pavel Shilovsky <pshilov@microsoft.com>
> Date: Thu, 19 Jan 2017 13:53:15 -0800
> Subject: CIFS: Fix splice read for non-cached files
> 
> From: Pavel Shilovsky <pshilov@microsoft.com>
> 
> commit 9c25702cee1405099f982894c865c163de7909a8 upstream.
> 
> Currently we call copy_page_to_iter() for uncached reading into a pipe.
> This is wrong because it treats pages as VFS cache pages and copies references
> rather than actual data. When we are trying to read from the pipe we end up
> calling page_cache_pipe_buf_confirm() which returns -ENODATA. This error
> is translated into 0 which is returned to a user.
> 
> This issue is reproduced by running xfs-tests suite (generic test #249)
> against mount points with "cache=none". Fix it by mapping pages manually
> and calling copy_to_iter() that copies data into the pipe.
> 
> Signed-off-by: Pavel Shilovsky <pshilov@microsoft.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> ---
>  fs/cifs/file.c |   10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> --- a/fs/cifs/file.c
> +++ b/fs/cifs/file.c
> @@ -2840,7 +2840,15 @@ cifs_readdata_to_iov(struct cifs_readdat
>  	for (i = 0; i < rdata->nr_pages; i++) {
>  		struct page *page = rdata->pages[i];
>  		size_t copy = min_t(size_t, remaining, PAGE_SIZE);
> -		size_t written = copy_page_to_iter(page, 0, copy, iter);
> +		size_t written;
> +
> +		if (unlikely(iter->type & ITER_PIPE)) {
> +			void *addr = kmap_atomic(page);
> +
> +			written = copy_to_iter(addr, copy, iter);
> +			kunmap_atomic(addr);
> +		} else
> +			written = copy_page_to_iter(page, 0, copy, iter);
>  		remaining -= written;
>  		if (written < copy && iov_iter_count(iter) > 0)
>  			break;
> 
> 
> Patches currently in stable-queue which might be from pshilov@microsoft.com are
> 
> queue-4.4/cifs-fix-splice-read-for-non-cached-files.patch

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-03-08 14:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-08 10:27 Patch "CIFS: Fix splice read for non-cached files" has been added to the 4.4-stable tree gregkh
2017-03-08 14:17 ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).