#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);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+ 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
-
+#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
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);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+ 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
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;
|| (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));