generic/571: skip test on filesystems that don't support F_SETLEASE fcntl

Add an option to the locktest program to check for fcntl setlease
support, and skip the generic/571 test on filesystems where the
check returns EINVAL.

Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Reviewed-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Scott Mayhew
2020-04-01 13:26:59 -04:00
committed by Eryu Guan
parent 7d149350db
commit e31cbea25e
3 changed files with 22 additions and 1 deletions
+8
View File
@@ -3501,6 +3501,14 @@ _require_test_fcntl_advisory_locks()
_notrun "Require fcntl advisory locks support"
}
_require_test_fcntl_setlease()
{
_require_test_program "locktest"
touch $TEST_DIR/setlease_testfile
$here/src/locktest -t $TEST_DIR/setlease_testfile >/dev/null 2>&1
[ $? -eq 22 ] && _notrun "Require fcntl setlease support"
}
_require_ofd_locks()
{
# Give a test run by getlk wrlck on testfile.
+13 -1
View File
@@ -1030,6 +1030,7 @@ main(int argc, char *argv[])
extern int optind;
int fail_count = 0;
int run_leases = 0;
int test_setlease = 0;
atexit(cleanup);
@@ -1042,7 +1043,7 @@ main(int argc, char *argv[])
prog = p+1;
}
while ((c = getopt(argc, argv, "dLn:h:p:?")) != EOF) {
while ((c = getopt(argc, argv, "dLn:h:p:t?")) != EOF) {
switch (c) {
case 'd': /* debug flag */
@@ -1072,6 +1073,10 @@ main(int argc, char *argv[])
}
break;
case 't':
test_setlease = 1;
break;
case '?':
default:
errflag++;
@@ -1090,6 +1095,13 @@ main(int argc, char *argv[])
if (do_open(O_RDWR) == FAIL)
exit(1);
if (test_setlease == 1) {
fcntl(f_fd, F_SETLEASE, F_UNLCK);
saved_errno = errno;
close(f_fd);
exit(saved_errno);
}
setbuf(stderr, NULL);
if (server) {
+1
View File
@@ -26,6 +26,7 @@ _supported_fs generic
_supported_os Linux
_require_test
_require_test_fcntl_advisory_locks
_require_test_fcntl_setlease
_run_leasetest