X-Git-Url: http://git.openafs.org/?p=openafs.git;a=blobdiff_plain;f=src%2Fafs%2Fafs_osi_gcpags.c;h=ccd46bbd2a800a64d4591260e109a27b9f1c01dd;hp=c5df931108f396cb5a33c97e935db626f96d9e33;hb=85d8bdac7439966a64709724d20dfd487911f7bc;hpb=928ad0445e91ecbfcd32a26e8c17b90ee0d83700 diff --git a/src/afs/afs_osi_gcpags.c b/src/afs/afs_osi_gcpags.c index c5df931..ccd46bb 100644 --- a/src/afs/afs_osi_gcpags.c +++ b/src/afs/afs_osi_gcpags.c @@ -226,18 +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); -#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 @@ -261,11 +269,16 @@ 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); -#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 @@ -486,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; @@ -500,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));