During object device shutdown obd_svc_stats must only be freed
after all access methods from user-land are no longer possible
to prevent any race and further crash.
Lustre-change: https://review.whamcloud.com/30249
Lustre-commit:
ffc843a0aacd78495b1cff51344aaee3e32fc2de
Signed-off-by: Bruno Faccini <bruno.faccini@intel.com>
Change-Id: Iea4f5b0486779c1721c90f32538af1a723f76a79
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Tested-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: Minh Diep <minh.diep@intel.com>
Reviewed-on: https://review.whamcloud.com/31197
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
err_ptlrpcd_decref:
if (rc)
ptlrpcd_decref();
-
return rc;
}
obd_cleanup_client_import(obd);
ptlrpc_lprocfs_unregister_obd(obd);
- lprocfs_obd_cleanup(obd);
lprocfs_free_md_stats(obd);
mdc_llog_finish(obd);
RETURN(0);
obd_cleanup_client_import(obd);
ptlrpc_lprocfs_unregister_obd(obd);
- lprocfs_obd_cleanup(obd);
RETURN(0);
}
LASSERT(m->lpd_obd);
ptlrpc_lprocfs_unregister_obd(m->lpd_obd);
- lprocfs_obd_cleanup(m->lpd_obd);
rc = client_obd_cleanup(m->lpd_obd);
LASSERTF(rc == 0, "error %d\n", rc);
obd_fid_fini(osp->opd_obd);
out_proc:
ptlrpc_lprocfs_unregister_obd(obd);
- lprocfs_obd_cleanup(obd);
if (osp->opd_symlink)
lprocfs_remove(&osp->opd_symlink);
client_obd_cleanup(obd);
LASSERT(osp->opd_obd);
ptlrpc_lprocfs_unregister_obd(osp->opd_obd);
- lprocfs_obd_cleanup(osp->opd_obd);
if (osp->opd_connect_mdt) {
struct client_obd *cli = &osp->opd_obd->u.cli;
void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd)
{
+ /* cleanup first to allow concurrent access to device's
+ * stats via debugfs to complete safely
+ */
+ lprocfs_obd_cleanup(obd);
+
if (obd->obd_svc_procroot)
lprocfs_remove(&obd->obd_svc_procroot);