mdd_changelog_fini(env, m);
orph_index_fini(env, m);
mdd_dot_lustre_cleanup(env, m);
- nm_config_file_deregister_tgt(env, mdd2obd_dev(m)->u.obt.obt_nodemap_config_file);
+ if (mdd2obd_dev(m)->u.obt.obt_nodemap_config_file) {
+ nm_config_file_deregister_tgt(env,
+ mdd2obd_dev(m)->u.obt.obt_nodemap_config_file);
+ mdd2obd_dev(m)->u.obt.obt_nodemap_config_file = NULL;
+ }
if (m->mdd_los != NULL) {
local_oid_storage_fini(env, m->mdd_los);
m->mdd_los = NULL;
next = &mdd->mdd_child->dd_lu_dev;
/* XXX: orphans handling. */
- mdd_orphan_cleanup(env, mdd);
+ if (!mdd->mdd_bottom->dd_rdonly)
+ mdd_orphan_cleanup(env, mdd);
rc = next->ld_ops->ldo_recovery_complete(env, next);
RETURN(rc);
struct mdd_device *mdd = lu2mdd_dev(cdev);
struct lu_device *next = &mdd->mdd_child->dd_lu_dev;
struct nm_config_file *nodemap_config;
+ struct obd_device_target *obt = &mdd2obd_dev(mdd)->u.obt;
struct lu_fid fid;
int rc;
nodemap_config = nm_config_file_register_tgt(env, mdd->mdd_bottom,
mdd->mdd_los);
- if (IS_ERR(nodemap_config))
- GOTO(out_hsm, rc = PTR_ERR(nodemap_config));
-
- mdd2obd_dev(mdd)->u.obt.obt_nodemap_config_file = nodemap_config;
+ if (IS_ERR(nodemap_config)) {
+ rc = PTR_ERR(nodemap_config);
+ if (rc != -EROFS)
+ GOTO(out_hsm, rc);
+ } else {
+ obt->obt_nodemap_config_file = nodemap_config;
+ }
rc = lfsck_register(env, mdd->mdd_bottom, mdd->mdd_child,
mdd2obd_dev(mdd), mdd_lfsck_out_notify,
out_lfsck:
lfsck_degister(env, mdd->mdd_bottom);
out_nodemap:
- nm_config_file_deregister_tgt(env, mdd2obd_dev(mdd)->u.obt.obt_nodemap_config_file);
- mdd2obd_dev(mdd)->u.obt.obt_nodemap_config_file = NULL;
+ nm_config_file_deregister_tgt(env, obt->obt_nodemap_config_file);
+ obt->obt_nodemap_config_file = NULL;
out_hsm:
mdd_hsm_actions_llog_fini(env, mdd);
out_changelog: