* [LTP] [PATCH 1/3] lapi/syscalls: Add syscall numbers for preadv2 @ 2018-09-28 9:10 Xiao Yang 2018-09-28 9:10 ` [LTP] [PATCH 2/3] syscalls/preadv201: Add new testcase Xiao Yang 2018-09-28 9:10 ` [LTP] [PATCH 3/3] syscalls/preadv202: " Xiao Yang 0 siblings, 2 replies; 9+ messages in thread From: Xiao Yang @ 2018-09-28 9:10 UTC (permalink / raw) To: ltp Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com> --- include/lapi/syscalls/aarch64.in | 1 + include/lapi/syscalls/arm.in | 1 + include/lapi/syscalls/hppa.in | 1 + include/lapi/syscalls/i386.in | 1 + include/lapi/syscalls/ia64.in | 1 + include/lapi/syscalls/powerpc.in | 1 + include/lapi/syscalls/powerpc64.in | 1 + include/lapi/syscalls/s390.in | 1 + include/lapi/syscalls/s390x.in | 1 + include/lapi/syscalls/sh.in | 1 + include/lapi/syscalls/sparc.in | 1 + include/lapi/syscalls/sparc64.in | 1 + include/lapi/syscalls/x86_64.in | 1 + 13 files changed, 13 insertions(+) diff --git a/include/lapi/syscalls/aarch64.in b/include/lapi/syscalls/aarch64.in index 9ac7f99..0b6ba3b 100644 --- a/include/lapi/syscalls/aarch64.in +++ b/include/lapi/syscalls/aarch64.in @@ -258,4 +258,5 @@ getrandom 278 memfd_create 279 mlock2 284 copy_file_range 285 +preadv2 286 _sysctl 1078 diff --git a/include/lapi/syscalls/arm.in b/include/lapi/syscalls/arm.in index 0a7f98a..279130f 100644 --- a/include/lapi/syscalls/arm.in +++ b/include/lapi/syscalls/arm.in @@ -343,4 +343,5 @@ memfd_create (__NR_SYSCALL_BASE+385) execveat (__NR_SYSCALL_BASE+387) mlock2 (__NR_SYSCALL_BASE+390) copy_file_range (__NR_SYSCALL_BASE+391) +preadv2 (__NR_SYSCALL_BASE+392) statx (__NR_SYSCALL_BASE+397) diff --git a/include/lapi/syscalls/hppa.in b/include/lapi/syscalls/hppa.in index 3db9780..0fa6f4e 100644 --- a/include/lapi/syscalls/hppa.in +++ b/include/lapi/syscalls/hppa.in @@ -19,3 +19,4 @@ vmsplice 294 memfd_create 340 mlock2 345 copy_file_range 346 +preadv2 347 diff --git a/include/lapi/syscalls/i386.in b/include/lapi/syscalls/i386.in index a000564..ee8c4e9 100644 --- a/include/lapi/syscalls/i386.in +++ b/include/lapi/syscalls/i386.in @@ -343,4 +343,5 @@ memfd_create 356 execveat 358 mlock2 376 copy_file_range 377 +preadv2 378 statx 383 diff --git a/include/lapi/syscalls/ia64.in b/include/lapi/syscalls/ia64.in index 2788193..b9f00bc 100644 --- a/include/lapi/syscalls/ia64.in +++ b/include/lapi/syscalls/ia64.in @@ -298,3 +298,4 @@ getrandom 1339 memfd_create 1340 mlock2 1346 copy_file_range 1347 +preadv2 1348 diff --git a/include/lapi/syscalls/powerpc.in b/include/lapi/syscalls/powerpc.in index c0b4226..1e429f4 100644 --- a/include/lapi/syscalls/powerpc.in +++ b/include/lapi/syscalls/powerpc.in @@ -349,4 +349,5 @@ getrandom 359 memfd_create 360 mlock2 378 copy_file_range 379 +preadv2 380 statx 383 diff --git a/include/lapi/syscalls/powerpc64.in b/include/lapi/syscalls/powerpc64.in index c0b4226..1e429f4 100644 --- a/include/lapi/syscalls/powerpc64.in +++ b/include/lapi/syscalls/powerpc64.in @@ -349,4 +349,5 @@ getrandom 359 memfd_create 360 mlock2 378 copy_file_range 379 +preadv2 380 statx 383 diff --git a/include/lapi/syscalls/s390.in b/include/lapi/syscalls/s390.in index 47a04de..8780815 100644 --- a/include/lapi/syscalls/s390.in +++ b/include/lapi/syscalls/s390.in @@ -334,3 +334,4 @@ memfd_create 350 execveat 354 mlock2 374 copy_file_range 375 +preadv2 376 diff --git a/include/lapi/syscalls/s390x.in b/include/lapi/syscalls/s390x.in index 83732ff..b029e72 100644 --- a/include/lapi/syscalls/s390x.in +++ b/include/lapi/syscalls/s390x.in @@ -333,3 +333,4 @@ getrandom 349 memfd_create 350 mlock2 374 copy_file_range 375 +preadv2 376 diff --git a/include/lapi/syscalls/sh.in b/include/lapi/syscalls/sh.in index 407be7a..ebf8dad 100644 --- a/include/lapi/syscalls/sh.in +++ b/include/lapi/syscalls/sh.in @@ -366,3 +366,4 @@ kcmp 378 memfd_create 385 mlock2 390 copy_file_range 391 +preadv2 392 diff --git a/include/lapi/syscalls/sparc.in b/include/lapi/syscalls/sparc.in index 2b06a79..8d8a54e 100644 --- a/include/lapi/syscalls/sparc.in +++ b/include/lapi/syscalls/sparc.in @@ -338,3 +338,4 @@ getrandom 347 memfd_create 348 mlock2 356 copy_file_range 357 +preadv2 358 diff --git a/include/lapi/syscalls/sparc64.in b/include/lapi/syscalls/sparc64.in index 8c8a866..140e9ce 100644 --- a/include/lapi/syscalls/sparc64.in +++ b/include/lapi/syscalls/sparc64.in @@ -314,3 +314,4 @@ getrandom 347 memfd_create 348 mlock2 356 copy_file_range 357 +preadv2 358 diff --git a/include/lapi/syscalls/x86_64.in b/include/lapi/syscalls/x86_64.in index 4ce8477..1966da2 100644 --- a/include/lapi/syscalls/x86_64.in +++ b/include/lapi/syscalls/x86_64.in @@ -310,4 +310,5 @@ memfd_create 319 execveat 322 mlock2 325 copy_file_range 326 +preadv2 327 statx 332 -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [LTP] [PATCH 2/3] syscalls/preadv201: Add new testcase 2018-09-28 9:10 [LTP] [PATCH 1/3] lapi/syscalls: Add syscall numbers for preadv2 Xiao Yang @ 2018-09-28 9:10 ` Xiao Yang 2018-10-04 12:16 ` Cyril Hrubis 2018-09-28 9:10 ` [LTP] [PATCH 3/3] syscalls/preadv202: " Xiao Yang 1 sibling, 1 reply; 9+ messages in thread From: Xiao Yang @ 2018-09-28 9:10 UTC (permalink / raw) To: ltp Check the basic functionality of the preadv2(2). Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com> --- configure.ac | 1 + m4/ltp-preadv2.m4 | 9 ++ runtest/ltplite | 2 + runtest/stress.part3 | 2 + runtest/syscalls | 3 + testcases/kernel/syscalls/preadv2/.gitignore | 2 + testcases/kernel/syscalls/preadv2/Makefile | 14 +++ testcases/kernel/syscalls/preadv2/preadv2.h | 26 ++++++ testcases/kernel/syscalls/preadv2/preadv201.c | 119 ++++++++++++++++++++++++++ 9 files changed, 178 insertions(+) create mode 100644 m4/ltp-preadv2.m4 create mode 100644 testcases/kernel/syscalls/preadv2/.gitignore create mode 100644 testcases/kernel/syscalls/preadv2/Makefile create mode 100644 testcases/kernel/syscalls/preadv2/preadv2.h create mode 100644 testcases/kernel/syscalls/preadv2/preadv201.c diff --git a/configure.ac b/configure.ac index e1ecb32..0f0d8c1 100644 --- a/configure.ac +++ b/configure.ac @@ -218,6 +218,7 @@ LTP_CHECK_KCMP LTP_CHECK_KCMP_TYPE LTP_CHECK_PREADV LTP_CHECK_PWRITEV +LTP_CHECK_PREADV2 LTP_CHECK_EPOLL_PWAIT LTP_CHECK_KEYUTILS_SUPPORT LTP_CHECK_SYNC_ADD_AND_FETCH diff --git a/m4/ltp-preadv2.m4 b/m4/ltp-preadv2.m4 new file mode 100644 index 0000000..a1e5327 --- /dev/null +++ b/m4/ltp-preadv2.m4 @@ -0,0 +1,9 @@ +dnl SPDX-License-Identifier: GPL-2.0-or-later +dnl Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. +dnl Author: Xiao Yang <yangx.jy@cn.fujitsu.com> + +dnl LTP_CHECK_PREADV2 +dnl ---------------------------- +AC_DEFUN([LTP_CHECK_PREADV2],[ +AC_CHECK_FUNCS(preadv2,,) +]) diff --git a/runtest/ltplite b/runtest/ltplite index 61ab275..6959536 100644 --- a/runtest/ltplite +++ b/runtest/ltplite @@ -586,6 +586,8 @@ preadv01 preadv01 preadv02 preadv02 preadv03 preadv03 +preadv201 preadv201 + profil01 profil01 pselect01 pselect01 diff --git a/runtest/stress.part3 b/runtest/stress.part3 index 332daa9..525d33b 100644 --- a/runtest/stress.part3 +++ b/runtest/stress.part3 @@ -495,6 +495,8 @@ preadv01 preadv01 preadv02 preadv02 preadv03 preadv03 +preadv201 preadv201 + profil01 profil01 pselect01 pselect01 diff --git a/runtest/syscalls b/runtest/syscalls index 0d0be77..02b02b8 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -834,6 +834,9 @@ preadv02_64 preadv02_64 preadv03 preadv03 preadv03_64 preadv03_64 +preadv201 preadv201 +preadv201_64 preadv201_64 + profil01 profil01 process_vm_readv01 process_vm01 -r diff --git a/testcases/kernel/syscalls/preadv2/.gitignore b/testcases/kernel/syscalls/preadv2/.gitignore new file mode 100644 index 0000000..0ed1a00 --- /dev/null +++ b/testcases/kernel/syscalls/preadv2/.gitignore @@ -0,0 +1,2 @@ +/preadv201 +/preadv201_64 diff --git a/testcases/kernel/syscalls/preadv2/Makefile b/testcases/kernel/syscalls/preadv2/Makefile new file mode 100644 index 0000000..fc1fbf3 --- /dev/null +++ b/testcases/kernel/syscalls/preadv2/Makefile @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. +# Author: Xiao Yang <yangx.jy@cn.fujitsu.com> +# + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk + +include $(abs_srcdir)/../utils/newer_64.mk + +%_64: CPPFLAGS += -D_FILE_OFFSET_BITS=64 + +include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/syscalls/preadv2/preadv2.h b/testcases/kernel/syscalls/preadv2/preadv2.h new file mode 100644 index 0000000..aacf96f --- /dev/null +++ b/testcases/kernel/syscalls/preadv2/preadv2.h @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. + * Author: Xiao Yang <yangx.jy@cn.fujitsu.com> + */ + +#ifndef PREADV2_H +#define PREADV2_H + +#include "config.h" +#include "lapi/syscalls.h" + +#if !defined(HAVE_PREADV2) + +/* LO_HI_LONG taken from glibc */ +# define LO_HI_LONG(val) (long) (val), (long) (((uint64_t) (val)) >> 32) + +ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, + int flags) +{ + return tst_syscall(__NR_preadv2, fd, iov, iovcnt, + LO_HI_LONG(offset), flags); +} +#endif + +#endif /* PREADV2_H */ diff --git a/testcases/kernel/syscalls/preadv2/preadv201.c b/testcases/kernel/syscalls/preadv2/preadv201.c new file mode 100644 index 0000000..e8e9e6e --- /dev/null +++ b/testcases/kernel/syscalls/preadv2/preadv201.c @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. + * Author: Xiao Yang <yangx.jy@cn.fujitsu.com> + */ + +/* + * Description: + * Testcase to check the basic functionality of the preadv2(2). + * 1) If the file offset argument is not -1, preadv2() should succeed + * in reading the expected content of data and the file offset is + * not changed after reading. + * 2) If the file offset argument is -1, preadv2() should succeed in + * reading the expected content of data and the current file offset + * is used and changed after reading. + */ + +#define _GNU_SOURCE +#include <string.h> +#include <sys/uio.h> + +#include "tst_test.h" +#include "preadv2.h" + +#define CHUNK 64 + +static int fd; +static char buf[CHUNK]; + +static struct iovec rd_iovec[] = { + {buf, CHUNK}, + {NULL, 0}, +}; + +static struct tcase { + off_t seek_off; + int count; + off_t read_off; + ssize_t size; + char content; + off_t exp_off; +} tcases[] = { + {0, 1, 0, CHUNK, 'a', 0}, + {CHUNK, 2, 0, CHUNK, 'a', CHUNK}, + {0, 1, CHUNK * 3 / 2, CHUNK / 2, 'b', 0}, + {0, 1, -1, CHUNK, 'a', CHUNK}, + {0, 2, -1, CHUNK, 'a', CHUNK}, + {CHUNK, 1, -1, CHUNK, 'b', CHUNK * 2}, +}; + +static void verify_preadv2(unsigned int n) +{ + int i; + char *vec; + struct tcase *tc = &tcases[n]; + + vec = rd_iovec[0].iov_base; + memset(vec, 0x00, CHUNK); + + SAFE_LSEEK(fd, tc->seek_off, SEEK_SET); + + TEST(preadv2(fd, rd_iovec, tc->count, tc->read_off, 0)); + if (TST_RET < 0) { + tst_res(TFAIL | TTERRNO, "preadv2() failed"); + return; + } + + if (TST_RET != tc->size) { + tst_res(TFAIL, "preadv2() read %li bytes, expected %zi", + TST_RET, tc->size); + return; + } + + for (i = 0; i < tc->size; i++) { + if (vec[i] != tc->content) + break; + } + + if (i < tc->size) { + tst_res(TFAIL, "Buffer wrong at %i have %02x expected %02x", + i, vec[i], tc->content); + return; + } + + if (SAFE_LSEEK(fd, 0, SEEK_CUR) != tc->exp_off) { + tst_res(TFAIL, "preadv2() has changed file offset"); + return; + } + + tst_res(TPASS, "preadv2() read %zi bytes with content '%c' expectedly", + tc->size, tc->content); +} + +static void setup(void) +{ + char buf[CHUNK]; + + fd = SAFE_OPEN("file", O_RDWR | O_CREAT, 0644); + + memset(buf, 'a', sizeof(buf)); + SAFE_WRITE(1, fd, buf, sizeof(buf)); + + memset(buf, 'b', sizeof(buf)); + SAFE_WRITE(1, fd, buf, sizeof(buf)); +} + +static void cleanup(void) +{ + if (fd > 0) + SAFE_CLOSE(fd); +} + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tcases), + .setup = setup, + .cleanup = cleanup, + .test = verify_preadv2, + .needs_tmpdir = 1, +}; -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [LTP] [PATCH 2/3] syscalls/preadv201: Add new testcase 2018-09-28 9:10 ` [LTP] [PATCH 2/3] syscalls/preadv201: Add new testcase Xiao Yang @ 2018-10-04 12:16 ` Cyril Hrubis 0 siblings, 0 replies; 9+ messages in thread From: Cyril Hrubis @ 2018-10-04 12:16 UTC (permalink / raw) To: ltp Hi! Pushed with minor changes: 1. moved the preadv2.h into include/lapi 2. reformatted the struct testcase array so that it's easier to read Thanks! -- Cyril Hrubis chrubis@suse.cz ^ permalink raw reply [flat|nested] 9+ messages in thread
* [LTP] [PATCH 3/3] syscalls/preadv202: Add new testcase 2018-09-28 9:10 [LTP] [PATCH 1/3] lapi/syscalls: Add syscall numbers for preadv2 Xiao Yang 2018-09-28 9:10 ` [LTP] [PATCH 2/3] syscalls/preadv201: Add new testcase Xiao Yang @ 2018-09-28 9:10 ` Xiao Yang 2018-10-04 12:19 ` Cyril Hrubis 1 sibling, 1 reply; 9+ messages in thread From: Xiao Yang @ 2018-09-28 9:10 UTC (permalink / raw) To: ltp Check various errnos for the preadv2(2). Note: From preadv2(2) manpage, preadv2() with invalid flag should return EINVAL, but it actually returned EOPNOTSUPP in current upstream kernel, as below: --------------------------------------------------------------- include/uapi/linux/fs.h: define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\ RWF_APPEND) ... include/linux/fs.h: static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags) { if (unlikely(flags & ~RWF_SUPPORTED)) { return -EOPNOTSUPP; } ... --------------------------------------------------------------- We use EOPNOTSUPP as expected errno for the time being. Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com> --- runtest/ltplite | 1 + runtest/stress.part3 | 1 + runtest/syscalls | 2 + testcases/kernel/syscalls/preadv2/.gitignore | 2 + testcases/kernel/syscalls/preadv2/preadv202.c | 123 ++++++++++++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 testcases/kernel/syscalls/preadv2/preadv202.c diff --git a/runtest/ltplite b/runtest/ltplite index 6959536..c7bcbd2 100644 --- a/runtest/ltplite +++ b/runtest/ltplite @@ -587,6 +587,7 @@ preadv02 preadv02 preadv03 preadv03 preadv201 preadv201 +preadv202 preadv202 profil01 profil01 diff --git a/runtest/stress.part3 b/runtest/stress.part3 index 525d33b..79cbc4f 100644 --- a/runtest/stress.part3 +++ b/runtest/stress.part3 @@ -496,6 +496,7 @@ preadv02 preadv02 preadv03 preadv03 preadv201 preadv201 +preadv202 preadv202 profil01 profil01 diff --git a/runtest/syscalls b/runtest/syscalls index 02b02b8..844bf41 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -836,6 +836,8 @@ preadv03_64 preadv03_64 preadv201 preadv201 preadv201_64 preadv201_64 +preadv202 preadv202 +preadv202_64 preadv202_64 profil01 profil01 diff --git a/testcases/kernel/syscalls/preadv2/.gitignore b/testcases/kernel/syscalls/preadv2/.gitignore index 0ed1a00..759d9ef 100644 --- a/testcases/kernel/syscalls/preadv2/.gitignore +++ b/testcases/kernel/syscalls/preadv2/.gitignore @@ -1,2 +1,4 @@ /preadv201 /preadv201_64 +/preadv202 +/preadv202_64 diff --git a/testcases/kernel/syscalls/preadv2/preadv202.c b/testcases/kernel/syscalls/preadv2/preadv202.c new file mode 100644 index 0000000..2defaed --- /dev/null +++ b/testcases/kernel/syscalls/preadv2/preadv202.c @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. + * Author: Xiao Yang <yangx.jy@cn.fujitsu.com> + */ + +/* + * Description: + * Check various errnos for preadv2(2). + * 1) preadv2() fails and sets errno to EINVAL if iov_len is invalid. + * 2) preadv2() fails and sets errno to EINVAL if the vector count iovcnt + * is less than zero. + * 3) preadv2() fails and sets errno to EOPNOTSUPP if flag is invalid. + * 4) preadv2() fails and sets errno to EFAULT when attempts to read into + * a invalid address. + * 5) preadv2() fails and sets errno to EBADF if file descriptor is invalid. + * 6) preadv2() fails and sets errno to EBADF if file descriptor is not + * open for reading. + * 7) preadv2() fails and sets errno to EISDIR when fd refers to a directory. + * 8) preadv2() fails and sets errno to ESPIPE if fd is associated with a pipe. + */ + +#define _GNU_SOURCE +#include <sys/uio.h> +#include <unistd.h> + +#include "tst_test.h" +#include "preadv2.h" + +#define CHUNK 64 + +static int fd1; +static int fd2; +static int fd3 = -1; +static int fd4; +static int fd5[2]; + +static char buf[CHUNK]; + +static struct iovec rd_iovec1[] = { + {buf, -1}, +}; + +static struct iovec rd_iovec2[] = { + {buf, CHUNK}, +}; + +static struct iovec rd_iovec3[] = { + {(char *)-1, CHUNK}, +}; + +static struct tcase { + int *fd; + struct iovec *name; + int count; + off_t offset; + int flag; + int exp_err; +} tcases[] = { + {&fd1, rd_iovec1, 1, 0, 0, EINVAL}, + {&fd1, rd_iovec2, -1, 0, 0, EINVAL}, + {&fd1, rd_iovec2, 1, 1, -1, EOPNOTSUPP}, + {&fd1, rd_iovec3, 1, 0, 0, EFAULT}, + {&fd3, rd_iovec2, 1, 0, 0, EBADF}, + {&fd2, rd_iovec2, 1, 0, 0, EBADF}, + {&fd4, rd_iovec2, 1, 0, 0, EISDIR}, + {&fd5[0], rd_iovec2, 1, 0, 0, ESPIPE}, +}; + +static void verify_preadv2(unsigned int n) +{ + struct tcase *tc = &tcases[n]; + + TEST(preadv2(*tc->fd, tc->name, tc->count, tc->offset, tc->flag)); + + if (TST_RET == 0) { + tst_res(TFAIL, "preadv2() succeeded unexpectedly"); + return; + } + + if (TST_ERR == tc->exp_err) { + tst_res(TPASS | TTERRNO, "preadv2() failed as expected"); + return; + } + + tst_res(TFAIL | TTERRNO, "preadv2() failed unexpectedly, expected %s", + tst_strerrno(tc->exp_err)); +} + +static void setup(void) +{ + fd1 = SAFE_OPEN("file1", O_RDWR | O_CREAT, 0644); + SAFE_FTRUNCATE(fd1, getpagesize()); + fd2 = SAFE_OPEN("file2", O_WRONLY | O_CREAT, 0644); + fd4 = SAFE_OPEN(".", O_RDONLY); + SAFE_PIPE(fd5); +} + +static void cleanup(void) +{ + if (fd1 > 0) + SAFE_CLOSE(fd1); + + if (fd2 > 0) + SAFE_CLOSE(fd2); + + if (fd4 > 0) + SAFE_CLOSE(fd4); + + if (fd5[0] > 0) + SAFE_CLOSE(fd5[0]); + + if (fd5[1] > 0) + SAFE_CLOSE(fd5[1]); +} + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tcases), + .setup = setup, + .cleanup = cleanup, + .test = verify_preadv2, + .needs_tmpdir = 1, +}; -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [LTP] [PATCH 3/3] syscalls/preadv202: Add new testcase 2018-09-28 9:10 ` [LTP] [PATCH 3/3] syscalls/preadv202: " Xiao Yang @ 2018-10-04 12:19 ` Cyril Hrubis 2018-10-05 1:17 ` Xiao Yang 2019-02-27 8:16 ` Xiao Yang 0 siblings, 2 replies; 9+ messages in thread From: Cyril Hrubis @ 2018-10-04 12:19 UTC (permalink / raw) To: ltp Hi! > Note: > From preadv2(2) manpage, preadv2() with invalid flag should return > EINVAL, but it actually returned EOPNOTSUPP in current upstream > kernel, as below: > --------------------------------------------------------------- > include/uapi/linux/fs.h: > define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\ > RWF_APPEND) > ... > > include/linux/fs.h: > static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags) > { > if (unlikely(flags & ~RWF_SUPPORTED)) { > return -EOPNOTSUPP; > } > ... > --------------------------------------------------------------- > > We use EOPNOTSUPP as expected errno for the time being. This is probably worth a patch for the man-pages project, will you take care of that? Pushed with a minor change, I've changed the EFAULT test to get address from tst_get_bad_addr() instead of the hardcoded -1. Thanks! -- Cyril Hrubis chrubis@suse.cz ^ permalink raw reply [flat|nested] 9+ messages in thread
* [LTP] [PATCH 3/3] syscalls/preadv202: Add new testcase 2018-10-04 12:19 ` Cyril Hrubis @ 2018-10-05 1:17 ` Xiao Yang 2019-02-27 8:16 ` Xiao Yang 1 sibling, 0 replies; 9+ messages in thread From: Xiao Yang @ 2018-10-05 1:17 UTC (permalink / raw) To: ltp Hi Cyril, Thank you to review the whole patch set. On 2018/10/04 20:19, Cyril Hrubis wrote: > Hi! >> Note: >> From preadv2(2) manpage, preadv2() with invalid flag should return >> EINVAL, but it actually returned EOPNOTSUPP in current upstream >> kernel, as below: >> --------------------------------------------------------------- >> include/uapi/linux/fs.h: >> define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\ >> RWF_APPEND) >> ... >> >> include/linux/fs.h: >> static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags) >> { >> if (unlikely(flags& ~RWF_SUPPORTED)) { >> return -EOPNOTSUPP; >> } >> ... >> --------------------------------------------------------------- >> >> We use EOPNOTSUPP as expected errno for the time being. > This is probably worth a patch for the man-pages project, will you take > care of that? I will try to send a fix patch to the man-pages project as you advised. Thanks, Xiao Yang > Pushed with a minor change, I've changed the EFAULT test to get address > from tst_get_bad_addr() instead of the hardcoded -1. > > Thanks! > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [LTP] [PATCH 3/3] syscalls/preadv202: Add new testcase 2018-10-04 12:19 ` Cyril Hrubis 2018-10-05 1:17 ` Xiao Yang @ 2019-02-27 8:16 ` Xiao Yang 2019-02-27 9:07 ` Jan Stancek 1 sibling, 1 reply; 9+ messages in thread From: Xiao Yang @ 2019-02-27 8:16 UTC (permalink / raw) To: ltp Hi Jan, preadv202 has used tst_get_bad_addr() instead of the hardcoded -1 to test EFAULT, so is it necessary to test EFAULT on s390 by truncating file as commit 856383c does? Perhaps, we can remove the truncation if it is unnecessary. Sorry, i don't have s390 to confirm it. Best Regards, Xiao Yang On 2018/10/04 20:19, Cyril Hrubis wrote: > Hi! >> Note: >> From preadv2(2) manpage, preadv2() with invalid flag should return >> EINVAL, but it actually returned EOPNOTSUPP in current upstream >> kernel, as below: >> --------------------------------------------------------------- >> include/uapi/linux/fs.h: >> define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\ >> RWF_APPEND) >> ... >> >> include/linux/fs.h: >> static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags) >> { >> if (unlikely(flags& ~RWF_SUPPORTED)) { >> return -EOPNOTSUPP; >> } >> ... >> --------------------------------------------------------------- >> >> We use EOPNOTSUPP as expected errno for the time being. > This is probably worth a patch for the man-pages project, will you take > care of that? > > Pushed with a minor change, I've changed the EFAULT test to get address > from tst_get_bad_addr() instead of the hardcoded -1. > > Thanks! > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [LTP] [PATCH 3/3] syscalls/preadv202: Add new testcase 2019-02-27 8:16 ` Xiao Yang @ 2019-02-27 9:07 ` Jan Stancek 2019-02-27 9:36 ` Xiao Yang 0 siblings, 1 reply; 9+ messages in thread From: Jan Stancek @ 2019-02-27 9:07 UTC (permalink / raw) To: ltp ----- Original Message ----- > Hi Jan, > > preadv202 has used tst_get_bad_addr() instead of the hardcoded -1 to > test EFAULT, so is it > necessary to test EFAULT on s390 by truncating file as commit 856383c > does? If s390 doesn't immediately check iovec for validity, I don't see difference between -1 and other invalid address. I missing some context for this email, what made you look into this again? Anyway, I tried dropping truncate and ran test on 5.0.0-rc8 s390x: # ./preadv202 tst_test.c:1085: INFO: Timeout per run is 0h 05m 00s preadv202.c:82: PASS: preadv2() failed as expected: EINVAL preadv202.c:82: PASS: preadv2() failed as expected: EINVAL preadv202.c:82: PASS: preadv2() failed as expected: EOPNOTSUPP preadv202.c:77: FAIL: preadv2() succeeded unexpectedly preadv202.c:82: PASS: preadv2() failed as expected: EBADF preadv202.c:82: PASS: preadv2() failed as expected: EBADF preadv202.c:82: PASS: preadv2() failed as expected: EISDIR preadv202.c:82: PASS: preadv2() failed as expected: ESPIPE Regards, Jan > Perhaps, we > can remove the truncation if it is unnecessary. Sorry, i don't have > s390 to confirm it. > > Best Regards, > Xiao Yang > On 2018/10/04 20:19, Cyril Hrubis wrote: > > Hi! > >> Note: > >> From preadv2(2) manpage, preadv2() with invalid flag should return > >> EINVAL, but it actually returned EOPNOTSUPP in current upstream > >> kernel, as below: > >> --------------------------------------------------------------- > >> include/uapi/linux/fs.h: > >> define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\ > >> RWF_APPEND) > >> ... > >> > >> include/linux/fs.h: > >> static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags) > >> { > >> if (unlikely(flags& ~RWF_SUPPORTED)) { > >> return -EOPNOTSUPP; > >> } > >> ... > >> --------------------------------------------------------------- > >> > >> We use EOPNOTSUPP as expected errno for the time being. > > This is probably worth a patch for the man-pages project, will you take > > care of that? > > > > Pushed with a minor change, I've changed the EFAULT test to get address > > from tst_get_bad_addr() instead of the hardcoded -1. > > > > Thanks! > > > > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [LTP] [PATCH 3/3] syscalls/preadv202: Add new testcase 2019-02-27 9:07 ` Jan Stancek @ 2019-02-27 9:36 ` Xiao Yang 0 siblings, 0 replies; 9+ messages in thread From: Xiao Yang @ 2019-02-27 9:36 UTC (permalink / raw) To: ltp On 2019/02/27 17:07, Jan Stancek wrote: > > ----- Original Message ----- >> Hi Jan, >> >> preadv202 has used tst_get_bad_addr() instead of the hardcoded -1 to >> test EFAULT, so is it >> necessary to test EFAULT on s390 by truncating file as commit 856383c >> does? > If s390 doesn't immediately check iovec for validity, I don't see > difference between -1 and other invalid address. > > I missing some context for this email, what made you look into this again? > Anyway, I tried dropping truncate and ran test on 5.0.0-rc8 s390x: > > # ./preadv202 > tst_test.c:1085: INFO: Timeout per run is 0h 05m 00s > preadv202.c:82: PASS: preadv2() failed as expected: EINVAL > preadv202.c:82: PASS: preadv2() failed as expected: EINVAL > preadv202.c:82: PASS: preadv2() failed as expected: EOPNOTSUPP > preadv202.c:77: FAIL: preadv2() succeeded unexpectedly > preadv202.c:82: PASS: preadv2() failed as expected: EBADF > preadv202.c:82: PASS: preadv2() failed as expected: EBADF > preadv202.c:82: PASS: preadv2() failed as expected: EISDIR > preadv202.c:82: PASS: preadv2() failed as expected: ESPIPE Hi Jan, Thanks a lot for your reply and test. :-) Recently, i am looking into pwritev202.c written by Jinhui Huang, and i just want to know if it is necessary for both preadv2 and pwritev2 to test EFAULT by truncating. Best Regards, Xiao Yang > Regards, > Jan > >> Perhaps, we >> can remove the truncation if it is unnecessary. Sorry, i don't have >> s390 to confirm it. >> >> Best Regards, >> Xiao Yang >> On 2018/10/04 20:19, Cyril Hrubis wrote: >>> Hi! >>>> Note: >>>> From preadv2(2) manpage, preadv2() with invalid flag should return >>>> EINVAL, but it actually returned EOPNOTSUPP in current upstream >>>> kernel, as below: >>>> --------------------------------------------------------------- >>>> include/uapi/linux/fs.h: >>>> define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\ >>>> RWF_APPEND) >>>> ... >>>> >>>> include/linux/fs.h: >>>> static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags) >>>> { >>>> if (unlikely(flags& ~RWF_SUPPORTED)) { >>>> return -EOPNOTSUPP; >>>> } >>>> ... >>>> --------------------------------------------------------------- >>>> >>>> We use EOPNOTSUPP as expected errno for the time being. >>> This is probably worth a patch for the man-pages project, will you take >>> care of that? >>> >>> Pushed with a minor change, I've changed the EFAULT test to get address >>> from tst_get_bad_addr() instead of the hardcoded -1. >>> >>> Thanks! >>> >> >> >> > > . > ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-02-27 9:36 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-09-28 9:10 [LTP] [PATCH 1/3] lapi/syscalls: Add syscall numbers for preadv2 Xiao Yang 2018-09-28 9:10 ` [LTP] [PATCH 2/3] syscalls/preadv201: Add new testcase Xiao Yang 2018-10-04 12:16 ` Cyril Hrubis 2018-09-28 9:10 ` [LTP] [PATCH 3/3] syscalls/preadv202: " Xiao Yang 2018-10-04 12:19 ` Cyril Hrubis 2018-10-05 1:17 ` Xiao Yang 2019-02-27 8:16 ` Xiao Yang 2019-02-27 9:07 ` Jan Stancek 2019-02-27 9:36 ` Xiao Yang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox