From: Chaskiel M Grundman Date: Sat, 29 Jan 2005 05:46:42 +0000 (+0000) Subject: linux-tasklist-lock-weak-20050129 X-Git-Tag: BP-disconnected~15 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=51ec9e099e22e16dbf8aee3333568b9ff26abd3f;p=packages%2Fo%2Fopenafs.git linux-tasklist-lock-weak-20050129 FIXES 17424 weak binding to tasklist_lock --- diff --git a/acinclude.m4 b/acinclude.m4 index a3b453202..c7b1a3a81 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);