RETURN(rc);
}
- if (!lod->lod_initialized || !fid_is_norm(fid)) {
+ if (!lod->lod_initialized || (!fid_seq_in_fldb(fid_seq(fid)))) {
LASSERT(lu_site2seq(lod2lu_dev(lod)->ld_site) != NULL);
*tgt = lu_site2seq(lod2lu_dev(lod)->ld_site)->ss_node_id;
RETURN(rc);
extern struct lu_object_operations lod_lu_obj_ops;
extern struct lu_object_operations lod_lu_robj_ops;
extern struct dt_object_operations lod_obj_ops;
+extern struct dt_lock_operations lod_lock_ops;
/* Slab for OSD object allocation */
cfs_mem_cache_t *lod_object_kmem;
lu_obj = lod2lu_obj(lod_obj);
dt_object_init(&lod_obj->ldo_obj, NULL, dev);
lod_obj->ldo_obj.do_ops = &lod_obj_ops;
+ lod_obj->ldo_obj.do_lock_ops = &lod_lock_ops;
if (likely(mds == lu_site2seq(dev->ld_site)->ss_node_id))
lu_obj->lo_ops = &lod_lu_obj_ops;
else
GOTO(out, rc);
}
case LCFG_CLEANUP:
+ case LCFG_PRE_CLEANUP: {
lu_dev_del_linkage(dev->ld_site, dev);
lod_cleanup_desc_tgts(env, lod, &lod->lod_mdt_descs, lcfg);
lod_cleanup_desc_tgts(env, lod, &lod->lod_ost_descs, lcfg);
lod_seq_fini_cli(lod);
+
+ if (lcfg->lcfg_command == LCFG_PRE_CLEANUP)
+ break;
/*
* do cleanup on underlying storage only when
* all OSPs are cleaned up, as they use that OSD as well
if (rc)
CERROR("error in disconnect from storage: %d\n", rc);
break;
-
+ }
default:
CERROR("%s: unknown command %u\n", lod2obd(lod)->obd_name,
lcfg->lcfg_command);