tasklist-export-check-20070208
authorDerrick Brashear <shadow@dementia.org>
Fri, 9 Feb 2007 01:30:00 +0000 (01:30 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 9 Feb 2007 01:30:00 +0000 (01:30 +0000)
work around tasklist lock export harder

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

index 41f7997..502692c 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 7d9d661..e60c0d5 100644 (file)
@@ -154,7 +154,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 */
@@ -164,14 +164,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 c2d3ce4..f83767c 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 cd54fdf..4dc1ca7 100644 (file)
@@ -230,13 +230,17 @@ 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
 
@@ -263,10 +267,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 0fd4e3c..3862c48 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], [