diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 7b6315a629248553c69e71b03813f73a7f4320f7..c79cb6a0ddf24bfb5bc09e0db2bc9b1873f82647 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -24,6 +24,12 @@ tbd Sun Microsystems, Inc. 'tunefs.lustre --param="mdt.quota_type=ug1" $MDTDEV'. For more information, please refer to bugzilla 13904. +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 0b9f09b8170af752748bbf3762557f80f67f008c..dddd257f16500145afbb6daa403a8badbd41efa1 100644 --- a/lustre/ldlm/ldlm_flock.c +++ b/lustre/ldlm/ldlm_flock.c @@ -544,6 +544,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;