kern/170203: [kern] piped dd's don't behave sanely when dealing with a fifo

Bruce Evans brde at optusnet.com.au
Fri Jul 27 11:10:03 UTC 2012


The following reply was made to PR kern/170203; it has been noted by GNATS.

From: Bruce Evans <brde at optusnet.com.au>
To: davidxu at FreeBSD.org
Cc: Bruce Evans <brde at optusnet.com.au>, Garrett Cooper <yanegomi at gmail.com>,
        freebsd-bugs at FreeBSD.org, freebsd-gnats-submit at FreeBSD.org
Subject: Re: kern/170203: [kern] piped dd's don't behave sanely when dealing
 with a fifo
Date: Fri, 27 Jul 2012 21:08:13 +1000 (EST)

 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.
 
 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.
 
 Bruce


More information about the freebsd-bugs mailing list