From: Peng Tao Date: Thu, 6 Sep 2012 03:08:51 +0000 (+0800) Subject: LU-1840 ldlm: fix mutex leak in ldlm_resource_get X-Git-Tag: 2.3.55~36 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=e6d5d5508231fca83cb306af69a877a7101de37a LU-1840 ldlm: fix mutex leak in ldlm_resource_get We created resource with lr_lvb_mutex locked. Need to drop it before returning. Signed-off-by: Peng Tao Change-Id: Id81f792605d864b9d3236498f063d6c003d8cd77 Reviewed-on: http://review.whamcloud.com/3883 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Fan Yong Reviewed-by: Nathaniel Clark Reviewed-by: Oleg Drokin --- diff --git a/lustre/ldlm/ldlm_resource.c b/lustre/ldlm/ldlm_resource.c index bb916b6..ec8bc22 100644 --- a/lustre/ldlm/ldlm_resource.c +++ b/lustre/ldlm/ldlm_resource.c @@ -1079,8 +1079,10 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent, /* someone won the race and added the resource before */ cfs_hash_bd_unlock(ns->ns_rs_hash, &bd, 1); /* clean lu_ref for failed resource */ - lu_ref_fini(&res->lr_reference); - OBD_SLAB_FREE(res, ldlm_resource_slab, sizeof *res); + lu_ref_fini(&res->lr_reference); + /* We have taken lr_lvb_mutex. Drop it. */ + cfs_mutex_unlock(&res->lr_lvb_mutex); + OBD_SLAB_FREE(res, ldlm_resource_slab, sizeof *res); res = cfs_hlist_entry(hnode, struct ldlm_resource, lr_hash); /* synchronize WRT resource creation */ @@ -1104,11 +1106,12 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent, if (rc) CERROR("lvbo_init failed for resource " LPU64": rc %d\n", name->name[0], rc); - /* we create resource with locked lr_lvb_mutex */ - cfs_mutex_unlock(&res->lr_lvb_mutex); - } + } - return res; + /* we create resource with locked lr_lvb_mutex */ + cfs_mutex_unlock(&res->lr_lvb_mutex); + + return res; } EXPORT_SYMBOL(ldlm_resource_get);