]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-tasklist-export-check-20070208
authorDerrick Brashear <shadow@dementia.org>
Fri, 9 Feb 2007 01:30:31 +0000 (01:30 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 9 Feb 2007 01:30:31 +0000 (01:30 +0000)
work around tasklist lock export harder

(cherry picked from commit 00c5dbfd048e31a653de0e1cf37d45d539e0c755)

acinclude.m4
src/afs/LINUX/osi_module.c
src/afs/LINUX/osi_probe.c
src/afs/afs_osi.c
src/cf/linux-test4.m4

index 40d0e3207910ee752753a32c5cafabd0dca9cce8..5ebd730850ab5c7970e7333fd60a9d9e05ddd9b9 100644 (file)
@@ -626,6 +626,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
                 LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_EXIT_STATE
                 LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_TGID
                 LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_TODO
+                LINUX_EXPORTS_TASKLIST_LOCK
                 LINUX_GET_SB_HAS_STRUCT_VFSMOUNT
                 LINUX_STATFS_TAKES_DENTRY
                 LINUX_FREEZER_H_EXISTS
@@ -840,6 +841,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
                 if test "x$ac_cv_linux_fs_struct_fop_has_flock" = "xyes" ; then
                  AC_DEFINE(STRUCT_FILE_OPERATIONS_HAS_FLOCK, 1, [define if your struct file_operations has flock])
                 fi
+                if test "x$ac_cv_linux_exports_tasklist_lock" = "xyes" ; then
+                 AC_DEFINE(EXPORTED_TASKLIST_LOCK, 1, [define if tasklist_lock exported])
+                fi
                 :
                fi
 esac
index 5103fa810dee683407abfcb0927a3c38e8cbff8f..28376d64a29d69730dd4a6028df43f49e7d75778 100644 (file)
@@ -423,7 +423,7 @@ get_page_offset(void)
     struct task_struct *p, *q;
 
     /* search backward thru the circular list */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+#if defined(EXPORTED_TASKLIST_LOCK) 
     read_lock(&tasklist_lock);
 #endif
     /* search backward thru the circular list */
@@ -433,14 +433,14 @@ get_page_offset(void)
     for (p = current; p; p = p->prev_task) {
 #endif
        if (p->pid == 1) {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+#if defined(EXPORTED_TASKLIST_LOCK) 
            read_unlock(&tasklist_lock);
 #endif
            return p->addr_limit.seg;
        }
     }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+#if defined(EXPORTED_TASKLIST_LOCK) 
     read_unlock(&tasklist_lock);
 #endif
     return 0;
index c2d3ce4a167342a9d8558aaaec7dd52121e649b8..f83767cb9f7f2a3655a6882eed5824eed51082a7 100644 (file)
@@ -247,7 +247,9 @@ extern asmlinkage long sys_exit (int) __attribute__((weak));
 extern asmlinkage long sys_open (const char *, int, int) __attribute__((weak));
 #endif
 extern asmlinkage long sys_ioctl(unsigned int, unsigned int, unsigned long) __attribute__((weak));
+#if defined(EXPORTED_TASKLIST_LOCK) 
 extern rwlock_t tasklist_lock __attribute__((weak));
+#endif
 
 
 /* Structures used to control probing.  We put all the details of which
index 4fb288d22d49383c4e5296864edb46d45f6d6f6a..a409f0f0d150176271aa0ad35b55fb4d22ec2027 100644 (file)
@@ -811,13 +811,18 @@ void
 afs_osi_TraverseProcTable()
 {
 #if !defined(LINUX_KEYRING_SUPPORT)
-    extern rwlock_t tasklist_lock __attribute__((weak));
     struct task_struct *p;
 
+#ifdef EXPORTED_TASKLIST_LOCK
+    extern rwlock_t tasklist_lock __attribute__((weak));
+
     if (&tasklist_lock)
        read_lock(&tasklist_lock);
+#endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+#ifdef EXPORTED_TASKLIST_LOCK
     else
+#endif
        rcu_read_lock();
 #endif
 
@@ -844,10 +849,14 @@ afs_osi_TraverseProcTable()
        afs_GCPAGs_perproc_func(p);
     }
 #endif
+#ifdef EXPORTED_TASKLIST_LOCK
     if (&tasklist_lock)
        read_unlock(&tasklist_lock);
+#endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+#ifdef EXPORTED_TASKLIST_LOCK
     else
+#endif
        rcu_read_unlock();
 #endif
 #endif
index 0fd4e3ce4fb9ea4f2b2eef74d5ccb1a2b8d49cbf..3862c48b90ee7d7ac13e48bee2a75b7c0fd22bb9 100644 (file)
@@ -1,3 +1,17 @@
+AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [
+  AC_MSG_CHECKING([for exported tasklist_lock])
+  AC_CACHE_VAL([ac_cv_linux_exports_tasklist_lock], [
+    AC_TRY_KBUILD(
+[
+#include <linux/sched.h>],
+[
+extern rwlock_t tasklist_lock __attribute__((weak)); 
+],
+      ac_cv_linux_exports_tasklist_lock=yes,
+      ac_cv_linux_exports_tasklist_lock=no)])
+  AC_MSG_RESULT($ac_cv_linux_exports_tasklist_lock)])
+
+
 AC_DEFUN([LINUX_CONFIG_H_EXISTS], [
   AC_MSG_CHECKING([for linux/config.h existance])
   AC_CACHE_VAL([ac_cv_linux_config_h_exists], [