* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, 2013, Intel Corporation.
+ * Copyright (c) 2012, 2014, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
* Author: Nikita Danilov <nikita@clusterfs.com>
*/
-#define DEBUG_SUBSYSTEM S_MDS
+#define DEBUG_SUBSYSTEM S_OSD
#include <linux/module.h>
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,
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));