]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-tasklist-export-check-20070208
authorDerrick Brashear <shadow@dementia.org>
Fri, 9 Feb 2007 01:30:14 +0000 (01:30 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 9 Feb 2007 01:30:14 +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_gcpags.c
src/cf/linux-test4.m4

index 0ff5b5e6f87443f0dc1612f021ef2a5c0c48cbf0..f21e3aeffad0ca201fd9054b3c31ba7ac0b21e78 100644 (file)
@@ -641,6 +641,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_REFRIGERATOR
@@ -855,6 +856,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 7d9d661bd4d4c26c5fffa6828e198b0fc6c44238..e60c0d50dc18cce48f91ece061a79fafd3b0243a 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 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 cd54fdfd97369f55ef984883ab6a01af935db9d6..4dc1ca7fd839085049cceefe61db391894345742 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 356c7e6041437ac30fa5885e905b9d4da8efbc91..3eab4d95c4253d7eb838b158ba7ebf0c1dd545df 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], [