__u16 flags = 0;
ENTRY;
+ if (lfsck->ml_it_obj == NULL)
+ RETURN(-ENOTSUPP);
+
cfs_mutex_lock(&lfsck->ml_mutex);
cfs_spin_lock(&lfsck->ml_lock);
if (thread_is_running(thread)) {
rc = obj->do_ops->do_index_try(env, obj, &dt_otable_features);
if (rc != 0) {
lu_object_put(env, &obj->do_lu);
+ if (rc == -ENOTSUPP) {
+ CERROR("%s: Lustre LFSCK unsupported on this device.\n",
+ mdd->mdd_obd_dev->obd_name);
+ rc = 0;
+ }
return rc;
}
struct osd_object *obj = osd_dt_obj(dt);
ENTRY;
- LASSERT(obj->oo_db != NULL);
+ LASSERT(dt_object_exists(dt));
/*
* XXX: implement support for fixed-size keys sorted with natural
if (feat->dif_flags & DT_IND_RANGE)
RETURN(-ERANGE);
+ if (unlikely(feat == &dt_otable_features))
+ /* do not support oi scrub yet. */
+ RETURN(-ENOTSUPP);
+
+ LASSERT(obj->oo_db != NULL);
if (likely(feat == &dt_directory_features)) {
if (udmu_object_is_zap(obj->oo_db))
dt->do_index_ops = &osd_dir_ops;
static struct dt_object_operations osd_obj_ops;
static struct lu_object_operations osd_lu_obj_ops;
extern struct dt_body_operations osd_body_ops;
+static struct dt_object_operations osd_obj_otable_it_ops;
extern cfs_mem_cache_t *osd_object_kmem;
osd->od_svname, PFID(lu_object_fid(l)), oid, rc);
}
} else if (rc == -ENOENT) {
+ if (fid_is_otable_it(&l->lo_header->loh_fid)) {
+ obj->oo_dt.do_ops = &osd_obj_otable_it_ops;
+ /* LFSCK iterator object is special without inode */
+ l->lo_header->loh_attr |= LOHA_EXISTS;
+ }
rc = 0;
}
LASSERT(osd_invariant(obj));
.loo_object_invariant = osd_object_invariant,
};
+static int osd_otable_it_attr_get(const struct lu_env *env,
+ struct dt_object *dt,
+ struct lu_attr *attr,
+ struct lustre_capa *capa)
+{
+ attr->la_valid = 0;
+ return 0;
+}
+
+static struct dt_object_operations osd_obj_otable_it_ops = {
+ .do_attr_get = osd_otable_it_attr_get,
+ .do_index_try = osd_index_try,
+};
+