]>
Commit | Line | Data |
---|---|---|
00e5a55c BS |
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); |