[PATCH v2] generic/571: skip test on filesystems that don't support F_SETLEASE fcntl

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



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@xxxxxxxxxx>
---
 common/rc         |  8 ++++++++
 src/locktest.c    | 14 +++++++++++++-
 tests/generic/571 |  1 +
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/common/rc b/common/rc
index 454f5ccf..504232fd 100644
--- a/common/rc
+++ b/common/rc
@@ -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.
diff --git a/src/locktest.c b/src/locktest.c
index 8696966f..0e7c3008 100644
--- a/src/locktest.c
+++ b/src/locktest.c
@@ -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) {
diff --git a/tests/generic/571 b/tests/generic/571
index 68c8a604..599e3e68 100755
--- a/tests/generic/571
+++ b/tests/generic/571
@@ -26,6 +26,7 @@ _supported_fs generic
 _supported_os Linux
 _require_test
 _require_test_fcntl_advisory_locks
+_require_test_fcntl_setlease
 
 _run_leasetest
 
-- 
2.18.2




[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux