diff -ur openafs-1.4.2fc4.orig/src/afs/LINUX/osi_module.c openafs-1.4.2fc4/src/afs/LINUX/osi_module.c --- openafs-1.4.2fc4.orig/src/afs/LINUX/osi_module.c 2006-09-16 21:19:36.000000000 +0200 +++ openafs-1.4.2fc4/src/afs/LINUX/osi_module.c 2006-09-21 10:29:21.000000000 +0200 @@ -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.2fc4.orig/src/afs/LINUX/osi_probe.c openafs-1.4.2fc4/src/afs/LINUX/osi_probe.c --- openafs-1.4.2fc4.orig/src/afs/LINUX/osi_probe.c 2006-08-15 00:13:59.000000000 +0200 +++ openafs-1.4.2fc4/src/afs/LINUX/osi_probe.c 2006-09-21 10:28:30.000000000 +0200 @@ -510,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 @@ -533,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.2fc4.orig/src/afs/afs_osi.c openafs-1.4.2fc4/src/afs/afs_osi.c --- openafs-1.4.2fc4.orig/src/afs/afs_osi.c 2006-05-22 21:08:45.000000000 +0200 +++ openafs-1.4.2fc4/src/afs/afs_osi.c 2006-09-21 10:30:03.000000000 +0200 @@ -805,13 +805,11 @@ #endif #if defined(AFS_LINUX22_ENV) -extern rwlock_t tasklist_lock __attribute__((weak)); void afs_osi_TraverseProcTable() { struct task_struct *p; - if (&tasklist_lock) - read_lock(&tasklist_lock); + rcu_read_lock(); #ifdef DEFINED_FOR_EACH_PROCESS for_each_process(p) if (p->pid) { #ifdef STRUCT_TASK_STRUCT_HAS_EXIT_STATE @@ -835,8 +833,7 @@ afs_GCPAGs_perproc_func(p); } #endif - if (&tasklist_lock) - read_unlock(&tasklist_lock); + rcu_read_unlock(); } #endif diff -ur openafs-1.4.2fc4.orig/src/rx/LINUX/rx_knet.c openafs-1.4.2fc4/src/rx/LINUX/rx_knet.c --- openafs-1.4.2fc4.orig/src/rx/LINUX/rx_knet.c 2006-03-02 07:41:23.000000000 +0100 +++ openafs-1.4.2fc4/src/rx/LINUX/rx_knet.c 2006-09-21 10:27:50.000000000 +0200 @@ -200,18 +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); + rcu_read_lock(); listener = find_task_by_pid(rxk_ListenerPid); - if (&tasklist_lock) - read_unlock(&tasklist_lock); + rcu_read_unlock(); while (rxk_ListenerPid) { flush_signals(listener); force_sig(SIGKILL, listener);