diff mbox series

Fix Linux fcntl OFD locks on unsupported kernels

Message ID 1532697138-8891-1-git-send-email-adhemerval.zanella@linaro.org
State Accepted
Commit 2c6da2f48769ca37b22088fe65bdcb4b0f319b80
Headers show
Series Fix Linux fcntl OFD locks on unsupported kernels | expand

Commit Message

Adhemerval Zanella July 27, 2018, 1:12 p.m. UTC
This patch make the OFD tests return unsupported if kernel does not
support OFD locks (it was added on 3.15).

Checked on a ia64-linux-gnu with Linux 3.14.

	* sysdeps/unix/sysv/linux/tst-ofdlocks.c: Return unsupported if
	kernel does not support OFD locks.
	* sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c: Likewise.
---
 ChangeLog                                     | 6 ++++++
 sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c | 7 ++++++-
 sysdeps/unix/sysv/linux/tst-ofdlocks.c        | 7 ++++++-
 3 files changed, 18 insertions(+), 2 deletions(-)

-- 
2.7.4

Comments

Florian Weimer July 27, 2018, 1:27 p.m. UTC | #1
On 07/27/2018 03:12 PM, Adhemerval Zanella wrote:
> This patch make the OFD tests return unsupported if kernel does not

> support OFD locks (it was added on 3.15).

> 

> Checked on a ia64-linux-gnu with Linux 3.14.

> 

> 	* sysdeps/unix/sysv/linux/tst-ofdlocks.c: Return unsupported if

> 	kernel does not support OFD locks.

> 	* sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c: Likewise.

> ---

>   ChangeLog                                     | 6 ++++++

>   sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c | 7 ++++++-

>   sysdeps/unix/sysv/linux/tst-ofdlocks.c        | 7 ++++++-

>   3 files changed, 18 insertions(+), 2 deletions(-)

> 

> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> index 03c4abf..8da5a0b 100644

> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> @@ -62,7 +62,12 @@ do_test (void)

>       .l_start  = (off64_t)INT32_MAX + 1024,

>       .l_len    = 1024,

>     };

> -  TEST_VERIFY_EXIT (fcntl (temp_fd, F_OFD_SETLKW, &lck64) == 0);

> +  int ret = fcntl (temp_fd, F_OFD_SETLKW, &lck64);

> +  if (ret == -1 && errno == EINVAL)

> +    /* OFD locks are only available on Linux 3.15.  */

> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");


Should use %m.

>     /* Open file description locks placed through the same open file description

>        (either by same file descriptor or a duplicated one created by fork,

> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks.c b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> index bd345e9..66c7856 100644

> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> @@ -46,7 +46,12 @@ do_test (void)

>       .l_start  = (off64_t)INT32_MAX + 1024,

>       .l_len    = 1024,

>     };

> -  TEST_VERIFY_EXIT (fcntl64 (temp_fd, F_OFD_SETLKW, &lck64) == 0);

> +  int ret = fcntl64 (temp_fd, F_OFD_SETLKW, &lck64);

> +  if (ret == -1 && errno == EINVAL)

> +    /* OFD locks are only available on Linux 3.15.  */

> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");


Likewise.

This could use TEST_COMPARE (twice).

 > +  TEST_VERIFY_EXIT (ret == 0);


Thanks,
Florian
Adhemerval Zanella July 27, 2018, 2:24 p.m. UTC | #2
On 27/07/2018 10:27, Florian Weimer wrote:
> On 07/27/2018 03:12 PM, Adhemerval Zanella wrote:

>> This patch make the OFD tests return unsupported if kernel does not

>> support OFD locks (it was added on 3.15).

>>

>> Checked on a ia64-linux-gnu with Linux 3.14.

>>

>>     * sysdeps/unix/sysv/linux/tst-ofdlocks.c: Return unsupported if

>>     kernel does not support OFD locks.

>>     * sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c: Likewise.

>> ---

>>   ChangeLog                                     | 6 ++++++

>>   sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c | 7 ++++++-

>>   sysdeps/unix/sysv/linux/tst-ofdlocks.c        | 7 ++++++-

>>   3 files changed, 18 insertions(+), 2 deletions(-)

