Fix tst-setgetname for Linux kernels < 2.6.33.
authorCarlos O'Donell <carlos@redhat.com>
Wed, 5 Feb 2014 15:10:34 +0000 (10:10 -0500)
committerCarlos O'Donell <carlos@redhat.com>
Wed, 5 Feb 2014 15:13:11 +0000 (10:13 -0500)
Support for /proc/self/task/$tid/comm as added in Linux 2.6.33,
therefore since the test tst-setgetname relies on this functionality
to operate we must skip the test in kernels < 2.6.33. We wrap the
checks with __ASSUME_PROC_PID_TASK_COMM such that in the future when
we move arch_minimum_kernel to 2.6.33 we can remove this code.

ChangeLog
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/tst-setgetname.c
sysdeps/unix/sysv/linux/kernel-features.h

index 9c0a003..a75fb0f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-05  Carlos O'Donell  <carlos@rehdat.com>
+
+       * sysdeps/unix/sysv/linux/kernel-features.h
+       [__LINUX_KERNEL_VERSION >= 0x020621]
+       (__ASSUME_PROC_PID_TASK_COMM): Define.
+
 2014-02-05  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
        * manual/contrib.texi: Update entry for Ondrej Bilka, Will
index 8761f5b..003e290 100644 (file)
@@ -1,3 +1,9 @@
+2014-02-05  Carlos O'Donell  <carlos@redhat.com>
+
+       * sysdeps/unix/sysv/linux/tst-setgetname.c (do_test): Skip the
+       test if !__ASSUME_PROC_PID_TASK_COMM and get_self_comm returns
+       ENOENT.
+
 2014-01-23  Stefan Liebler  <stli@linux.vnet.ibm.com>
 
        * tst-tls7.c: Adjust testcase timeout
index 2aceba5..f5693e2 100644 (file)
@@ -23,6 +23,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <kernel-features.h>
 
 /* New name of process.  */
 #define NEW_NAME "setname"
@@ -99,6 +100,19 @@ do_test (int argc, char **argv)
   if (res == 0)
     {
       res = get_self_comm (gettid (), name_check, TASK_COMM_LEN);
+
+#if !__ASSUME_PROC_PID_TASK_COMM
+      /* On this first test we look for ENOENT to be returned from
+         get_self_comm to indicate that the kernel is older than
+         2.6.33 and doesn't contain comm within the proc structure.
+         In that case we skip the entire test.  */
+      if (res == ENOENT)
+       {
+         printf ("SKIP: The kernel does not have /proc/self/task/%%lu/comm.\n");
+         return 0;
+       }
+#endif
+
       if (res == 0)
        {
          if (strncmp (name, name_check, strlen (BIG_NAME)) == 0)
index 3723535..aabf69d 100644 (file)
 # define __ASSUME_RECVMMSG     1
 #endif
 
+/* Support for /proc/self/task/$tid/comm and /proc/$pid/task/$tid/comm were
+   added in 2.6.33.  */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_PROC_PID_TASK_COMM   1
+#endif
+
 /* statfs fills in f_flags since 2.6.36.  */
 #if __LINUX_KERNEL_VERSION >= 0x020624
 # define __ASSUME_STATFS_F_FLAGS       1