]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/ocfs2-dlm-create-and-destroy-the-dlm-master_hash.patch
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / ocfs2-dlm-create-and-destroy-the-dlm-master_hash.patch
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/ocfs2-dlm-create-and-destroy-the-dlm-master_hash.patch b/src/patches/suse-2.6.27.31/patches.fixes/ocfs2-dlm-create-and-destroy-the-dlm-master_hash.patch
new file mode 100644 (file)
index 0000000..24627b8
--- /dev/null
@@ -0,0 +1,83 @@
+From: Sunil Mushran <sunil.mushran@oracle.com>
+Date: Thu, 26 Feb 2009 15:00:40 -0800
+Subject: ocfs2/dlm: Create and destroy the dlm->master_hash
+Patch-mainline: 2.6.30
+References: bnc#408304
+
+This patch adds code to create and destroy the dlm->master_hash.
+
+Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
+Signed-off-by: Mark Fasheh <mfasheh@suse.com>
+---
+ fs/ocfs2/dlm/dlmcommon.h |    8 ++++++++
+ fs/ocfs2/dlm/dlmdomain.c |   18 ++++++++++++++++++
+ 2 files changed, 26 insertions(+), 0 deletions(-)
+
+Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmcommon.h
+===================================================================
+--- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmcommon.h
++++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmcommon.h
+@@ -151,6 +151,7 @@ struct dlm_ctxt
+       unsigned long recovery_map[BITS_TO_LONGS(O2NM_MAX_NODES)];
+       struct dlm_recovery_ctxt reco;
+       spinlock_t master_lock;
++      struct hlist_head **master_hash;
+       struct list_head master_list;
+       struct list_head mle_hb_events;
+@@ -195,6 +196,13 @@ static inline struct hlist_head *dlm_loc
+       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
+Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmdomain.c
+===================================================================
+--- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmdomain.c
++++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmdomain.c
+@@ -304,6 +304,9 @@ static void dlm_free_ctxt_mem(struct dlm
+       if (dlm->lockres_hash)
+               dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
++      if (dlm->master_hash)
++              dlm_free_pagevec((void **)dlm->master_hash, DLM_HASH_PAGES);
++
+       if (dlm->name)
+               kfree(dlm->name);
+@@ -1534,12 +1537,27 @@ static struct dlm_ctxt *dlm_alloc_ctxt(c
+       for (i = 0; i < DLM_HASH_BUCKETS; i++)
+               INIT_HLIST_HEAD(dlm_lockres_hash(dlm, i));
++      dlm->master_hash = (struct hlist_head **)
++                              dlm_alloc_pagevec(DLM_HASH_PAGES);
++      if (!dlm->master_hash) {
++              mlog_errno(-ENOMEM);
++              dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
++              kfree(dlm->name);
++              kfree(dlm);
++              dlm = NULL;
++              goto leave;
++      }
++
++      for (i = 0; i < DLM_HASH_BUCKETS; i++)
++              INIT_HLIST_HEAD(dlm_master_hash(dlm, i));
++
+       strcpy(dlm->name, domain);
+       dlm->key = key;
+       dlm->node_num = o2nm_this_node();
+       ret = dlm_create_debugfs_subroot(dlm);
+       if (ret < 0) {
++              dlm_free_pagevec((void **)dlm->master_hash, DLM_HASH_PAGES);
+               dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
+               kfree(dlm->name);
+               kfree(dlm);