>>

>> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

>> index 03c4abf..8da5a0b 100644

>> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

>> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

>> @@ -62,7 +62,12 @@ do_test (void)

>>       .l_start  = (off64_t)INT32_MAX + 1024,

>>       .l_len    = 1024,

>>     };

>> -  TEST_VERIFY_EXIT (fcntl (temp_fd, F_OFD_SETLKW, &lck64) == 0);

>> +  int ret = fcntl (temp_fd, F_OFD_SETLKW, &lck64);

>> +  if (ret == -1 && errno == EINVAL)

>> +    /* OFD locks are only available on Linux 3.15.  */

>> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");

> 

> Should use %m.


This does not add much information, but it does not hurt either.

> 

>>     /* Open file description locks placed through the same open file description

>>        (either by same file descriptor or a duplicated one created by fork,

>> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks.c b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

>> index bd345e9..66c7856 100644

>> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks.c

>> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

>> @@ -46,7 +46,12 @@ do_test (void)

>>       .l_start  = (off64_t)INT32_MAX + 1024,

>>       .l_len    = 1024,

>>     };

>> -  TEST_VERIFY_EXIT (fcntl64 (temp_fd, F_OFD_SETLKW, &lck64) == 0);

>> +  int ret = fcntl64 (temp_fd, F_OFD_SETLKW, &lck64);

>> +  if (ret == -1 && errno == EINVAL)

>> +    /* OFD locks are only available on Linux 3.15.  */

>> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");

> 

> Likewise.

> 

> This could use TEST_COMPARE (twice).

> 

>> +  TEST_VERIFY_EXIT (ret == 0);

> 

> Thanks,

> Florian


Patch updated below:

diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
index 03c4abf..9930a50 100644
--- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
+++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
@@ -62,7 +62,12 @@ do_test (void)
     .l_start  = (off64_t)INT32_MAX + 1024,
     .l_len    = 1024,
   };
-  TEST_VERIFY_EXIT (fcntl (temp_fd, F_OFD_SETLKW, &lck64) == 0);
+  int ret = fcntl (temp_fd, F_OFD_SETLKW, &lck64);
+  if (ret == -1 && errno == EINVAL)
+    /* OFD locks are only available on Linux 3.15.  */
+    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported): %m");
+
+  TEST_COMPARE (ret, 0);
 
   /* Open file description locks placed through the same open file description
      (either by same file descriptor or a duplicated one created by fork,
diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks.c b/sysdeps/unix/sysv/linux/tst-ofdlocks.c
index bd345e9..1aa5c2a 100644
--- a/sysdeps/unix/sysv/linux/tst-ofdlocks.c
+++ b/sysdeps/unix/sysv/linux/tst-ofdlocks.c
@@ -46,7 +46,12 @@ do_test (void)
     .l_start  = (off64_t)INT32_MAX + 1024,
     .l_len    = 1024,
   };
-  TEST_VERIFY_EXIT (fcntl64 (temp_fd, F_OFD_SETLKW, &lck64) == 0);
+  int ret = fcntl64 (temp_fd, F_OFD_SETLKW, &lck64);
+  if (ret == -1 && errno == EINVAL)
+    /* OFD locks are only available on Linux 3.15.  */
+    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported): %m");
+
+  TEST_COMPARE (ret, 0);
 
   /* Open file description locks placed through the same open file description
      (either by same file descriptor or a duplicated one created by fork,
Florian Weimer July 27, 2018, 3:22 p.m. UTC | #3
On 07/27/2018 04:24 PM, Adhemerval Zanella wrote:
> 

> 

> On 27/07/2018 10:27, Florian Weimer wrote:

>> On 07/27/2018 03:12 PM, Adhemerval Zanella wrote:

>>> This patch make the OFD tests return unsupported if kernel does not

>>> support OFD locks (it was added on 3.15).

>>>

>>> Checked on a ia64-linux-gnu with Linux 3.14.

>>>

>>>      * sysdeps/unix/sysv/linux/tst-ofdlocks.c: Return unsupported if

>>>      kernel does not support OFD locks.

>>>      * sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c: Likewise.

>>> ---

>>>    ChangeLog                                     | 6 ++++++

>>>    sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c | 7 ++++++-

>>>    sysdeps/unix/sysv/linux/tst-ofdlocks.c        | 7 ++++++-

>>>    3 files changed, 18 insertions(+), 2 deletions(-)

>>>

>>> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

>>> index 03c4abf..8da5a0b 100644

>>> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

>>> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

>>> @@ -62,7 +62,12 @@ do_test (void)

>>>        .l_start  = (off64_t)INT32_MAX + 1024,

>>>        .l_len    = 1024,

>>>      };

>>> -  TEST_VERIFY_EXIT (fcntl (temp_fd, F_OFD_SETLKW, &lck64) == 0);

>>> +  int ret = fcntl (temp_fd, F_OFD_SETLKW, &lck64);

>>> +  if (ret == -1 && errno == EINVAL)

>>> +    /* OFD locks are only available on Linux 3.15.  */

