From: Oleg Drokin Date: Fri, 18 May 2018 01:43:18 +0000 (-0400) Subject: LU-11015 lov: Move lov_tgts_kobj init to lov_setup X-Git-Tag: 2.11.53~74 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=313ac16698dba613c079303565c8db52c4066d5e;p=fs%2Flustre-release.git LU-11015 lov: Move lov_tgts_kobj init to lov_setup and free it in lov_cleanup. This looks like a more robust solution vs doint it in lov_putref esp. since we know refcount there crosses 0 repeatedly, confusing things. Change-Id: I49b1a1e97464bd388fe20a97b903468139730213 Signed-off-by: Oleg Drokin Reviewed-on: https://review.whamcloud.com/32367 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: John L. Hammond --- diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c index 0176c2f..e906fc82 100644 --- a/lustre/lov/lov_obd.c +++ b/lustre/lov/lov_obd.c @@ -103,10 +103,6 @@ static void lov_putref(struct obd_device *obd) /* Disconnect */ __lov_del_obd(obd, tgt); } - - if (lov->lov_tgts_kobj) - kobject_put(lov->lov_tgts_kobj); - } else { mutex_unlock(&lov->lov_lock); } @@ -229,9 +225,6 @@ static int lov_connect(const struct lu_env *env, obd_getref(obd); - lov->lov_tgts_kobj = kobject_create_and_add("target_obds", - &obd->obd_kset.kobj); - for (i = 0; i < lov->desc.ld_tgt_count; i++) { tgt = lov->lov_tgts[i]; if (!tgt || obd_uuid_empty(&tgt->ltd_uuid)) @@ -783,6 +776,12 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg) GOTO(out, rc); rc = lov_tunables_init(obd); + if (rc) + GOTO(out, rc); + + lov->lov_tgts_kobj = kobject_create_and_add("target_obds", + &obd->obd_kset.kobj); + out: return rc; } @@ -794,6 +793,11 @@ static int lov_cleanup(struct obd_device *obd) struct pool_desc *pool; ENTRY; + if (lov->lov_tgts_kobj) { + kobject_put(lov->lov_tgts_kobj); + lov->lov_tgts_kobj = NULL; + } + list_for_each_safe(pos, tmp, &lov->lov_pool_list) { pool = list_entry(pos, struct pool_desc, pool_list); /* free pool structs */