rc = mgs_connect_to_osd(mgs, lustre_cfg_string(lcfg, 3));
if (rc)
- RETURN(rc);
+ GOTO(err_lmi, rc);
obd = class_name2obd(lustre_cfg_string(lcfg, 0));
LASSERT(obd);
lu_cdebug_printer);
}
obd_disconnect(mgs->mgs_bottom_exp);
+err_lmi:
+ if (lmi)
+ server_put_mount(obd->obd_name, lmi->lmi_mnt);
RETURN(rc);
}
rc = lustre_start_simple(LUSTRE_MGS_OBDNAME, LUSTRE_MGS_NAME,
LUSTRE_MGS_OBDNAME, 0, 0,
lsi->lsi_osd_obdname, 0);
- /* Do NOT call server_deregister_mount() here. This leads to
- * inability cleanup cleanly and free lsi and other stuff when
- * mgs calls server_put_mount() in error handling case. -umka */
+ /* server_deregister_mount() is not called previously, for lsi
+ * and other stuff can't be freed cleanly when mgs calls
+ * server_put_mount() in error handling case (see b=17758),
+ * this problem is caused by a bug in mgs_init0, which forgot
+ * calling server_put_mount in error case. */
+
+ if (rc)
+ server_deregister_mount(LUSTRE_MGS_OBDNAME);
}
if (rc)