>>> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");

>>

>> Should use %m.

> 

> This does not add much information, but it does not hurt either.


Ah right, it would have to be used to report other failures.  So your 
original patch is okay as-is.

Thanks,
Florian
Rical Jasan July 27, 2018, 3:49 p.m. UTC | #4
On 07/27/2018 06:12 AM, Adhemerval Zanella wrote:
> This patch make the OFD tests return unsupported if kernel does not

> support OFD locks (it was added on 3.15).

> 

> Checked on a ia64-linux-gnu with Linux 3.14.

> 

> 	* sysdeps/unix/sysv/linux/tst-ofdlocks.c: Return unsupported if

> 	kernel does not support OFD locks.

> 	* sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c: Likewise.

> ---

>  ChangeLog                                     | 6 ++++++

>  sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c | 7 ++++++-

>  sysdeps/unix/sysv/linux/tst-ofdlocks.c        | 7 ++++++-

>  3 files changed, 18 insertions(+), 2 deletions(-)

> 

> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> index 03c4abf..8da5a0b 100644

> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> @@ -62,7 +62,12 @@ do_test (void)

>      .l_start  = (off64_t)INT32_MAX + 1024,

>      .l_len    = 1024,

>    };

> -  TEST_VERIFY_EXIT (fcntl (temp_fd, F_OFD_SETLKW, &lck64) == 0);

> +  int ret = fcntl (temp_fd, F_OFD_SETLKW, &lck64);

> +  if (ret == -1 && errno == EINVAL)

> +    /* OFD locks are only available on Linux 3.15.  */

> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");

                                                            ^
Looks like an extra paren wound up in there.

> +

> +  TEST_VERIFY_EXIT (ret == 0);

>  

>    /* Open file description locks placed through the same open file description

>       (either by same file descriptor or a duplicated one created by fork,

> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks.c b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> index bd345e9..66c7856 100644

> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> @@ -46,7 +46,12 @@ do_test (void)

>      .l_start  = (off64_t)INT32_MAX + 1024,

>      .l_len    = 1024,

>    };

> -  TEST_VERIFY_EXIT (fcntl64 (temp_fd, F_OFD_SETLKW, &lck64) == 0);

> +  int ret = fcntl64 (temp_fd, F_OFD_SETLKW, &lck64);

> +  if (ret == -1 && errno == EINVAL)

> +    /* OFD locks are only available on Linux 3.15.  */

> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");


Here too.

> +

> +  TEST_VERIFY_EXIT (ret == 0);

>  

