ocfs2/dlm: Activate dlm->master_hash for master list entries
[firefly-linux-kernel-4.4.55.git] / fs / ocfs2 / dlm / dlmcommon.h
index d5a86fb81a4902adff4426b552cd3ae19a5d926d..aa55271a7aca9a1b012aed83cc52e7200515b68b 100644 (file)
@@ -56,12 +56,13 @@ enum dlm_mle_type {
 };
 
 struct dlm_lock_name {
-       u8 len;
-       u8 name[DLM_LOCKID_NAME_MAX];
+       unsigned int hash;
+       unsigned int len;
+       unsigned char name[DLM_LOCKID_NAME_MAX];
 };
 
 struct dlm_master_list_entry {
-       struct list_head list;
+       struct hlist_node master_hash_node;
        struct list_head hb_events;
        struct dlm_ctxt *dlm;
        spinlock_t spinlock;
@@ -79,8 +80,8 @@ struct dlm_master_list_entry {
        struct o2hb_callback_func mle_hb_up;
        struct o2hb_callback_func mle_hb_down;
        union {
-               struct dlm_lock_resource *res;
-               struct dlm_lock_name name;
+               struct dlm_lock_resource *mleres;
+               struct dlm_lock_name mlename;
        } u;
 };
 
@@ -140,6 +141,7 @@ struct dlm_ctxt
        unsigned int purge_count;
        spinlock_t spinlock;
        spinlock_t ast_lock;
+       spinlock_t track_lock;
        char *name;
        u8 node_num;
        u32 key;
@@ -150,7 +152,7 @@ struct dlm_ctxt
        unsigned long recovery_map[BITS_TO_LONGS(O2NM_MAX_NODES)];
        struct dlm_recovery_ctxt reco;
        spinlock_t master_lock;
-       struct list_head master_list;
+       struct hlist_head **master_hash;
        struct list_head mle_hb_events;
 
        /* these give a really vague idea of the system load */
@@ -194,6 +196,13 @@ static inline struct hlist_head *dlm_lockres_hash(struct dlm_ctxt *dlm, unsigned
        return dlm->lockres_hash[(i / DLM_BUCKETS_PER_PAGE) % DLM_HASH_PAGES] + (i % DLM_BUCKETS_PER_PAGE);
 }
 
+static inline struct hlist_head *dlm_master_hash(struct dlm_ctxt *dlm,
+                                                unsigned i)
+{
+       return dlm->master_hash[(i / DLM_BUCKETS_PER_PAGE) % DLM_HASH_PAGES] +
+                       (i % DLM_BUCKETS_PER_PAGE);
+}
+
 /* these keventd work queue items are for less-frequently
  * called functions that cannot be directly called from the
  * net message handlers for some reason, usually because
@@ -316,6 +325,8 @@ struct dlm_lock_resource
         * put on a list for the dlm thread to run. */
        unsigned long    last_used;
 
+       struct dlm_ctxt *dlm;
+
        unsigned migration_pending:1;
        atomic_t asts_reserved;
        spinlock_t spinlock;
@@ -1005,6 +1016,9 @@ static inline void __dlm_wait_on_lockres(struct dlm_lock_resource *res)
                                          DLM_LOCK_RES_MIGRATING));
 }
 
+void __dlm_unlink_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle);
+void __dlm_insert_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle);
+
 /* create/destroy slab caches */
 int dlm_init_master_caches(void);
 void dlm_destroy_master_caches(void);