(seq >= FID_SEQ_OST_MDT1 && seq <= FID_SEQ_OST_MAX);
};
+static inline int fid_seq_is_echo(obd_seq seq)
+{
+ return (seq == FID_SEQ_ECHO);
+}
+
+static inline int fid_is_echo(const struct lu_fid *fid)
+{
+ return fid_seq_is_echo(fid_seq(fid));
+}
+
+static inline int fid_seq_is_llog(obd_seq seq)
+{
+ return (seq == FID_SEQ_LLOG);
+}
+
+static inline int fid_is_llog(const struct lu_fid *fid)
+{
+ return fid_seq_is_llog(fid_seq(fid));
+}
+
static inline int fid_seq_is_rsvd(const __u64 seq)
{
return (seq > FID_SEQ_OST_MDT0 && seq <= FID_SEQ_RSVD);
return ostid->oi_id;
}
+/* Check whether the fid is for LAST_ID */
+static inline int fid_is_last_id(const struct lu_fid *fid)
+{
+ return (fid_is_idif(fid) || fid_is_norm(fid) || fid_is_echo(fid)) &&
+ fid_oid(fid) == 0;
+}
+
/**
* Get inode number from a igif.
* \param fid a igif to get inode number from.
static inline int fid_is_sane(const struct lu_fid *fid)
{
- return
- fid != NULL &&
- ((fid_seq(fid) >= FID_SEQ_START && fid_oid(fid) != 0
- && fid_ver(fid) == 0) ||
- fid_is_igif(fid) || fid_seq_is_rsvd(fid_seq(fid)));
+ return fid != NULL &&
+ ((fid_seq(fid) >= FID_SEQ_START && fid_ver(fid) == 0) ||
+ fid_is_igif(fid) || fid_is_idif(fid) ||
+ fid_seq_is_rsvd(fid_seq(fid)));
}
static inline int fid_is_zero(const struct lu_fid *fid)
/** special OID for local objects */
enum local_oid {
- /** \see fld_mod_init */
- FLD_INDEX_OID = 3UL,
- /** \see fid_mod_init */
- FID_SEQ_CTL_OID = 4UL,
- FID_SEQ_SRV_OID = 5UL,
- /** \see mdd_mod_init */
- MDD_ROOT_INDEX_OID = 6UL,
- MDD_ORPHAN_OID = 7UL,
- MDD_LOV_OBJ_OID = 8UL,
- MDD_CAPA_KEYS_OID = 9UL,
- /** \see mdt_mod_init */
- MDT_LAST_RECV_OID = 11UL,
- OSD_FS_ROOT_OID = 13UL,
- ACCT_USER_OID = 15UL,
- ACCT_GROUP_OID = 16UL,
+ /** \see fld_mod_init */
+ FLD_INDEX_OID = 3UL,
+ /** \see fid_mod_init */
+ FID_SEQ_CTL_OID = 4UL,
+ FID_SEQ_SRV_OID = 5UL,
+ /** \see mdd_mod_init */
+ MDD_ROOT_INDEX_OID = 6UL,
+ MDD_ORPHAN_OID = 7UL,
+ MDD_LOV_OBJ_OID = 8UL,
+ MDD_CAPA_KEYS_OID = 9UL,
+ /** \see mdt_mod_init */
+ MDT_LAST_RECV_OID = 11UL,
+ OSD_FS_ROOT_OID = 13UL,
+ ACCT_USER_OID = 15UL,
+ ACCT_GROUP_OID = 16UL,
LFSCK_BOOKMARK_OID = 17UL,
OTABLE_IT_OID = 18UL,
- OFD_LAST_RECV_OID = 19UL,
- OFD_GROUP0_LAST_OID = 20UL,
- OFD_GROUP4K_LAST_OID = 20UL+4096,
- OFD_LAST_GROUP_OID = 4117UL,
- LLOG_CATALOGS_OID = 4118UL,
- MGS_CONFIGS_OID = 4119UL,
- OFD_HEALTH_CHECK_OID = 4120UL,
+ OFD_LAST_RECV_OID = 19UL,
+ /* These two definitions are obsolete
+ * OFD_GROUP0_LAST_OID = 20UL,
+ * OFD_GROUP4K_LAST_OID = 20UL+4096,
+ */
+ OFD_LAST_GROUP_OID = 4117UL,
+ LLOG_CATALOGS_OID = 4118UL,
+ MGS_CONFIGS_OID = 4119UL,
+ OFD_HEALTH_CHECK_OID = 4120UL,
MDD_LOV_OBJ_OSEQ = 4121UL,
};
fid_seq(fid) == FID_SEQ_QUOTA_GLB;
}
+static inline void lu_last_id_fid(struct lu_fid *fid, __u64 seq)
+{
+ if (fid_seq_is_mdt0(seq)) {
+ fid->f_seq = fid_idif_seq(0, 0);
+ } else {
+ LASSERTF(fid_seq_is_norm(seq) || fid_seq_is_echo(seq) ||
+ fid_seq_is_llog(seq) || fid_seq_is_idif(seq),
+ LPX64"\n", seq);
+ fid->f_seq = seq;
+ }
+ fid->f_oid = 0;
+ fid->f_ver = 0;
+}
+
enum lu_mgr_type {
LUSTRE_SEQ_SERVER,
LUSTRE_SEQ_CONTROLLER
if (oseq == NULL)
RETURN(ERR_PTR(-ENOMEM));
- lu_local_obj_fid(&info->fti_fid, OFD_GROUP0_LAST_OID + seq);
-
+ lu_last_id_fid(&info->fti_fid, seq);
memset(&info->fti_attr, 0, sizeof(info->fti_attr));
info->fti_attr.la_valid = LA_MODE;
info->fti_attr.la_mode = S_IFREG | S_IRUGO | S_IWUSR;
int rc = 0;
ENTRY;
- if (fid_oid(fid) >= OFD_GROUP0_LAST_OID &&
- fid_oid(fid) < OFD_GROUP4K_LAST_OID) {
+ if (fid_is_last_id(fid)) {
struct osd_obj_seq *osd_seq;
+
/* on creation of LAST_ID we create O/<seq> hierarchy */
LASSERT(map);
osd_seq = osd_seq_load(osd, fid_seq(fid));
int rc = -ENOENT;
ENTRY;
- if (fid_oid(fid) >= OFD_GROUP0_LAST_OID &&
- fid_oid(fid) < OFD_GROUP4K_LAST_OID) {
+ if (fid_is_last_id(fid)) {
struct osd_obj_seq *osd_seq;
osd_seq = osd_seq_load(osd, fid_seq(fid));
const struct lu_fid *fid)
{
LASSERTF(!fid_is_idif(fid), DFID"\n", PFID(fid));
+ LASSERTF(!fid_is_last_id(fid), DFID"\n", PFID(fid));
LASSERTF(!fid_is_igif(fid), DFID"\n", PFID(fid));
LASSERT(osd->od_oi_table != NULL && osd->od_oi_count >= 1);
/* It can work even od_oi_count equals to 1 although it's unexpected,
}
int osd_oi_lookup(struct osd_thread_info *info, struct osd_device *osd,
- const struct lu_fid *fid, struct osd_inode_id *id)
+ const struct lu_fid *fid, struct osd_inode_id *id)
{
- int rc = 0;
+ int rc = 0;
- if (fid_is_idif(fid) || fid_seq(fid) == FID_SEQ_LLOG) {
- /* old OSD obj id */
+ if ((fid_is_idif(fid) && !fid_is_last_id(fid)) ||
+ fid_is_llog(fid)) {
+ /* old OSD obj id */
/* FIXME: actually for all of the OST object */
rc = osd_obj_map_lookup(info, osd, fid, id);
- } else if (fid_is_igif(fid)) {
- lu_igif_to_id(fid, id);
- } else if (fid_is_fs_root(fid)) {
+ } else if (fid_is_igif(fid)) {
+ lu_igif_to_id(fid, id);
+ } else 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);
} else {
if (unlikely(fid_is_acct(fid)))
return osd_acct_obj_lookup(info, osd, fid, id);
-
- if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE))
+ else if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE) ||
+ fid_is_last_id(fid))
return osd_obj_spec_lookup(info, osd, fid, id);
rc = __osd_oi_lookup(info, osd, fid, id);
- }
- return rc;
+ }
+ return rc;
}
static int osd_oi_iam_insert(struct osd_thread_info *oti, struct osd_oi *oi,
if (fid_is_igif(fid) || unlikely(fid_seq(fid) == FID_SEQ_DOT_LUSTRE))
return 0;
- if (fid_is_idif(fid) || fid_seq(fid) == FID_SEQ_LLOG)
+ if ((fid_is_idif(fid) && !fid_is_last_id(fid)) ||
+ fid_is_llog(fid))
return osd_obj_map_insert(info, osd, fid, id, th);
/* Server mount should not depends on OI files */
- if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE))
+ if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE) ||
+ fid_is_last_id(fid))
return osd_obj_spec_insert(info, osd, fid, id, th);
fid_cpu_to_be(oi_fid, fid);
{
struct lu_fid *oi_fid = &info->oti_fid2;
- if (fid_is_igif(fid))
+ if (fid_is_igif(fid) || fid_is_last_id(fid))
return 0;
LASSERT(fid_seq(fid) != FID_SEQ_LOCAL_FILE);
- if (fid_is_idif(fid) || fid_seq(fid) == FID_SEQ_LLOG)
+ if (fid_is_idif(fid) || fid_is_llog(fid))
return osd_obj_map_delete(info, osd, fid, th);
fid_cpu_to_be(oi_fid, fid);
{ MDD_LOV_OBJ_OID, LOV_OBJID },
{ MDT_LAST_RECV_OID, LAST_RCVD },
{ OFD_HEALTH_CHECK_OID, HEALTH_CHECK },
- { OFD_GROUP0_LAST_OID, "LAST_ID" },
{ ACCT_USER_OID, "acct_usr_inode" },
{ ACCT_GROUP_OID, "acct_grp_inode" },
{ MDD_ROOT_INDEX_OID, NULL },
if (fid_is_idif(fid)) {
zapid = osd_get_idx_for_ost_obj(env, osd, fid, buf);
+ } else if (fid_is_last_id(fid)) {
+ zapid = osd->od_ost_compat_grp0;
} else if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE)) {
/* special objects with fixed known fids get their name */
char *name = oid2name(fid_oid(fid));
if (name) {
zapid = osd->od_root;
strcpy(buf, name);
- if (fid_oid(fid) == OFD_GROUP0_LAST_OID)
- zapid = osd->od_ost_compat_grp0;
- else if (fid_is_acct(fid))
+ if (fid_is_acct(fid))
zapid = MASTER_NODE_OBJ;
} else {
zapid = osd_get_idx_for_fid(osd, fid, buf);