RETURN(rc);
}
+int fid_is_on_ost(struct osd_thread_info *info, struct osd_device *osd,
+ const struct lu_fid *fid)
+{
+ struct lu_seq_range *range = &info->oti_seq_range;
+ int rc;
+ ENTRY;
+
+ if (fid_is_idif(fid) || fid_is_last_id(fid))
+ RETURN(1);
+
+ rc = osd_fld_lookup(info->oti_env, osd, fid, range);
+ if (rc != 0) {
+ CERROR("%s: Can not lookup fld for "DFID"\n",
+ osd2lu_dev(osd)->ld_obd->obd_name, PFID(fid));
+ RETURN(rc);
+ }
+
+ CDEBUG(D_INFO, "fid "DFID" range "DRANGE"\n", PFID(fid),
+ PRANGE(range));
+
+ if (range->lsr_flags == LU_SEQ_RANGE_OST)
+ RETURN(1);
+
+ RETURN(0);
+}
+
int __osd_oi_lookup(struct osd_thread_info *info, struct osd_device *osd,
const struct lu_fid *fid, struct osd_inode_id *id)
{
{
int rc = 0;
- if ((fid_is_idif(fid) && !fid_is_last_id(fid)) ||
+ if ((!fid_is_last_id(fid) && fid_is_on_ost(info, osd, fid)) ||
fid_is_llog(fid)) {
/* old OSD obj id */
/* FIXME: actually for all of the OST object */
if (fid_is_igif(fid) || unlikely(fid_seq(fid) == FID_SEQ_DOT_LUSTRE))
return 0;
- if ((fid_is_idif(fid) && !fid_is_last_id(fid)) ||
+ if ((fid_is_on_ost(info, osd, fid) && !fid_is_last_id(fid)) ||
fid_is_llog(fid))
return osd_obj_map_insert(info, osd, fid, id, th);
LASSERT(fid_seq(fid) != FID_SEQ_LOCAL_FILE);
- if (fid_is_idif(fid) || fid_is_llog(fid))
+ if (fid_is_on_ost(info, osd, fid) || fid_is_llog(fid))
return osd_obj_map_delete(info, osd, fid, th);
fid_cpu_to_be(oi_fid, fid);