[LTP] [PATCH v4 3/3] syscalls/pipe2_03: Add new test for pipe2 O_DIRECT flag

Yang Xu xuyang2018.jy@cn.fujitsu.com
Thu Apr 23 12:30:09 CEST 2020


Hi LI

> 
> 
> On Thu, Apr 23, 2020 at 4:45 PM Yang Xu <xuyang2018.jy@cn.fujitsu.com 
> <mailto:xuyang2018.jy@cn.fujitsu.com>> wrote:
> 
>     ...
>      > I got a failure on the ppc64le platform(page size: 65536kB).
>      >
>      > # ./pipe2_03
>      > tst_test.c:1246: INFO: Timeout per run is 0h 05m 00s
>      > pipe_size = 1048576
>      > PIPE_BUF = 4096
>      > packet_num = 256
>      > safe_macros.c:457: BROK: pipe2_03.c:58:
>      > write(4,0x1001d2b8,18446744073709551615) failed:
>     EAGAIN/EWOULDBLOCK (11)
>     I think we should remove PIPE_BUF and use page_size  because we use a
>     page to store data not a fixed size buffer in kernel. as below(also,
>     man-pages[1] is need to update):
> 
> 
> Emm, If PIPE_BUF doesn't work correctly, shouldn't this a kernel pipe 
> bug? I think we need to take a close look at what happened there but not 
> to replace by using page_size directly.
> -- 
It is only defined in limit.h(I only think it is a error in limit.h) and 
  PIPE_BUF doesn't be used in kernel.

In kernel code, pipes use struct pipe_buffer to store buffer data and 
other info,
struct pipe_buffer {
         struct page *page; //alloc page to store data
         unsigned int offset, len;
         const struct pipe_buf_operations *ops;
         unsigned int flags; //
         unsigned long private;
};

as my pipe2_01.c said we only make buf with PIPE_BUF_FLAG_PACKET flag in 
write end , and read will check this flag.  This unit is a page instead 
of this PIPE_BUF macro.

Best Regards
Yang Xu
> Regards,
> Li Wang




More information about the ltp mailing list