From: Jinshan Xiong Date: Thu, 10 Nov 2016 17:30:54 +0000 (-0500) Subject: staging: lustre: osc: osc_extent should hold refcount to osc_object X-Git-Tag: v4.10-rc1~148^2~257 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=d7f651ad64c2bbf2df47c3cacfbdae95740253eb;p=karo-tx-linux.git staging: lustre: osc: osc_extent should hold refcount to osc_object To avoid a race that osc_extent and osc_object destroy happens on the same time, which causes kernel crash. Signed-off-by: Jinshan Xiong Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7164 Reviewed-on: http://review.whamcloud.com/16433 Reviewed-by: John L. Hammond Reviewed-by: Patrick Farrell Reviewed-by: Oleg Drokin Signed-off-by: James Simmons Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c b/drivers/staging/lustre/lustre/osc/osc_cache.c index 560bcaf8087e..786e55024724 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cache.c +++ b/drivers/staging/lustre/lustre/osc/osc_cache.c @@ -360,6 +360,7 @@ static struct osc_extent *osc_extent_alloc(struct osc_object *obj) RB_CLEAR_NODE(&ext->oe_node); ext->oe_obj = obj; + cl_object_get(osc2cl(obj)); atomic_set(&ext->oe_refc, 1); atomic_set(&ext->oe_users, 0); INIT_LIST_HEAD(&ext->oe_link); @@ -398,6 +399,7 @@ static void osc_extent_put(const struct lu_env *env, struct osc_extent *ext) LDLM_LOCK_PUT(ext->oe_dlmlock); ext->oe_dlmlock = NULL; } + cl_object_put(env, osc2cl(ext->oe_obj)); osc_extent_free(ext); } }