ZTS: Update O_TMPFILE support check

In CentOS 7.5 the kernel provided a compatibility wrapper to support
O_TMPFILE.  This results in the test setup script correctly detecting
kernel support.  But the ZFS module was built without O_TMPFILE
support due to the non-standard CentOS kernel interface.

Handle this case by updating the setup check to fail either when
the kernel or the ZFS module fail to provide support.  The reason
will be clearly logged in the test results.

Reviewed-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #7528
This commit is contained in:
Brian Behlendorf 2018-05-14 20:36:30 -07:00 committed by GitHub
parent 38a19edd34
commit 8c64fe0442
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 9 deletions

View File

@ -31,9 +31,12 @@
. $STF_SUITE/include/libtest.shlib . $STF_SUITE/include/libtest.shlib
if ! $STF_SUITE/tests/functional/tmpfile/tmpfile_test /tmp; then DISK=${DISKS%% *}
log_unsupported "The kernel doesn't support O_TMPFILE." default_setup_noexit $DISK
if ! $STF_SUITE/tests/functional/tmpfile/tmpfile_test $TESTDIR; then
default_cleanup_noexit
log_unsupported "The kernel/filesystem doesn't support O_TMPFILE"
fi fi
DISK=${DISKS%% *} log_pass
default_setup $DISK

View File

@ -36,13 +36,14 @@ main(int argc, char *argv[])
fd = open(argv[1], O_TMPFILE | O_WRONLY, 0666); fd = open(argv[1], O_TMPFILE | O_WRONLY, 0666);
if (fd < 0) { if (fd < 0) {
/*
* Only fail on EISDIR. If we get EOPNOTSUPP, that means
* kernel support O_TMPFILE, but the path at argv[1] doesn't.
*/
if (errno == EISDIR) { if (errno == EISDIR) {
fprintf(stderr, "kernel doesn't support O_TMPFILE\n"); fprintf(stderr,
"The kernel doesn't support O_TMPFILE\n");
return (1); return (1);
} else if (errno == EOPNOTSUPP) {
fprintf(stderr,
"The filesystem doesn't support O_TMPFILE\n");
return (2);
} }
perror("open"); perror("open");
} else { } else {