Message ID | 20231027010528.12330-1-wegao@suse.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [v2] pwritev201: Add check for RWF_APPEND | expand |
Hi Wei, according to man readv(2) RWF_APPEND was added in kernel 4.16 (to <linux/fs.h>, thus this fails openSUSE Leap 42.2 [1], we would need to add this to LAPI include/lapi/fs.h (as a separate patch) and use it in the test. It also fails for the same reason on MUSL, which does not include <linux/fs.h>, I suppose adding <linux/fs.h> to the test would fix it on MUSL, which would be solved by previous change (because include/lapi/fs.h already includes <linux/fs.h>). [1] https://github.com/pevik/ltp/actions/runs/7799206926/job/21269505359 [2] https://github.com/pevik/ltp/actions/runs/7799206926/job/21269504848 > Signed-off-by: Wei Gao <wegao@suse.com> > --- > .../kernel/syscalls/pwritev2/pwritev201.c | 20 +++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > diff --git a/testcases/kernel/syscalls/pwritev2/pwritev201.c b/testcases/kernel/syscalls/pwritev2/pwritev201.c > index eba45b7d3..1494e2925 100644 > --- a/testcases/kernel/syscalls/pwritev2/pwritev201.c > +++ b/testcases/kernel/syscalls/pwritev2/pwritev201.c > @@ -39,13 +39,15 @@ static struct tcase { > off_t write_off; > ssize_t size; > off_t exp_off; > + int flag; > } tcases[] = { > - {0, 1, 0, CHUNK, 0}, > - {CHUNK, 2, 0, CHUNK, CHUNK}, > - {0, 1, CHUNK / 2, CHUNK, 0}, > - {0, 1, -1, CHUNK, CHUNK}, > - {0, 2, -1, CHUNK, CHUNK}, > - {CHUNK, 1, -1, CHUNK, CHUNK * 2}, > + {0, 1, 0, CHUNK, 0, 0}, > + {CHUNK, 2, 0, CHUNK, CHUNK, 0}, > + {0, 1, CHUNK / 2, CHUNK, 0, 0}, > + {0, 1, -1, CHUNK, CHUNK, 0}, > + {0, 2, -1, CHUNK, CHUNK, 0}, > + {CHUNK, 1, -1, CHUNK, CHUNK * 2, 0}, > + {CHUNK, 1, -1, CHUNK, CHUNK * 3, RWF_APPEND}, I wonder how hard would be to cover more flags (man mentions 4 other flags). But on a first look only RWF_APPEND looks to be easy to be added (if complicated, it's probably better to have a separate test for them). Also, while at it, maybe: TST_EXP_FD_SILENT(pwritev2(fd, wr_iovec, tc->count, tc->write_off, 0)); if (!TST_PASS) return; instead of: TEST(pwritev2(fd, wr_iovec, tc->count - 1, tc->write_off, 0)); if (TST_RET < 0) { tst_res(TFAIL | TTERRNO, "pwritev2() failed"); return; } Kind regards, Petr > }; > static void verify_pwritev2(unsigned int n) > @@ -57,7 +59,7 @@ static void verify_pwritev2(unsigned int n) > SAFE_PWRITE(1, fd, initbuf, sizeof(initbuf), 0); > SAFE_LSEEK(fd, tc->seek_off, SEEK_SET); > - TEST(pwritev2(fd, wr_iovec, tc->count, tc->write_off, 0)); > + TEST(pwritev2(fd, wr_iovec, tc->count, tc->write_off, tc->flag)); > if (TST_RET < 0) { > tst_res(TFAIL | TTERRNO, "pwritev2() failed"); > return; > @@ -76,7 +78,9 @@ static void verify_pwritev2(unsigned int n) > memset(preadbuf, 0, CHUNK); > - if (tc->write_off != -1) > + if (tc->flag == RWF_APPEND) > + SAFE_PREAD(1, fd, preadbuf, tc->size, sizeof(initbuf)); > + else if (tc->write_off != -1) > SAFE_PREAD(1, fd, preadbuf, tc->size, tc->write_off); > else > SAFE_PREAD(1, fd, preadbuf, tc->size, tc->seek_off);
diff --git a/testcases/kernel/syscalls/pwritev2/pwritev201.c b/testcases/kernel/syscalls/pwritev2/pwritev201.c index eba45b7d3..1494e2925 100644 --- a/testcases/kernel/syscalls/pwritev2/pwritev201.c +++ b/testcases/kernel/syscalls/pwritev2/pwritev201.c @@ -39,13 +39,15 @@ static struct tcase { off_t write_off; ssize_t size; off_t exp_off; + int flag; } tcases[] = { - {0, 1, 0, CHUNK, 0}, - {CHUNK, 2, 0, CHUNK, CHUNK}, - {0, 1, CHUNK / 2, CHUNK, 0}, - {0, 1, -1, CHUNK, CHUNK}, - {0, 2, -1, CHUNK, CHUNK}, - {CHUNK, 1, -1, CHUNK, CHUNK * 2}, + {0, 1, 0, CHUNK, 0, 0}, + {CHUNK, 2, 0, CHUNK, CHUNK, 0}, + {0, 1, CHUNK / 2, CHUNK, 0, 0}, + {0, 1, -1, CHUNK, CHUNK, 0}, + {0, 2, -1, CHUNK, CHUNK, 0}, + {CHUNK, 1, -1, CHUNK, CHUNK * 2, 0}, + {CHUNK, 1, -1, CHUNK, CHUNK * 3, RWF_APPEND}, }; static void verify_pwritev2(unsigned int n) @@ -57,7 +59,7 @@ static void verify_pwritev2(unsigned int n) SAFE_PWRITE(1, fd, initbuf, sizeof(initbuf), 0); SAFE_LSEEK(fd, tc->seek_off, SEEK_SET); - TEST(pwritev2(fd, wr_iovec, tc->count, tc->write_off, 0)); + TEST(pwritev2(fd, wr_iovec, tc->count, tc->write_off, tc->flag)); if (TST_RET < 0) { tst_res(TFAIL | TTERRNO, "pwritev2() failed"); return; @@ -76,7 +78,9 @@ static void verify_pwritev2(unsigned int n) memset(preadbuf, 0, CHUNK); - if (tc->write_off != -1) + if (tc->flag == RWF_APPEND) + SAFE_PREAD(1, fd, preadbuf, tc->size, sizeof(initbuf)); + else if (tc->write_off != -1) SAFE_PREAD(1, fd, preadbuf, tc->size, tc->write_off); else SAFE_PREAD(1, fd, preadbuf, tc->size, tc->seek_off);
Signed-off-by: Wei Gao <wegao@suse.com> --- .../kernel/syscalls/pwritev2/pwritev201.c | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)