[LTP] [PATCH v3 3/3] syscalls/pipe2_03: Add new test for pipe2 O_DIRECT flag
Yang Xu
xuyang2018.jy@cn.fujitsu.com
Wed Apr 22 08:14:39 CEST 2020
Hi Li
> Xu,
>
> On Tue, Apr 21, 2020 at 6:24 PM Yang Xu <xuyang2018.jy@cn.fujitsu.com
> <mailto:xuyang2018.jy@cn.fujitsu.com>> wrote:
>
> ...
> >
> > + if (pid == 0) {
> > + (*test_func[n])();
> >
> > + tst_reap_children();
> > + SAFE_CLOSE(fds[0]);
> > + SAFE_CLOSE(fds[1]);
> >
> >
> > I tend to move the cloese(fd) to the test process to nearby pipe2().
> > Otherwise, it causes an unclear error like:
> >
> > # ./pipe2_03
> > tst_test.c:1246: INFO: Timeout per run is 0h 05m 00s
> > pipe2_03.c:48: PASS: Each write(2) uses a separate packet
> > pipe2_03.c:61: PASS: Each read(2) reads a separate packet
> > pipe2_03.c:81: PASS: write(higner than PIPE_BUF) split into
> multiple packet
> > pipe2_03.c:108: FAIL: the excess bytes in the packet is discarded by
> > read, expect 1 got 1%A
> Even I use one fork and exit(0), I don't meet this problem. Or, I miss
> something?
>
>
> My test env is kernel-5.7.0-rc1+ x86_64, I haven't figured out why the
> read() get more words from the pipe, but the error has gone one I move
> the safe_close(fd) part to the test main process.
>
OK.
>
> --- a/testcases/kernel/syscalls/pipe2/pipe2_03.c
> +++ b/testcases/kernel/syscalls/pipe2/pipe2_03.c
> @@ -59,6 +59,7 @@ static void check_peer_rw(void)
> "Each read(2) doesn't read a
> separate packet, return %ld", TST_RET);
> }
> tst_res(TPASS, "Each read(2) reads a separate
> packet");
> + _exit(0);
> }
> }
>
> @@ -79,6 +80,7 @@ static void check_split(void)
> "write(higner than PIPE_BUF)
> split into multiple packet, return %ld", TST_RET);
> }
> tst_res(TPASS, "write(higner than PIPE_BUF) split
> into
> multiple packet");
> + _exit(0);
> }
> }
>
> @@ -107,21 +109,17 @@ static void check_discard(void)
> tst_res(TFAIL,
> "the excess bytes in the
> packet
> is discarded by read, expect 1 got %s", tmp_secondbuf);
> }
> + _exit(0);
> }
> }
>
> static void verify_pipe2(unsigned int n)
> {
> - int pid;
> -
> - pid = SAFE_FORK();
> - if (pid == 0) {
> - (*test_func[n])();
> - tst_reap_children();
> - SAFE_CLOSE(fds[0]);
> - SAFE_CLOSE(fds[1]);
> - }
> + (*test_func[n])();
> + SAFE_CLOSE(fds[0]);
> + SAFE_CLOSE(fds[1]);
> tst_reap_children();
>
>
> In my opinion, it is not a good habit to wait for children's status
> after the test function, we'd better do that at the behind of fork() in
> the test main process. I'd only keep the (*test_func[n])(); in this
> verify_pipe2() but no more else.
Yes.
> --
> Regards,
> Li Wang
More information about the ltp
mailing list