struct lfsck_stop stop;
ENTRY;
- if (m->mdt_md_root != NULL) {
- mdt_object_put(env, m->mdt_md_root);
- m->mdt_md_root = NULL;
- }
-
stop.ls_status = LS_PAUSED;
stop.ls_flags = 0;
next->md_ops->mdo_iocontrol(env, next, OBD_IOC_STOP_LFSCK, 0, &stop);
d->ld_obd->obd_namespace = m->mdt_namespace = NULL;
}
+ if (m->mdt_md_root != NULL) {
+ mdt_object_put(env, m->mdt_md_root);
+ m->mdt_md_root = NULL;
+ }
+
mdt_quota_fini(env, m);
cfs_free_nidlist(&m->mdt_squash.rsi_nosquash_nids);
return PTR_ERR(md_root);
spin_lock(&mdt->mdt_lock);
- if (mdt->mdt_md_root != NULL)
- mdt_object_put(info->mti_env, mdt->mdt_md_root);
- mdt->mdt_md_root = md_root;
- spin_unlock(&mdt->mdt_lock);
+ if (mdt->mdt_md_root != NULL) {
+ spin_unlock(&mdt->mdt_lock);
+
+ LASSERTF(mdt->mdt_md_root == md_root,
+ "Different root object ("
+ DFID") instances, %p, %p\n",
+ PFID(&info->mti_tmp_fid1),
+ mdt->mdt_md_root, md_root);
+ LASSERT(atomic_read(
+ &md_root->mot_obj.lo_header->loh_ref) > 1);
+
+ mdt_object_put(info->mti_env, md_root);
+ } else {
+ mdt->mdt_md_root = md_root;
+ spin_unlock(&mdt->mdt_lock);
+ }
}
if (md_root->mot_cache_attr || !mdt_object_remote(md_root))