- rc = dt_obj->do_index_ops->dio_lookup(env, dt_obj, rec,
- fld_key(env, seq), BYPASS_CAPA);
- if (rc == 0)
- *mds = be64_to_cpu(*(__u64 *)rec);
+ if (fld->lsf_no_range_lookup) {
+ /* Stub for underlying FS which can't lookup ranges */
+ range->lsr_start = 0;
+ range->lsr_end = ~0;
+ range->lsr_index = 0;
+ range->lsr_flags = LU_SEQ_RANGE_MDT;
+
+ range_cpu_to_be(range, range);
+ return 0;
+ }
+
+ info = lu_context_key_get(&env->le_ctx, &fld_thread_key);
+ fld_rec = &info->fti_rec;
+
+ rc = dt_obj->do_index_ops->dio_lookup(env, dt_obj,
+ (struct dt_rec*) fld_rec,
+ key, BYPASS_CAPA);
+
+ if (rc >= 0) {
+ range_be_to_cpu(fld_rec, fld_rec);
+ *range = *fld_rec;
+ if (range_within(range, seq))
+ rc = 0;
+ else
+ rc = -ENOENT;
+ }
+
+ CDEBUG(D_INFO, "%s: lookup seq = "LPX64" range : "DRANGE" rc = %d\n",
+ fld->lsf_name, seq, PRANGE(range), rc);
+
+ RETURN(rc);
+}
+
+static int fld_insert_igif_fld(struct lu_server_fld *fld,
+ const struct lu_env *env)
+{
+ struct thandle *th;
+ int rc;
+ ENTRY;
+
+ /* FLD_TXN_INDEX_INSERT_CREDITS */
+ th = fld_trans_create(fld, env);
+ if (IS_ERR(th))
+ RETURN(PTR_ERR(th));
+ rc = fld_declare_index_create(fld, env, &IGIF_FLD_RANGE, th);
+ if (rc) {
+ fld_trans_stop(fld, env, th);
+ RETURN(rc);
+ }
+ rc = fld_trans_start(fld, env, th);
+ if (rc) {
+ fld_trans_stop(fld, env, th);
+ RETURN(rc);
+ }
+
+ rc = fld_index_create(fld, env, &IGIF_FLD_RANGE, th);
+ fld_trans_stop(fld, env, th);
+ if (rc == -EEXIST)
+ rc = 0;