Whamcloud - gitweb
LU-4972 lfsck: skip .lustre and children for namespace check
[fs/lustre-release.git] / lustre / include / lustre_fid.h
index 8d221e8..769dee5 100644 (file)
@@ -166,6 +166,7 @@ extern const struct lu_seq_range LUSTRE_SEQ_SPACE_RANGE;
 extern const struct lu_seq_range LUSTRE_SEQ_ZERO_RANGE;
 extern const struct lu_fid LUSTRE_BFL_FID;
 extern const struct lu_fid LU_OBF_FID;
+extern const struct lu_fid LU_LPF_FID;
 extern const struct lu_fid LU_DOT_LUSTRE_FID;
 
 enum {
@@ -233,6 +234,7 @@ enum local_oid {
        MDD_LOV_OBJ_OSEQ        = 4121UL,
        LFSCK_NAMESPACE_OID     = 4122UL,
        REMOTE_PARENT_DIR_OID   = 4123UL,
+       SLAVE_LLOG_CATALOGS_OID = 4124UL,
 };
 
 static inline void lu_local_obj_fid(struct lu_fid *fid, __u32 oid)
@@ -258,6 +260,11 @@ static inline int fid_is_root(const struct lu_fid *fid)
                         fid_oid(fid) == 1));
 }
 
+static inline int fid_seq_is_dot_lustre(__u64 seq)
+{
+       return unlikely(seq == FID_SEQ_DOT_LUSTRE);
+}
+
 static inline int fid_is_dot_lustre(const struct lu_fid *fid)
 {
        return unlikely(fid_seq(fid) == FID_SEQ_DOT_LUSTRE &&
@@ -289,6 +296,11 @@ static inline int fid_is_quota(const struct lu_fid *fid)
               fid_seq(fid) == FID_SEQ_QUOTA_GLB;
 }
 
+static inline int fid_is_name_llog(const struct lu_fid *fid)
+{
+       return fid_seq(fid) == FID_SEQ_LLOG_NAME;
+}
+
 static inline int fid_is_namespace_visible(const struct lu_fid *fid)
 {
        const __u64 seq = fid_seq(fid);
@@ -297,7 +309,7 @@ static inline int fid_is_namespace_visible(const struct lu_fid *fid)
         * 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);
+              fid_is_root(fid) || fid_seq_is_dot_lustre(seq);
 }
 
 static inline int fid_seq_in_fldb(__u64 seq)
@@ -306,10 +318,10 @@ static inline int fid_seq_in_fldb(__u64 seq)
               fid_seq_is_root(seq) || fid_seq_is_dot(seq);
 }
 
