From e513bc7950e947f8a569eaa39f1ed522efa21792 Mon Sep 17 00:00:00 2001 From: johann <johann> Date: Tue, 7 Oct 2008 15:13:01 +0000 Subject: [PATCH] Branch HEAD b=17026 i=shadow i=oleg Description: (ptllnd_peer.c:557:kptllnd_peer_check_sends()) ASSERTION(!in_interrupt()) failed Details: fix stack overflow in the distributed lock manager by defering export eviction after a failed ast to the elt thread instead of handling it in the dlm interpret routine. --- lustre/ChangeLog | 7 +++++++ lustre/ldlm/ldlm_lockd.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 522fc71c03..c0d8a42913 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -1436,6 +1436,13 @@ Description: Lustre GPF in {:ptlrpc:ptlrpc_server_free_request+373} Details : In case of memory pressure, list_del() can be called twice on req->rq_history_list, causing a kernel oops. +Severity : normal +Bugzilla : 17026 +Description: (ptllnd_peer.c:557:kptllnd_peer_check_sends()) ASSERTION(!in_interrupt()) failed +Details : fix stack overflow in the distributed lock manager by defering export + eviction after a failed ast to the elt thread instead of handling + it in the dlm interpret routine. + -------------------------------------------------------------------------------- 2007-08-10 Cluster File Systems, Inc. <info@clusterfs.com> diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index f2965fc6a8..948abea9ed 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -486,7 +486,14 @@ static void ldlm_failed_ast(struct ldlm_lock *lock, int rc, if (obd_dump_on_timeout) libcfs_debug_dumplog(); +#ifdef __KERNEL__ + spin_lock_bh(&waiting_locks_spinlock); + list_add(&lock->l_pending_chain, &expired_lock_thread.elt_expired_locks); + cfs_waitq_signal(&expired_lock_thread.elt_waitq); + spin_unlock_bh(&waiting_locks_spinlock); +#else class_fail_export(lock->l_export); +#endif } static int ldlm_handle_ast_error(struct ldlm_lock *lock, -- GitLab