From 460b0eba644886dd01781db2589d71b648672b21 Mon Sep 17 00:00:00 2001 From: bobijam Date: Tue, 24 Jun 2008 01:56:04 +0000 Subject: [PATCH] Branch HEAD b=15924 i=green, johann Severity : major Bugzilla : 15924 Description: do not process already freed flock Details : flock can possibly be freed by another thread before it reaches to ldlm_flock_completion_ast. --- lustre/ChangeLog | 6 ++++++ lustre/ldlm/ldlm_flock.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 30e2b84..c5f1b99 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -12,6 +12,12 @@ tbd Sun Microsystems, Inc. * RHEL 4 and RHEL 5/SLES 10 clients behaves differently on 'cd' to a removed cwd "./" (refer to Bugzilla 14399). +Severity : major +Bugzilla : 15924 +Description: do not process already freed flock +Details : flock can possibly be freed by another thread before it reaches + to ldlm_flock_completion_ast. + Severity : normal Bugzilla : 14480 Description: LBUG during stress test diff --git a/lustre/ldlm/ldlm_flock.c b/lustre/ldlm/ldlm_flock.c index 273c50c..b57fec9 100644 --- a/lustre/ldlm/ldlm_flock.c +++ b/lustre/ldlm/ldlm_flock.c @@ -526,6 +526,13 @@ ldlm_flock_completion_ast(struct ldlm_lock *lock, int flags, void *data) RETURN(rc); granted: + /* before flock's complete ast gets here, the flock + * can possibly be freed by another thread + */ + if (lock->l_destroyed) { + LDLM_DEBUG(lock, "already destroyed by another thread"); + RETURN(0); + } LDLM_DEBUG(lock, "client-side enqueue granted"); ns = lock->l_resource->lr_namespace; -- 1.8.3.1