diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 7e06d24f65aff170153f41c7fd14839d53ac9aea..a0bd3d02319410c2be215763977d483de8747a0e 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -144,6 +144,13 @@ Bugzilla : 14095 Description: Add lustre_start utility to start or stop multiple Lustre servers from a CSV file. +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. + -------------------------------------------------------------------------- 2008-08-31 Sun Microsystems, Inc. diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index 7dfbbd1a2c19f1f1899e8e2ea567e7cbca391170..a6cc1a2309d6706b51b7f8f29d30b2ccbb99f7ea 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -465,7 +465,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, diff --git a/lustre/mds/mds_reint.c b/lustre/mds/mds_reint.c index 2dc03816b9bc52c5493ec973f84f5c7e6fb3ab08..ab8330d899f2ccd4f36c02092aa17f8518559090 100644 --- a/lustre/mds/mds_reint.c +++ b/lustre/mds/mds_reint.c @@ -2393,7 +2393,8 @@ no_unlink: GOTO(cleanup, rc); cleanup: - rc = mds_finish_transno(mds, de_tgtdir ? de_tgtdir->d_inode : NULL, + rc = mds_finish_transno(mds, de_tgtdir && !IS_ERR(de_tgtdir) ? + de_tgtdir->d_inode : NULL, handle, req, rc, 0, 0); switch (cleanup_phase) {