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