Whamcloud - gitweb
LU-1445 fid: start ptlrpc service for OST FID
[fs/lustre-release.git] / lustre / include / lustre_fid.h
index 4efa9ed..08bf3de 100644 (file)
 #include <lustre/lustre_idl.h>
 #include <lustre_req_layout.h>
 #include <lustre_mdt.h>
+#include <obd.h>
 
 
 struct lu_site;
@@ -169,26 +170,31 @@ extern const struct lu_fid LU_OBF_FID;
 extern const struct lu_fid LU_DOT_LUSTRE_FID;
 
 enum {
-        /*
-         * This is how may FIDs may be allocated in one sequence(128k)
-         */
-        LUSTRE_SEQ_MAX_WIDTH = 0x0000000000020000ULL,
+       /*
+        * This is how may metadata FIDs may be allocated in one sequence(128k)
+        */
+       LUSTRE_METADATA_SEQ_MAX_WIDTH = 0x0000000000020000ULL,
 
-        /*
-         * How many sequences to allocate to a client at once.
-         */
-        LUSTRE_SEQ_META_WIDTH = 0x0000000000000001ULL,
+       /*
+        * This is how many data FIDs could be allocated in one sequence(4B - 1)
+        */
+       LUSTRE_DATA_SEQ_MAX_WIDTH = 0x00000000FFFFFFFFULL,
 
-         /*
-          * seq allocation pool size.
-          */
-        LUSTRE_SEQ_BATCH_WIDTH = LUSTRE_SEQ_META_WIDTH * 1000,
+       /*
+        * How many sequences to allocate to a client at once.
+        */
+       LUSTRE_SEQ_META_WIDTH = 0x0000000000000001ULL,
 
-        /*
-         * This is how many sequences may be in one super-sequence allocated to
-         * MDTs.
-         */
-        LUSTRE_SEQ_SUPER_WIDTH = ((1ULL << 30ULL) * LUSTRE_SEQ_META_WIDTH)
+       /*
+        * seq allocation pool size.
+        */
+       LUSTRE_SEQ_BATCH_WIDTH = LUSTRE_SEQ_META_WIDTH * 1000,
+
+       /*
+        * This is how many sequences may be in one super-sequence allocated to
+        * MDTs.
+        */
+       LUSTRE_SEQ_SUPER_WIDTH = ((1ULL << 30ULL) * LUSTRE_SEQ_META_WIDTH)
 };
 
 enum {
@@ -268,8 +274,7 @@ static inline void lu_last_id_fid(struct lu_fid *fid, __u64 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_seq_is_idif(seq), LPX64"\n", seq);
                fid->f_seq = seq;
        }
        fid->f_oid = 0;
@@ -281,11 +286,6 @@ enum lu_mgr_type {
         LUSTRE_SEQ_CONTROLLER
 };
 
-enum lu_cli_type {
-        LUSTRE_SEQ_METADATA,
-        LUSTRE_SEQ_DATA
-};
-
 struct lu_server_seq;
 
 /* Client sequence manager interface. */
@@ -380,21 +380,23 @@ struct lu_server_seq {
 
         /* sync is needed for update operation */
         __u32                   lss_need_sync;
-        /**
-         * Pointer to site object, required to access site fld.
-         */
-        struct md_site         *lss_site;
+
+       /**
+        * Pointer to site object, required to access site fld.
+        */
+       struct seq_server_site  *lss_site;
 };
 
 int seq_query(struct com_thread_info *info);
+int seq_handle(struct ptlrpc_request *req);
 
 /* Server methods */
 int seq_server_init(struct lu_server_seq *seq,
-                    struct dt_device *dev,
-                    const char *prefix,
-                    enum lu_mgr_type type,
-                    struct md_site *ls,
-                    const struct lu_env *env);
+                   struct dt_device *dev,
+                   const char *prefix,
+                   enum lu_mgr_type type,
+                   struct seq_server_site *ss,
+                   const struct lu_env *env);
 
 void seq_server_fini(struct lu_server_seq *seq,
                      const struct lu_env *env);
@@ -427,10 +429,14 @@ int seq_client_alloc_fid(const struct lu_env *env, struct lu_client_seq *seq,
 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);
+
 /* fid locking */
 
 struct ldlm_namespace;
@@ -492,6 +498,16 @@ static inline int fid_res_name_eq(const struct lu_fid *f,
                name->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_ver_oid(f);
 }
 
+/* reverse function of fid_build_reg_res_name() */
+static inline void fid_build_from_res_name(struct lu_fid *f,
+                                          const struct ldlm_res_id *name)
+{
+       fid_zero(f);
+       f->f_seq = name->name[LUSTRE_RES_ID_SEQ_OFF];
+       f->f_oid = name->name[LUSTRE_RES_ID_VER_OID_OFF] & 0xffffffff;
+       f->f_ver = name->name[LUSTRE_RES_ID_VER_OID_OFF] >> 32;
+       LASSERT(fid_res_name_eq(f, name));
+}
 
 static inline struct ldlm_res_id *
 fid_build_pdo_res_name(const struct lu_fid *f,