<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">Hi Xu,</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Yang Xu <<a href="mailto:xuyang2018.jy@cn.fujitsu.com">xuyang2018.jy@cn.fujitsu.com</a>> wrote:<br></div><div dir="ltr" class="gmail_attr"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Linus<br>
<br>
<br>
> On Sun, Apr 26, 2020 at 4:59 AM Li Wang <<a href="mailto:liwang@redhat.com" target="_blank">liwang@redhat.com</a>> wrote:<br>
>><br>
>>  From kernel code seems you are right. The pipe indeed takes use of PAGE_SIZE(ppc64le: 64kB) to split the writes data in the packetized mode (marked by O_DIRECT). But in the manual page, O_DIRECT indicates us the PIPE_BUF is the correct atomic unit.<br></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> <br>
> The manual is correct.<br>
> <br>
> PIPE_BUF is the size we _guarantee_ can be used atomically.<br>
> <br>
> The fact that in practice we do have bigger buffers on some platforms<br>
> is an implementation detail.<br>
> <br>
> Yes, that implementation detail can be visible, but basically any test<br>
> code that tries to test for "what if we use a bigger bug that<br>
> PIPE_BUF" is buggy. It's simply not guaranteed to work any more.<br>
> <br>
> O_DIRECT is kind of immaterial, except it's just one of those things<br>
> where the atomic size is slightly more visible. But basically,<br>
> packetized pipes with bigger packets than PIPE_BUF is random behavior.<br>
> It may work. It may not.<br></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Thanks for your explanation. I am more curious about the user scene of <br>
this flag.<br>
<br></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
@Li, so how to design this test? In this test, we don't have complex <br>
scene to test this automic unit.<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">As Linus pointed out that "packetized pipes with bigger packets than </div><div class="gmail_default" style="font-size:small">PIPE_BUF is random behavior", it looks the way in your test is not</div><div class="gmail_default" style="font-size:small">guaranteed to work correctly, so I would drop the pipe2_03.c patch.</div></div><div class="gmail_default" style="font-size:small"></div><div><div class="gmail_default" style="font-size:small">But according to the pipe(7) manual page, we could try to verify writing </div><div class="gmail_default" style="font-size:small">data less than PIPE_BUF is atomic, and the pipe read end also should</div><div class="gmail_default" style="font-size:small">provide us correct data in one packet at a time.</div><div class="gmail_default" style="font-size:small"><br></div><span class="gmail_default" style="font-size:small">"</span></div><div>PIPE_BUF </div><div><span class="gmail_default" style="font-size:small">  </span>POSIX.1 says that write(2)s of less than PIPE_BUF bytes must be </div><div><span class="gmail_default" style="font-size:small">  </span>atomic: the output data is written to the pipe as a contiguous sequence</div><div><span class="gmail_default" style="font-size:small">  ...</span></div><div><span class="gmail_default" style="font-size:small">  </span>POSIX.1 requires PIPE_BUF to be at least 512 bytes. (On Linux, PIPE_BUF is 4096 bytes.)<span class="gmail_default" style="font-size:small"></span></div><div><span class="gmail_default" style="font-size:small">  ...</span><br></div><div><span class="gmail_default" style="font-size:small"><br></span></div><span class="gmail_default" style="font-size:small">  </span>O_NONBLOCK disabled, n <= PIPE_BUF <span class="gmail_default" style="font-size:small">...</span><div><div><br></div><div><span class="gmail_default" style="font-size:small">  </span>O_NONBLOCK enabled, n <= PIPE_BUF<span class="gmail_default" style="font-size:small"> ...</span></div><div><div class="gmail_default" style="font-size:small">"</div><div><div class="gmail_default" style="font-size:small"><a href="http://man7.org/linux/man-pages/man7/pipe.7.html">http://man7.org/linux/man-pages/man7/pipe.7.html</a></div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div></div></div>