if (IS_ERR(inode))
RETURN(PTR_ERR(inode));
- ldiskfs_set_inode_state(inode, LDISKFS_STATE_LUSTRE_NO_OI);
/* 'What the @fid is' is not imporatant, because these objects
* have no OI mappings, and only are visible inside the OSD.*/
lu_igif_build(&info->oti_fid, inode->i_ino, inode->i_generation);
/* if previous failed then try found single OI from old filesystem */
rc = osd_oi_open(info, osd, OSD_OI_NAME_BASE, &oi[0], false);
if (rc == 0) { /* found single OI from old filesystem */
+ ldiskfs_clear_bit(0, sf->sf_oi_bitmap);
if (sf->sf_success_count == 0)
/* XXX: There is one corner case that if the OI_scrub
* file crashed or lost and we regard it upgrade,
rc = osd_fld_lookup(info->oti_env, osd, fid_seq(fid), range);
if (rc != 0) {
- CERROR("%s: "DFID" lookup failed: rc = %d\n", osd_name(osd),
- PFID(fid), rc);
- RETURN(rc);
+ if (rc != -ENOENT)
+ CERROR("%s: lookup FLD "DFID": rc = %d\n",
+ osd_name(osd), PFID(fid), rc);
+ RETURN(0);
}
if (fld_range_is_ost(range))
if (fid_is_on_ost(info, osd, fid, flags) || fid_is_llog(fid))
return osd_obj_map_lookup(info, osd, fid, id);
- if (fid_is_fs_root(fid)) {
- osd_id_gen(id, osd_sb(osd)->s_root->d_inode->i_ino,
- osd_sb(osd)->s_root->d_inode->i_generation);
- return 0;
- }
- if (unlikely(fid_is_acct(fid)))
- return osd_acct_obj_lookup(info, osd, fid, id);
+ if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE)) {
+ int rc;
+ if (fid_is_fs_root(fid)) {
+ osd_id_gen(id, osd_sb(osd)->s_root->d_inode->i_ino,
+ osd_sb(osd)->s_root->d_inode->i_generation);
+ return 0;
+ }
+ if (unlikely(fid_is_acct(fid)))
+ return osd_acct_obj_lookup(info, osd, fid, id);
+
+ /* For other special FIDs, try OI first, then do spec lookup */
+ rc = __osd_oi_lookup(info, osd, fid, id);
+ if (rc == -ENOENT)
+ return osd_obj_spec_lookup(info, osd, fid, id);
+ return rc;
+ }
if (!osd->od_igif_inoi && fid_is_igif(fid)) {
osd_id_gen(id, lu_igif_ino(fid), lu_igif_gen(fid));