linux-warning-reduction-20090318
[openafs.git] / src / afs / afs_osi_gcpags.c
index 3c8cfbb..ccd46bb 100644 (file)
@@ -226,13 +226,26 @@ afs_osi_TraverseProcTable(void)
 #endif
 
 #if defined(AFS_LINUX22_ENV)
+#ifdef EXPORTED_TASKLIST_LOCK
 extern rwlock_t tasklist_lock __attribute__((weak));
+#endif
 void
 afs_osi_TraverseProcTable()
 {
+#if !defined(LINUX_KEYRING_SUPPORT)
     struct task_struct *p;
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) && defined(EXPORTED_TASKLIST_LOCK)
     if (&tasklist_lock)
-       read_lock(&tasklist_lock);
+       read_lock(&tasklist_lock);
+#endif /* EXPORTED_TASKLIST_LOCK */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) && defined(EXPORTED_TASKLIST_LOCK)
+    else
+#endif /* EXPORTED_TASKLIST_LOCK && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) */
+       rcu_read_lock();
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) */
+    
 #ifdef DEFINED_FOR_EACH_PROCESS
     for_each_process(p) if (p->pid) {
 #ifdef STRUCT_TASK_STRUCT_HAS_EXIT_STATE
@@ -256,8 +269,17 @@ afs_osi_TraverseProcTable()
        afs_GCPAGs_perproc_func(p);
     }
 #endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) && defined(EXPORTED_TASKLIST_LOCK)
     if (&tasklist_lock)
-       read_unlock(&tasklist_lock);
+       read_unlock(&tasklist_lock);
+#endif /* EXPORTED_TASKLIST_LOCK */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) && defined(EXPORTED_TASKLIST_LOCK)
+    else
+#endif /* EXPORTED_TASKLIST_LOCK && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) */
+       rcu_read_unlock();
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) */
+#endif
 }
 #endif
 
@@ -477,7 +499,7 @@ afs_osi_proc2cred(AFS_PROC * pr)
     return rv;
 }
 #elif defined(AFS_LINUX22_ENV)
-const struct AFS_UCRED *
+struct AFS_UCRED *
 afs_osi_proc2cred(AFS_PROC * pr)
 {
     struct AFS_UCRED *rv = NULL;
@@ -491,10 +513,15 @@ afs_osi_proc2cred(AFS_PROC * pr)
        || (pr->state == TASK_UNINTERRUPTIBLE)
        || (pr->state == TASK_STOPPED)) {
        cr.cr_ref = 1;
-       cr.cr_uid = pr->uid;
+       cr.cr_uid = task_uid(pr);
 #if defined(AFS_LINUX26_ENV)
+#if defined(STRUCT_TASK_HAS_CRED)
+       get_group_info(pr->cred->group_info);
+       cr.cr_group_info = pr->cred->group_info;
+#else
        get_group_info(pr->group_info);
        cr.cr_group_info = pr->group_info;
+#endif
 #else
        cr.cr_ngroups = pr->ngroups;
        memcpy(cr.cr_groups, pr->groups, NGROUPS * sizeof(gid_t));