diff -ur openafs-1.4.2.orig/src/afs/LINUX/osi_module.c openafs-1.4.2/src/afs/LINUX/osi_module.c --- openafs-1.4.2.orig/src/afs/LINUX/osi_module.c 2006-09-16 21:19:36.000000000 +0200 +++ openafs-1.4.2/src/afs/LINUX/osi_module.c 2006-11-18 12:24:18.000000000 +0100 @@ -423,9 +423,7 @@ struct task_struct *p, *q; /* search backward thru the circular list */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) - read_lock(&tasklist_lock); -#endif + rcu_read_lock(); /* search backward thru the circular list */ #ifdef DEFINED_PREV_TASK for (q = current; p = q; q = prev_task(p)) { @@ -433,16 +431,12 @@ for (p = current; p; p = p->prev_task) { #endif if (p->pid == 1) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) - read_unlock(&tasklist_lock); -#endif + rcu_read_unlock(); return p->addr_limit.seg; } } -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) - read_unlock(&tasklist_lock); -#endif + rcu_read_unlock(); return 0; #endif } diff -ur openafs-1.4.2.orig/src/afs/LINUX/osi_probe.c openafs-1.4.2/src/afs/LINUX/osi_probe.c --- openafs-1.4.2.orig/src/afs/LINUX/osi_probe.c 2006-10-06 16:01:19.000000000 +0200 +++ openafs-1.4.2/src/afs/LINUX/osi_probe.c 2006-11-18 12:26:03.000000000 +0100 @@ -245,7 +245,6 @@ 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)); -extern rwlock_t tasklist_lock __attribute__((weak)); /* Structures used to control probing. We put all the details of which @@ -511,9 +510,6 @@ /* symbol in section to try scanning */ #if defined(AFS_SPARC64_LINUX20_ENV) || defined(AFS_S390_LINUX20_ENV) || defined(AFS_S390X_LINUX20_ENV) (unsigned long)&sys_close, -#elif defined(AFS_AMD64_LINUX20_ENV) - /* On this platform, it's in a different section! */ - (unsigned long)&tasklist_lock, #else (unsigned long)&init_mm, #endif @@ -534,10 +530,6 @@ (unsigned long)(&init_mm), 0x1fffff, 0x30000, -#elif defined(AFS_AMD64_LINUX20_ENV) - (unsigned long)(&tasklist_lock) - 0x30000, - 0, - 0x6000, #elif defined(AFS_PPC64_LINUX26_ENV) (unsigned long)(&do_signal), 0xfff, diff -ur openafs-1.4.2.orig/src/afs/afs_osi.c openafs-1.4.2/src/afs/afs_osi.c --- openafs-1.4.2.orig/src/afs/afs_osi.c 2006-09-27 23:14:27.000000000 +0200 +++ openafs-1.4.2/src/afs/afs_osi.c 2006-11-18 12:28:53.000000000 +0100 @@ -809,15 +809,9 @@ afs_osi_TraverseProcTable() { #if !defined(LINUX_KEYRING_SUPPORT) - extern rwlock_t tasklist_lock __attribute__((weak)); struct task_struct *p; - if (&tasklist_lock) - read_lock(&tasklist_lock); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) - else - rcu_read_lock(); -#endif + rcu_read_lock(); #ifdef DEFINED_FOR_EACH_PROCESS for_each_process(p) if (p->pid) { @@ -842,12 +836,7 @@ afs_GCPAGs_perproc_func(p); } #endif - if (&tasklist_lock) - read_unlock(&tasklist_lock); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) - else - rcu_read_unlock(); -#endif + rcu_read_unlock(); #endif } #endif diff -ur openafs-1.4.2.orig/src/rx/LINUX/rx_knet.c openafs-1.4.2/src/rx/LINUX/rx_knet.c --- openafs-1.4.2.orig/src/rx/LINUX/rx_knet.c 2006-09-22 13:20:35.000000000 +0200 +++ openafs-1.4.2/src/rx/LINUX/rx_knet.c 2006-11-18 12:29:45.000000000 +0100 @@ -200,26 +200,15 @@ return code; } -extern rwlock_t tasklist_lock __attribute__((weak)); void osi_StopListener(void) { struct task_struct *listener; extern int rxk_ListenerPid; - if (&tasklist_lock) - read_lock(&tasklist_lock); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) - else - rcu_read_lock(); -#endif + rcu_read_lock(); listener = find_task_by_pid(rxk_ListenerPid); - if (&tasklist_lock) - read_unlock(&tasklist_lock); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) - else - rcu_read_unlock(); -#endif + rcu_read_unlock(); while (rxk_ListenerPid) { flush_signals(listener); force_sig(SIGKILL, listener);