MDD_LOV_OBJ_OID = 8UL,
MDD_CAPA_KEYS_OID = 9UL,
/** \see mdt_mod_init */
- MDT_LAST_RECV_OID = 11UL,
+ 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,
/* These two definitions are obsolete
* OFD_GROUP0_LAST_OID = 20UL,
* OFD_GROUP4K_LAST_OID = 20UL+4096,
MGS_CONFIGS_OID = 4119UL,
OFD_HEALTH_CHECK_OID = 4120UL,
MDD_LOV_OBJ_OSEQ = 4121UL,
+ LFSCK_NAMESPACE_OID = 4122UL,
};
static inline void lu_local_obj_fid(struct lu_fid *fid, __u32 oid)
fid->f_ver = 0;
}
+/* For new FS (>= 2.4), the root FID will be changed to
+ * [FID_SEQ_ROOT:1:0], for existing FS, (upgraded to 2.4),
+ * the root FID will still be IGIF */
+static inline int fid_is_root(const struct lu_fid *fid)
+{
+ return unlikely((fid_seq(fid) == FID_SEQ_ROOT &&
+ fid_oid(fid) == 1));
+}
+
+static inline int fid_is_dot_lustre(const struct lu_fid *fid)
+{
+ return unlikely(fid_seq(fid) == FID_SEQ_DOT_LUSTRE &&
+ fid_oid(fid) == FID_OID_DOT_LUSTRE);
+}
+
+static inline int fid_is_obf(const struct lu_fid *fid)
+{
+ return unlikely(fid_seq(fid) == FID_SEQ_DOT_LUSTRE &&
+ fid_oid(fid) == FID_OID_DOT_LUSTRE_OBF);
+}
+
static inline int fid_is_otable_it(const struct lu_fid *fid)
{
return unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE &&
fid_seq(fid) == FID_SEQ_QUOTA_GLB;
}
+static inline int fid_is_client_mdt_visible(const struct lu_fid *fid)
+{
+ const __u64 seq = fid_seq(fid);
+
+ /* Here, we cannot distinguish whether the normal FID is for OST
+ * object or not. It is caller's duty to check more if needed. */
+ return (!fid_is_last_id(fid) &&
+ (fid_seq_is_norm(seq) || fid_seq_is_igif(seq))) ||
+ fid_is_root(fid) || fid_is_dot_lustre(fid);
+}
+
+static inline int fid_is_client_visible(const struct lu_fid *fid)
+{
+ return fid_is_client_mdt_visible(fid) || fid_is_idif(fid);
+}
+
+static inline int fid_seq_in_fldb(__u64 seq)
+{
+ return fid_seq_is_igif(seq) || fid_seq_is_norm(seq) ||
+ fid_seq_is_root(seq) || fid_seq_is_dot(seq);
+}
+
static inline void lu_last_id_fid(struct lu_fid *fid, __u64 seq)
{
if (fid_seq_is_mdt0(seq)) {
struct lu_fid *fid);
int seq_client_get_seq(const struct lu_env *env, struct lu_client_seq *seq,
seqno_t *seqnr);
-
int seq_site_fini(const struct lu_env *env, struct seq_server_site *ss);
/* Fids common stuff */
int fid_is_local(const struct lu_env *env,
struct lu_site *site, const struct lu_fid *fid);
-int client_fid_init(struct obd_export *exp, enum lu_cli_type type);
-int client_fid_fini(struct obd_export *exp);
+int client_fid_init(struct obd_device *obd, struct obd_export *exp,
+ enum lu_cli_type type);
+int client_fid_fini(struct obd_device *obd);
/* fid locking */
return name;
}
+/**
+ * Build DLM resource name from object id & seq, which will be removed
+ * finally, when we replace ost_id with FID in data stack.
+ *
+ * To keep the compatibility, res[0] = oid, res[1] = seq
+ */
+static inline void ostid_build_res_name(struct ost_id *oid,
+ struct ldlm_res_id *name)
+{
+ memset(name, 0, sizeof *name);
+ name->name[LUSTRE_RES_ID_SEQ_OFF] = oid->oi_id;
+ name->name[LUSTRE_RES_ID_VER_OID_OFF] = oid->oi_seq;
+}
+
+static inline void ostid_res_name_to_id(struct ost_id *oid,
+ struct ldlm_res_id *name)
+{
+ oid->oi_id = name->name[LUSTRE_RES_ID_SEQ_OFF];
+ oid->oi_seq = name->name[LUSTRE_RES_ID_VER_OID_OFF];
+}
+
+/**
+ * Return true if the resource is for the object identified by this id & group.
+ */
+static inline int ostid_res_name_eq(struct ost_id *oid,
+ struct ldlm_res_id *name)
+{
+ return name->name[LUSTRE_RES_ID_SEQ_OFF] == oid->oi_id &&
+ name->name[LUSTRE_RES_ID_VER_OID_OFF] == oid->oi_seq;
+}
/**
* Flatten 128-bit FID values into a 64-bit value for use as an inode number.
RETURN(ino ? ino : fid_oid(fid));
}
+static inline int lu_fid_diff(struct lu_fid *fid1, struct lu_fid *fid2)
+{
+ LASSERTF(fid_seq(fid1) == fid_seq(fid2), "fid1:"DFID", fid2:"DFID"\n",
+ PFID(fid1), PFID(fid2));
+
+ if (fid_is_idif(fid1) && fid_is_idif(fid2))
+ return fid_idif_id(fid1->f_seq, fid1->f_oid, fid1->f_ver) -
+ fid_idif_id(fid2->f_seq, fid2->f_oid, fid2->f_ver);
+
+ return fid_oid(fid1) - fid_oid(fid2);
+}
+
#define LUSTRE_SEQ_SRV_NAME "seq_srv"
#define LUSTRE_SEQ_CTL_NAME "seq_ctl"