From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.linuxfoundation.org ([140.211.169.12]:35536 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751512AbdADKIk (ORCPT ); Wed, 4 Jan 2017 05:08:40 -0500 Subject: Patch "splice: reinstate SIGPIPE/EPIPE handling" has been added to the 4.9-stable tree To: torvalds@linux-foundation.org, gregkh@linuxfoundation.org, schwab@linux-m68k.org, viro@zeniv.linux.org.uk Cc: , From: Date: Wed, 04 Jan 2017 11:08:16 +0100 Message-ID: <148352449613962@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: This is a note to let you know that I've just added the patch titled splice: reinstate SIGPIPE/EPIPE handling to the 4.9-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: splice-reinstate-sigpipe-epipe-handling.patch and it can be found in the queue-4.9 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >>From 52bce91165e5f2db422b2b972e83d389e5e4725c Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Wed, 21 Dec 2016 10:59:34 -0800 Subject: splice: reinstate SIGPIPE/EPIPE handling From: Linus Torvalds commit 52bce91165e5f2db422b2b972e83d389e5e4725c upstream. Commit 8924feff66f3 ("splice: lift pipe_lock out of splice_to_pipe()") caused a regression when there were no more readers left on a pipe that was being spliced into: rather than the expected SIGPIPE and -EPIPE return value, the writer would end up waiting forever for space to free up (which obviously was not going to happen with no readers around). Fixes: 8924feff66f3 ("splice: lift pipe_lock out of splice_to_pipe()") Reported-and-tested-by: Andreas Schwab Debugged-by: Al Viro Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- fs/splice.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) --- a/fs/splice.c +++ b/fs/splice.c @@ -1086,7 +1086,13 @@ EXPORT_SYMBOL(do_splice_direct); static int wait_for_space(struct pipe_inode_info *pipe, unsigned flags) { - while (pipe->nrbufs == pipe->buffers) { + for (;;) { + if (unlikely(!pipe->readers)) { + send_sig(SIGPIPE, current, 0); + return -EPIPE; + } + if (pipe->nrbufs != pipe->buffers) + return 0; if (flags & SPLICE_F_NONBLOCK) return -EAGAIN; if (signal_pending(current)) @@ -1095,7 +1101,6 @@ static int wait_for_space(struct pipe_in pipe_wait(pipe); pipe->waiting_writers--; } - return 0; } static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe, Patches currently in stable-queue which might be from torvalds@linux-foundation.org are queue-4.9/mm-page_alloc-keep-pcp-count-and-list-contents-in-sync-if-struct-page-is-corrupted.patch queue-4.9/splice-reinstate-sigpipe-epipe-handling.patch queue-4.9/mm-vmscan.c-set-correct-defer-count-for-shrinker.patch queue-4.9/vfs-mm-fix-return-value-of-read-at-s_maxbytes.patch