Re: [PATCH 1/2] io: open pipes in non-blocking mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Dec 2, 2018 at 9:54 PM Dave Chinner <david@xxxxxxxxxxxxx> 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>

Looks good.

Reviewed-by: Jan Tulak <jtulak@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))
> +               oflags |= O_NONBLOCK;
> +
>         fd = open(path, oflags, mode);
>         if (fd < 0) {
>                 if (errno == EISDIR &&
> --
> 2.19.1
>


-- 
Jan Tulak



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux