[LTP] [PATCH v1] pwritev201.c: Add check for RWF_APPEND flag
Andrea Cervesato
andrea.cervesato@suse.com
Tue Jan 14 15:07:33 CET 2025
Hi Wei,
On 5/28/24 05:47, Wei Gao via ltp wrote:
> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
> .../kernel/syscalls/pwritev2/pwritev201.c | 35 ++++++++++++-------
> 1 file changed, 23 insertions(+), 12 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/pwritev2/pwritev201.c b/testcases/kernel/syscalls/pwritev2/pwritev201.c
> index 987412ba8..cb329d8fc 100644
> --- a/testcases/kernel/syscalls/pwritev2/pwritev201.c
> +++ b/testcases/kernel/syscalls/pwritev2/pwritev201.c
> @@ -2,6 +2,7 @@
> /*
> * Copyright (c) 2019 FUJITSU LIMITED. All rights reserved.
> * Author: Jinhui Huang <huangjh.jy@cn.fujitsu.com>
> + * Copyright (c) 2024 SUSE LLC <wegao@suse.com>
> */
>
> /*\
> @@ -15,6 +16,9 @@
> * - If the file offset argument is -1, pwritev2() should succeed in
> * writing the expected content of data and the current file offset
> * is used and changed after writing.
> + * - If the file flag argument is RWF_APPEND, pwritev2() should succeed in
> + * writing the expected content to end of file. The offset argument does
> + * not changed after writing except offset argument is -1.
"If flags argument is RWF_APPEND, pwritev2() should write the expected
content to the end of the file. If offset is -1, verify that current
file offset is updated."
> */
>
> #define _GNU_SOURCE
> @@ -42,13 +46,16 @@ 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, CHUNK, CHUNK, CHUNK, RWF_APPEND},
> + {CHUNK, 1, -1, CHUNK, CHUNK * 2, RWF_APPEND},
> };
>
> static void verify_pwritev2(unsigned int n)
> @@ -60,7 +67,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;
> @@ -72,17 +79,21 @@ static void verify_pwritev2(unsigned int n)
> return;
> }
>
> - if (SAFE_LSEEK(fd, 0, SEEK_CUR) != tc->exp_off) {
> + if (SAFE_LSEEK(fd, 0, SEEK_CUR) != tc->exp_off && !(tc->flag == RWF_APPEND && tc->write_off == -1)) {
> tst_res(TFAIL, "pwritev2() had changed file offset");
"pwritev2() changed the file offset"
> return;
> }
>
> memset(preadbuf, 0, CHUNK);
>
> - 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);
> + 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);
> + }
>
> for (i = 0; i < tc->size; i++) {
> if (preadbuf[i] != 0x61)
Probably RWF_APPEND test should stay in a different file since
verify_pwritev2() has a more complex logic and we don't want to
over-engineer code with too many if statements.
Kind regards,
Andrea
More information about the ltp
mailing list