From 5b6fe6a693831ef25e6e2244cc236a95ba7c41ee Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Mon, 31 Jan 2005 04:25:31 +0000 Subject: [PATCH] STABLE14-linux-tasklist-lock-weak-20050129 FIXES 17424 weak binding to tasklist_lock (cherry picked from commit 51ec9e099e22e16dbf8aee3333568b9ff26abd3f) --- acinclude.m4 | 4 ---- src/afs/afs_osi.c | 12 +++++------- src/cf/linux-test4.m4 | 17 ----------------- src/rx/LINUX/rx_knet.c | 12 +++++------- 4 files changed, 10 insertions(+), 35 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 931de5b7d..e00b904be 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -560,7 +560,6 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_COMPLETION_H_EXISTS LINUX_DEFINES_FOR_EACH_PROCESS LINUX_DEFINES_PREV_TASK - LINUX_EXPORTS_TASKLIST_LOCK LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM @@ -636,9 +635,6 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) if test "x$ac_cv_linux_exports_sys_wait4" = "xyes" ; then AC_DEFINE(EXPORTED_SYS_WAIT4, 1, [define if your linux kernel exports sys_wait4]) fi - if test "x$ac_cv_linux_exports_tasklist_lock" = "xyes" ; then - AC_DEFINE(EXPORTED_TASKLIST_LOCK, 1, [define if your linux kernel exports tasklist_lock]) - fi if test "x$ac_cv_linux_exports_sys_call_table" = "xyes"; then AC_DEFINE(EXPORTED_SYS_CALL_TABLE) fi diff --git a/src/afs/afs_osi.c b/src/afs/afs_osi.c index 2f28f2848..e03e49446 100644 --- a/src/afs/afs_osi.c +++ b/src/afs/afs_osi.c @@ -850,14 +850,13 @@ afs_osi_TraverseProcTable(void) #endif #if defined(AFS_LINUX22_ENV) +extern rwlock_t tasklist_lock __attribute__((weak)); void afs_osi_TraverseProcTable() { struct task_struct *p; - -#ifdef EXPORTED_TASKLIST_LOCK - read_lock(&tasklist_lock); -#endif + if (&tasklist_lock) + read_lock(&tasklist_lock); #ifdef DEFINED_FOR_EACH_PROCESS for_each_process(p) if (p->pid) { #ifdef STRUCT_TASK_STRUCT_HAS_EXIT_STATE @@ -881,9 +880,8 @@ afs_osi_TraverseProcTable() afs_GCPAGs_perproc_func(p); } #endif -#ifdef EXPORTED_TASKLIST_LOCK - read_unlock(&tasklist_lock); -#endif + if (&tasklist_lock) + read_unlock(&tasklist_lock); } #endif diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 582f49012..9f30becf6 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -188,23 +188,6 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_wait4) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [ -AC_MSG_CHECKING(for exported tasklist_lock) -save_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" -AC_CACHE_VAL(ac_cv_linux_exports_tasklist_lock, -[ -AC_TRY_COMPILE( -[#include ], -[#ifndef __ver_tasklist_lock -#error tasklist_lock not exported -#endif], -ac_cv_linux_exports_tasklist_lock=yes, -ac_cv_linux_exports_tasklist_lock=no)]) -AC_MSG_RESULT($ac_cv_linux_exports_tasklist_lock) -CPPFLAGS="$save_CPPFLAGS"]) - - AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_CDEV], [ AC_MSG_CHECKING(for i_cdev in struct inode) save_CPPFLAGS="$CPPFLAGS" diff --git a/src/rx/LINUX/rx_knet.c b/src/rx/LINUX/rx_knet.c index dba89e9f2..5e9b46d77 100644 --- a/src/rx/LINUX/rx_knet.c +++ b/src/rx/LINUX/rx_knet.c @@ -194,20 +194,18 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *from, struct iovec *iov, return code; } - +extern rwlock_t tasklist_lock __attribute__((weak)); void osi_StopListener(void) { struct task_struct *listener; extern int rxk_ListenerPid; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) - read_lock(&tasklist_lock); -#endif + if (&tasklist_lock) + read_lock(&tasklist_lock); listener = find_task_by_pid(rxk_ListenerPid); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) - read_unlock(&tasklist_lock); -#endif + if (&tasklist_lock) + read_unlock(&tasklist_lock); while (rxk_ListenerPid) { flush_signals(listener); force_sig(SIGKILL, listener); -- 2.39.5