Whamcloud - gitweb
LU-911 osd: OI is implemented internally within OSD
[fs/lustre-release.git] / lustre / include / lustre_fid.h
index f8aba33..a9aff3a 100644 (file)
@@ -28,6 +28,8 @@
 /*
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
+ *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -88,10 +90,15 @@ enum {
         LUSTRE_SEQ_SUPER_WIDTH = ((1ULL << 30ULL) * LUSTRE_SEQ_META_WIDTH)
 };
 
+enum {
+        /** 2^6 FIDs for OI containers */
+        OSD_OI_FID_OID_BITS     = 6,
+        /** reserve enough FIDs in case we want more in the future */
+        OSD_OI_FID_OID_BITS_MAX = 10,
+};
+
 /** special OID for local objects */
 enum local_oid {
-        /** \see osd_oi_index_create */
-        OSD_OI_FID_16_OID       = 2UL,
         /** \see fld_mod_init */
         FLD_INDEX_OID           = 3UL,
         /** \see fid_mod_init */
@@ -107,6 +114,16 @@ enum local_oid {
         MDT_LAST_RECV_OID       = 11UL,
         /** \see osd_mod_init */
         OSD_REM_OBJ_DIR_OID     = 12UL,
+        OSD_FS_ROOT_OID         = 13UL,
+        ACCT_USER_OID           = 15UL,
+        ACCT_GROUP_OID          = 16UL,
+        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,
 };
 
 static inline void lu_local_obj_fid(struct lu_fid *fid, __u32 oid)
@@ -164,6 +181,10 @@ struct lu_client_seq {
 
         /* Seq-server for direct talking */
         struct lu_server_seq   *lcs_srv;
+
+        /* wait queue for fid allocation and update indicator */
+        cfs_waitq_t             lcs_waitq;
+        int                     lcs_update;
 };
 
 /* server sequence manager interface */
@@ -214,8 +235,8 @@ struct lu_server_seq {
          */
         __u64                   lss_set_width;
 
-        /* transaction no of seq update write operation */
-        __u64                   lss_set_transno;
+        /* sync is needed for update operation */
+        __u32                   lss_need_sync;
         /**
          * Pointer to site object, required to access site fld.
          */
@@ -258,8 +279,10 @@ void seq_client_fini(struct lu_client_seq *seq);
 
 void seq_client_flush(struct lu_client_seq *seq);
 
-int seq_client_alloc_fid(struct lu_client_seq *seq,
+int seq_client_alloc_fid(const struct lu_env *env, struct lu_client_seq *seq,
                          struct lu_fid *fid);
+int seq_client_get_seq(const struct lu_env *env, struct lu_client_seq *seq,
+                       seqno_t *seqnr);
 
 /* Fids common stuff */
 int fid_is_local(const struct lu_env *env,
@@ -269,15 +292,12 @@ int fid_is_local(const struct lu_env *env,
 
 struct ldlm_namespace;
 
-enum {
-        LUSTRE_RES_ID_SEQ_OFF = 0,
-        LUSTRE_RES_ID_OID_OFF = 1,
-        LUSTRE_RES_ID_VER_OFF = 2,
-        LUSTRE_RES_ID_HSH_OFF = 3
-};
-
 /*
- * Build (DLM) resource name from fid.
+ * Build (DLM) resource name from FID.
+ *
+ * NOTE: until Lustre 1.8.7/2.1.1 the fid_ver() was packed into name[2],
+ * 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 *
 fid_build_reg_res_name(const struct lu_fid *f,
@@ -285,8 +305,7 @@ fid_build_reg_res_name(const struct lu_fid *f,
 {
         memset(name, 0, sizeof *name);
         name->name[LUSTRE_RES_ID_SEQ_OFF] = fid_seq(f);
-        name->name[LUSTRE_RES_ID_OID_OFF] = fid_oid(f);
-        name->name[LUSTRE_RES_ID_VER_OFF] = fid_ver(f);
+        name->name[LUSTRE_RES_ID_VER_OID_OFF] = fid_ver_oid(f);
         return name;
 }
 
@@ -296,10 +315,8 @@ fid_build_reg_res_name(const struct lu_fid *f,
 static inline int fid_res_name_eq(const struct lu_fid *f,
                                   const struct ldlm_res_id *name)
 {
-        return
-                name->name[LUSTRE_RES_ID_SEQ_OFF] == fid_seq(f) &&
-                name->name[LUSTRE_RES_ID_OID_OFF] == fid_oid(f) &&
-                name->name[LUSTRE_RES_ID_VER_OFF] == fid_ver(f);
+        return name->name[LUSTRE_RES_ID_SEQ_OFF] == fid_seq(f) &&
+               name->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_ver_oid(f);
 }