From owner-freebsd-bugs@FreeBSD.ORG Fri Jul 27 12:29:09 2012 Return-Path: Delivered-To: freebsd-bugs@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A1DB51065670; Fri, 27 Jul 2012 12:29:09 +0000 (UTC) (envelope-from listlog2011@gmail.com) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 8787E8FC12; Fri, 27 Jul 2012 12:29:09 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q6RCT4oe043291; Fri, 27 Jul 2012 12:29:05 GMT (envelope-from listlog2011@gmail.com) Message-ID: <5012898E.8060602@gmail.com> Date: Fri, 27 Jul 2012 20:29:02 +0800 From: David Xu User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120713 Thunderbird/14.0 MIME-Version: 1.0 To: Bruce Evans References: <201207262256.q6QMurVf077480@red.freebsd.org> <20120727103622.B933@besplex.bde.org> <501256C6.5000307@gmail.com> <20120727210330.L6869@besplex.bde.org> In-Reply-To: <20120727210330.L6869@besplex.bde.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Garrett Cooper , freebsd-bugs@FreeBSD.org, freebsd-gnats-submit@FreeBSD.org, davidxu@FreeBSD.org Subject: Re: kern/170203: [kern] piped dd's don't behave sanely when dealing with a fifo X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: davidxu@FreeBSD.org List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Jul 2012 12:29:09 -0000 On 2012/7/27 19:08, Bruce Evans wrote: > On Fri, 27 Jul 2012, David Xu wrote: > >> On 2012/7/27 10:07, Bruce Evans wrote: >>> >>> I think it's working almost as expected. Large blocks give non-atomic >>> I/O, so the reader sees small blocks, then EOF when it gets ahead of >>> the writer. This always happens without SMP. >>> >>> Not is a bug (debugged below). There is no SIGPIPE at the start of >>> write() because there is a reader then, and no SIGPIPE for the next >>> write() because there is no next write() -- the current one doesn't >>> notice when the reader goes away. >>> >> After fixed dd to not open fifo output file in O_RDWR mode, I still >> found the >> writer is blocked there even the reader is already exited. > > I'm not sure that dd's open is a bug. It must be intentional to use > O_RDWR for some cases. > Don't know if original author even thought about FIFO. > POSIX (old 2001 draft) doesn't say anything about dd's open mode. > >> I think this is definitely a bug. if reader is exited, the writer >> should be aborted too, >> but I found it still be blocked in state "pipedwt", obviously, the >> code in >> /sys/fs/fifo_vnops.c wants to wake up the writer when the reader is >> closing the fifo, >> but it failed, because the bit flag PIPE_WANTW is forgotten to be set >> by writer, >> so it skips executing wakeup(), and then the writer has no chance to >> find EOF bit flag >> is set. > > Does this affect nameless pipes too? The old implementation presumably > doesn't have this bug. > It is easy to repeat the bug for named pipes, don't know if nameless pipes have same bug, I can not reproduce it yet. > Bruce > . >