>    /* Open file description locks placed through the same open file description

>       (either by same file descriptor or a duplicated one created by fork,

> 


Rical
Andreas Schwab July 27, 2018, 4:11 p.m. UTC | #5
On Jul 27 2018, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:

> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");


Extra paren.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."
Carlos O'Donell July 27, 2018, 5:40 p.m. UTC | #6
On 07/27/2018 09:12 AM, Adhemerval Zanella wrote:
> This patch make the OFD tests return unsupported if kernel does not

> support OFD locks (it was added on 3.15).

> 

> Checked on a ia64-linux-gnu with Linux 3.14.

> 

> 	* sysdeps/unix/sysv/linux/tst-ofdlocks.c: Return unsupported if

> 	kernel does not support OFD locks.

> 	* sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c: Likewise.


OK with parenthesis removal fix noted by Rical and Andreas.
OK since Florian's suggestion of %m is withdrawn.

OK for master.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>


> ---

>  ChangeLog                                     | 6 ++++++

>  sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c | 7 ++++++-

>  sysdeps/unix/sysv/linux/tst-ofdlocks.c        | 7 ++++++-

>  3 files changed, 18 insertions(+), 2 deletions(-)

> 

> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> index 03c4abf..8da5a0b 100644

> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c

> @@ -62,7 +62,12 @@ do_test (void)

>      .l_start  = (off64_t)INT32_MAX + 1024,

>      .l_len    = 1024,

>    };

> -  TEST_VERIFY_EXIT (fcntl (temp_fd, F_OFD_SETLKW, &lck64) == 0);

> +  int ret = fcntl (temp_fd, F_OFD_SETLKW, &lck64);

> +  if (ret == -1 && errno == EINVAL)

> +    /* OFD locks are only available on Linux 3.15.  */

> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");


OK, extra paren's noted by Rical/Andreas.

> +

> +  TEST_VERIFY_EXIT (ret == 0);


OK.

>  

>    /* Open file description locks placed through the same open file description

>       (either by same file descriptor or a duplicated one created by fork,

> diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks.c b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> index bd345e9..66c7856 100644

> --- a/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> +++ b/sysdeps/unix/sysv/linux/tst-ofdlocks.c

> @@ -46,7 +46,12 @@ do_test (void)

>      .l_start  = (off64_t)INT32_MAX + 1024,

>      .l_len    = 1024,

>    };

> -  TEST_VERIFY_EXIT (fcntl64 (temp_fd, F_OFD_SETLKW, &lck64) == 0);

> +  int ret = fcntl64 (temp_fd, F_OFD_SETLKW, &lck64);

> +  if (ret == -1 && errno == EINVAL)

> +    /* OFD locks are only available on Linux 3.15.  */

> +    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");

> +


OK, extra paren noted by Rical/Andreas.

> +  TEST_VERIFY_EXIT (ret == 0);


OK.

>  

>    /* Open file description locks placed through the same open file description

>       (either by same file descriptor or a duplicated one created by fork,

> 


Cheers,
Carlos.
diff mbox series

Patch

diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
index 03c4abf..8da5a0b 100644
--- a/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
+++ b/sysdeps/unix/sysv/linux/tst-ofdlocks-compat.c
@@ -62,7 +62,12 @@  do_test (void)
     .l_start  = (off64_t)INT32_MAX + 1024,
     .l_len    = 1024,
   };
-  TEST_VERIFY_EXIT (fcntl (temp_fd, F_OFD_SETLKW, &lck64) == 0);
+  int ret = fcntl (temp_fd, F_OFD_SETLKW, &lck64);
+  if (ret == -1 && errno == EINVAL)
+    /* OFD locks are only available on Linux 3.15.  */
+    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");
+
+  TEST_VERIFY_EXIT (ret == 0);
 
   /* Open file description locks placed through the same open file description
      (either by same file descriptor or a duplicated one created by fork,
diff --git a/sysdeps/unix/sysv/linux/tst-ofdlocks.c b/sysdeps/unix/sysv/linux/tst-ofdlocks.c
index bd345e9..66c7856 100644
--- a/sysdeps/unix/sysv/linux/tst-ofdlocks.c
+++ b/sysdeps/unix/sysv/linux/tst-ofdlocks.c
@@ -46,7 +46,12 @@  do_test (void)
     .l_start  = (off64_t)INT32_MAX + 1024,
     .l_len    = 1024,
   };
-  TEST_VERIFY_EXIT (fcntl64 (temp_fd, F_OFD_SETLKW, &lck64) == 0);
+  int ret = fcntl64 (temp_fd, F_OFD_SETLKW, &lck64);
+  if (ret == -1 && errno == EINVAL)
+    /* OFD locks are only available on Linux 3.15.  */
+    FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported)");
+
+  TEST_VERIFY_EXIT (ret == 0);
 
   /* Open file description locks placed through the same open file description
      (either by same file descriptor or a duplicated one created by fork,