-static inline void lu_last_id_fid(struct lu_fid *fid, __u64 seq)
+static inline void lu_last_id_fid(struct lu_fid *fid, __u64 seq, __u32 ost_idx)
 {
        if (fid_seq_is_mdt0(seq)) {
-               fid->f_seq = fid_idif_seq(0, 0);
+               fid->f_seq = fid_idif_seq(0, ost_idx);
        } else {
                LASSERTF(fid_seq_is_norm(seq) || fid_seq_is_echo(seq) ||
                         fid_seq_is_idif(seq), LPX64"\n", seq);
@@ -319,6 +331,12 @@ static inline void lu_last_id_fid(struct lu_fid *fid, __u64 seq)
        fid->f_ver = 0;
 }
 
+static inline bool fid_is_md_operative(const struct lu_fid *fid)
+{
+       return fid_is_mdt0(fid) || fid_is_igif(fid) ||
+              fid_is_norm(fid) || fid_is_root(fid);
+}
+
 /* seq client type */
 enum lu_cli_type {
        LUSTRE_SEQ_METADATA = 1,
@@ -433,12 +451,12 @@ struct lu_server_seq {
 
 /* Server methods */
 
-int seq_server_init(struct lu_server_seq *seq,
+int seq_server_init(const struct lu_env *env,
+                   struct lu_server_seq *seq,
                    struct dt_device *dev,
                    const char *prefix,
                    enum lu_mgr_type type,
-                   struct seq_server_site *ss,
-                   const struct lu_env *env);
+                   struct seq_server_site *ss);
 
 void seq_server_fini(struct lu_server_seq *seq,
                      const struct lu_env *env);
@@ -451,9 +469,9 @@ int seq_server_alloc_meta(struct lu_server_seq *seq,
                           struct lu_seq_range *out,
                           const struct lu_env *env);
 
-int seq_server_set_cli(struct lu_server_seq *seq,
-                       struct lu_client_seq *cli,
-                       const struct lu_env *env);
+int seq_server_set_cli(const struct lu_env *env,
+                      struct lu_server_seq *seq,
+                      struct lu_client_seq *cli);
 
 /* Client methods */
 int seq_client_init(struct lu_client_seq *seq,
@@ -491,14 +509,12 @@ struct ldlm_namespace;
  * but was moved into name[1] along with the OID to avoid consuming the
  * renaming name[2,3] fields that need to be used for the quota identifier.
  */
-static inline struct ldlm_res_id *
+static inline void
 fid_build_reg_res_name(const struct lu_fid *fid, struct ldlm_res_id *res)
 {
        memset(res, 0, sizeof(*res));
        res->name[LUSTRE_RES_ID_SEQ_OFF] = fid_seq(fid);
        res->name[LUSTRE_RES_ID_VER_OID_OFF] = fid_ver_oid(fid);
-
-       return res;
 }
 
 /*
@@ -514,29 +530,25 @@ static inline int fid_res_name_eq(const struct lu_fid *fid,
 /*
  * Extract FID from LDLM resource. Reverse of fid_build_reg_res_name().
  */
-static inline struct lu_fid *
+static inline void
 fid_extract_from_res_name(struct lu_fid *fid, const struct ldlm_res_id *res)
 {
        fid->f_seq = res->name[LUSTRE_RES_ID_SEQ_OFF];
        fid->f_oid = (__u32)(res->name[LUSTRE_RES_ID_VER_OID_OFF]);
        fid->f_ver = (__u32)(res->name[LUSTRE_RES_ID_VER_OID_OFF] >> 32);
        LASSERT(fid_res_name_eq(fid, res));
-
-       return fid;
 }
 
 /*
  * Build (DLM) resource identifier from global quota FID and quota ID.
  */
-static inline struct ldlm_res_id *
+static inline void
 fid_build_quota_res_name(const struct lu_fid *glb_fid, union lquota_id *qid,
                      struct ldlm_res_id *res)
 {
        fid_build_reg_res_name(glb_fid, res);
        res->name[LUSTRE_RES_ID_QUOTA_SEQ_OFF] = fid_seq(&qid->qid_fid);
        res->name[LUSTRE_RES_ID_QUOTA_VER_OID_OFF] = fid_ver_oid(&qid->qid_fid);
-
-       return res;
 }
 
 /*
@@ -553,14 +565,12 @@ static inline void fid_extract_from_quota_res(struct lu_fid *glb_fid,
                (__u32)(res->name[LUSTRE_RES_ID_QUOTA_VER_OID_OFF] >> 32);
 }
 
-static inline struct ldlm_res_id *
+static inline void
 fid_build_pdo_res_name(const struct lu_fid *fid, unsigned int hash,
                       struct ldlm_res_id *res)
 {
        fid_build_reg_res_name(fid, res);
        res->name[LUSTRE_RES_ID_HSH_OFF] = hash;
-
-       return res;
 }
 
 /**
@@ -581,7 +591,7 @@ fid_build_pdo_res_name(const struct lu_fid *fid, unsigned int hash,
  *    res will be built from normal FID directly, i.e. res[0] = f_seq,
  *    res[1] = f_oid + f_ver.
  */
-static inline void ostid_build_res_name(struct ost_id *oi,
+static inline void ostid_build_res_name(const struct ost_id *oi,
                                        struct ldlm_res_id *name)
 {
        memset(name, 0, sizeof *name);
@@ -593,24 +603,11 @@ static inline void ostid_build_res_name(struct ost_id *oi,
        }
 }
 
-static inline void ostid_res_name_to_id(struct ost_id *oi,
-                                       struct ldlm_res_id *name)
-{
-       if (fid_seq_is_mdt0(name->name[LUSTRE_RES_ID_SEQ_OFF])) {
-               /* old resid */
-               ostid_set_seq(oi, name->name[LUSTRE_RES_ID_VER_OID_OFF]);
-               ostid_set_id(oi, name->name[LUSTRE_RES_ID_SEQ_OFF]);
-       } else {
-               /* new resid */
-               fid_extract_from_res_name(&oi->oi_fid, name);
-       }
-}
-
 /**
  * Return true if the resource is for the object identified by this id & group.
  */
-static inline int ostid_res_name_eq(struct ost_id *oi,
-                                   struct ldlm_res_id *name)
+static inline bool ostid_res_name_eq(const struct ost_id *oi,
+                                    const struct ldlm_res_id *name)
 {
        /* Note: it is just a trick here to save some effort, probably the
         * correct way would be turn them into the FID and compare */
@@ -639,14 +636,15 @@ static inline void ost_fid_build_resid(const struct lu_fid *fid,
 }
 
 static inline void ost_fid_from_resid(struct lu_fid *fid,
-                                     const struct ldlm_res_id *name)
+                                     const struct ldlm_res_id *name,
+                                     int ost_idx)
 {
        if (fid_seq_is_mdt0(name->name[LUSTRE_RES_ID_VER_OID_OFF])) {
                /* old resid */
                struct ost_id oi;
                ostid_set_seq(&oi, name->name[LUSTRE_RES_ID_VER_OID_OFF]);
                ostid_set_id(&oi, name->name[LUSTRE_RES_ID_SEQ_OFF]);
-               ostid_to_fid(fid, &oi, 0);
+               ostid_to_fid(fid, &oi, ost_idx);
        } else {
                /* new resid */
                fid_extract_from_res_name(fid, name);
@@ -683,9 +681,9 @@ static inline __u64 fid_flatten(const struct lu_fid *fid)
 
 static inline __u32 fid_hash(const struct lu_fid *f, int bits)
 {
-        /* all objects with same id and different versions will belong to same
-         * collisions list. */
-        return cfs_hash_long(fid_flatten(f), bits);
+       /* all objects with same id and different versions will belong to same
+        * collisions list. */
+       return hash_long(fid_flatten(f), bits);
 }
 
 /**
@@ -714,7 +712,8 @@ static inline __u32 fid_flatten32(const struct lu_fid *fid)
         RETURN(ino ? ino : fid_oid(fid));
 }
 
-static inline int lu_fid_diff(struct lu_fid *fid1, struct lu_fid *fid2)
+static inline int
+lu_fid_diff(const struct lu_fid *fid1, const struct lu_fid *fid2)
 {
        LASSERTF(fid_seq(fid1) == fid_seq(fid2), "fid1:"DFID", fid2:"DFID"\n",
                 PFID(fid1), PFID(fid2));
@@ -730,7 +729,8 @@ static inline int lu_fid_diff(struct lu_fid *fid1, struct lu_fid *fid2)
 #define LUSTRE_SEQ_CTL_NAME "seq_ctl"
 
 /* Range common stuff */
-static inline void range_cpu_to_le(struct lu_seq_range *dst, const struct lu_seq_range *src)
+static inline void
+range_cpu_to_le(struct lu_seq_range *dst, const struct lu_seq_range *src)
 {
         dst->lsr_start = cpu_to_le64(src->lsr_start);
         dst->lsr_end = cpu_to_le64(src->lsr_end);
@@ -738,7 +738,8 @@ static inline void range_cpu_to_le(struct lu_seq_range *dst, const struct lu_seq
         dst->lsr_flags = cpu_to_le32(src->lsr_flags);
 }
 
-static inline void range_le_to_cpu(struct lu_seq_range *dst, const struct lu_seq_range *src)
+static inline void
+range_le_to_cpu(struct lu_seq_range *dst, const struct lu_seq_range *src)
 {
         dst->lsr_start = le64_to_cpu(src->lsr_start);
         dst->lsr_end = le64_to_cpu(src->lsr_end);
@@ -746,7 +747,8 @@ static inline void range_le_to_cpu(struct lu_seq_range *dst, const struct lu_seq
         dst->lsr_flags = le32_to_cpu(src->lsr_flags);
 }
 
-static inline void range_cpu_to_be(struct lu_seq_range *dst, const struct lu_seq_range *src)
+static inline void
+range_cpu_to_be(struct lu_seq_range *dst, const struct lu_seq_range *src)
 {
         dst->lsr_start = cpu_to_be64(src->lsr_start);
         dst->lsr_end = cpu_to_be64(src->lsr_end);
@@ -754,7 +756,8 @@ static inline void range_cpu_to_be(struct lu_seq_range *dst, const struct lu_seq
         dst->lsr_flags = cpu_to_be32(src->lsr_flags);
 }
 
-static inline void range_be_to_cpu(struct lu_seq_range *dst, const struct lu_seq_range *src)
+static inline void
+range_be_to_cpu(struct lu_seq_range *dst, const struct lu_seq_range *src)
 {
         dst->lsr_start = be64_to_cpu(src->lsr_start);
         dst->lsr_end = be64_to_cpu(src->lsr_end);
@@ -762,6 +765,27 @@ static inline void range_be_to_cpu(struct lu_seq_range *dst, const struct lu_seq
         dst->lsr_flags = be32_to_cpu(src->lsr_flags);
 }
 
+static inline void range_array_cpu_to_le(struct lu_seq_range_array *dst,
+                                        const struct lu_seq_range_array *src)
+{
+       int i;
+
+       for (i = 0; i < src->lsra_count; i++)
+               range_cpu_to_le(&dst->lsra_lsr[i], &src->lsra_lsr[i]);
+
+       dst->lsra_count = cpu_to_le32(src->lsra_count);
+}
+
+static inline void range_array_le_to_cpu(struct lu_seq_range_array *dst,
+                                        const struct lu_seq_range_array *src)
+{
+       int i;
+
+       dst->lsra_count = le32_to_cpu(src->lsra_count);
+       for (i = 0; i < dst->lsra_count; i++)
+               range_le_to_cpu(&dst->lsra_lsr[i], &src->lsra_lsr[i]);
+}
+
 /** @} fid */
 
 #endif /* __LUSTRE_FID_H */