]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.fixes/ocfs2-dlm-encapsulate-adding-and-removing-of-mle-fr.patch
Updated xen patches taken from suse.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.fixes / ocfs2-dlm-encapsulate-adding-and-removing-of-mle-fr.patch
1 From: Sunil Mushran <sunil.mushran@oracle.com>
2 Date: Thu, 26 Feb 2009 15:00:37 -0800
3 Subject: ocfs2/dlm: Encapsulate adding and removing of mle from dlm->master_list
4 Patch-mainline: 2.6.30
5 References: bnc#408304
6
7 This patch encapsulates adding and removing of the mle from the
8 dlm->master_list. This patch is part of the series of patches that
9 converts the mle list to a mle hash.
10
11 Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
12 Signed-off-by: Mark Fasheh <mfasheh@suse.com>
13 ---
14 fs/ocfs2/dlm/dlmcommon.h | 3 +++
15 fs/ocfs2/dlm/dlmmaster.c | 34 +++++++++++++++++++++++-----------
16 2 files changed, 26 insertions(+), 11 deletions(-)
17
18 Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmcommon.h
19 ===================================================================
20 --- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmcommon.h
21 +++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmcommon.h
22 @@ -1008,6 +1008,9 @@ static inline void __dlm_wait_on_lockres
23 DLM_LOCK_RES_MIGRATING));
24 }
25
26 +void __dlm_unlink_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle);
27 +void __dlm_insert_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle);
28 +
29 /* create/destroy slab caches */
30 int dlm_init_master_caches(void);
31 void dlm_destroy_master_caches(void);
32 Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmmaster.c
33 ===================================================================
34 --- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmmaster.c
35 +++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmmaster.c
36 @@ -318,6 +318,21 @@ static void dlm_init_mle(struct dlm_mast
37 __dlm_mle_attach_hb_events(dlm, mle);
38 }
39
40 +void __dlm_unlink_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle)
41 +{
42 + assert_spin_locked(&dlm->spinlock);
43 + assert_spin_locked(&dlm->master_lock);
44 +
45 + if (!list_empty(&mle->list))
46 + list_del_init(&mle->list);
47 +}
48 +
49 +void __dlm_insert_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle)
50 +{
51 + assert_spin_locked(&dlm->master_lock);
52 +
53 + list_add(&mle->list, &dlm->master_list);
54 +}
55
56 /* returns 1 if found, 0 if not */
57 static int dlm_find_mle(struct dlm_ctxt *dlm,
58 @@ -420,8 +435,7 @@ static void dlm_mle_release(struct kref
59 assert_spin_locked(&dlm->master_lock);
60
61 /* remove from list if not already */
62 - if (!list_empty(&mle->list))
63 - list_del_init(&mle->list);
64 + __dlm_unlink_mle(dlm, mle);
65
66 /* detach the mle from the domain node up/down events */
67 __dlm_mle_detach_hb_events(dlm, mle);
68 @@ -836,7 +850,7 @@ lookup:
69 alloc_mle = NULL;
70 dlm_init_mle(mle, DLM_MLE_MASTER, dlm, res, NULL, 0);
71 set_bit(dlm->node_num, mle->maybe_map);
72 - list_add(&mle->list, &dlm->master_list);
73 + __dlm_insert_mle(dlm, mle);
74
75 /* still holding the dlm spinlock, check the recovery map
76 * to see if there are any nodes that still need to be
77 @@ -1568,7 +1582,7 @@ way_up_top:
78 // "add the block.\n");
79 dlm_init_mle(mle, DLM_MLE_BLOCK, dlm, NULL, name, namelen);
80 set_bit(request->node_idx, mle->maybe_map);
81 - list_add(&mle->list, &dlm->master_list);
82 + __dlm_insert_mle(dlm, mle);
83 response = DLM_MASTER_RESP_NO;
84 } else {
85 // mlog(0, "mle was found\n");
86 @@ -1960,7 +1974,7 @@ ok:
87 assert->node_idx, rr, extra_ref, mle->inuse);
88 dlm_print_one_mle(mle);
89 }
90 - list_del_init(&mle->list);
91 + __dlm_unlink_mle(dlm, mle);
92 __dlm_mle_detach_hb_events(dlm, mle);
93 __dlm_put_mle(mle);
94 if (extra_ref) {
95 @@ -3137,10 +3151,8 @@ static int dlm_add_migration_mle(struct
96 tmp->master = master;
97 atomic_set(&tmp->woken, 1);
98 wake_up(&tmp->wq);
99 - /* remove it from the list so that only one
100 - * mle will be found */
101 - list_del_init(&tmp->list);
102 - /* this was obviously WRONG. mle is uninited here. should be tmp. */
103 + /* remove it so that only one mle will be found */
104 + __dlm_unlink_mle(dlm, tmp);
105 __dlm_mle_detach_hb_events(dlm, tmp);
106 ret = DLM_MIGRATE_RESPONSE_MASTERY_REF;
107 mlog(0, "%s:%.*s: master=%u, newmaster=%u, "
108 @@ -3159,7 +3171,7 @@ static int dlm_add_migration_mle(struct
109 mle->master = master;
110 /* do this for consistency with other mle types */
111 set_bit(new_master, mle->maybe_map);
112 - list_add(&mle->list, &dlm->master_list);
113 + __dlm_insert_mle(dlm, mle);
114
115 return ret;
116 }
117 @@ -3242,7 +3254,7 @@ top:
118 * list_head while in list_for_each_safe */
119 __dlm_mle_detach_hb_events(dlm, mle);
120 spin_lock(&mle->spinlock);
121 - list_del_init(&mle->list);
122 + __dlm_unlink_mle(dlm, mle);
123 atomic_set(&mle->woken, 1);
124 spin_unlock(&mle->spinlock);
125 wake_up(&mle->wq);