On Mon, Dec 03, 2018 at 08:20:30AM -0800, Darrick J. Wong wrote: > On Mon, Dec 03, 2018 at 07:53:42AM +1100, Dave Chinner wrote: > > From: Dave Chinner <dchinner@xxxxxxxxxx> > > > > So that O_RDONLY open commands (such as from copy_range) do not > > block forever waiting on a non-existent writer. > > > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > > --- > > io/open.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/io/open.c b/io/open.c > > index 6ea3e9a2019f..b1d9a0fa317c 100644 > > --- a/io/open.c > > +++ b/io/open.c > > @@ -56,6 +56,7 @@ openfile( > > struct fs_path *fs_path) > > { > > struct fs_path *fsp; > > + struct stat st; > > int fd; > > int oflags; > > > > @@ -79,6 +80,18 @@ openfile( > > if (flags & IO_NOFOLLOW) > > oflags |= O_NOFOLLOW; > > > > + /* > > + * if we've been passed a pipe to open, don't block waiting for a > > + * reader or writer to appear. We want to either succeed or error out > > + * immediately. > > + */ > > + if (stat(path, &st) < 0 && errno != ENOENT) { > > + perror("stat"); > > + return -1; > > + } > > + if (S_ISFIFO(st.st_mode)) > > Hmm... does stat() set st.st_mode even if it returns ENOENT? Or are we > possibly branching on an uninitialized st here? > > struct stat st = { 0 }; ? Yeah, I'll fix that. Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx