1 From: Sunil Mushran <sunil.mushran@oracle.com>
2 Date: Thu, 26 Feb 2009 15:00:47 -0800
3 Subject: ocfs2/dlm: Remove struct dlm_lock_name in struct dlm_master_list_entry
7 This patch removes struct dlm_lock_name and adds the entries directly
8 to struct dlm_master_list_entry. Under the new scheme, both mles that
9 are backed by a lockres or not, will have the name populated in mle->mname.
10 This allows us to get rid of code that was figuring out the location of
13 Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
14 Signed-off-by: Mark Fasheh <mfasheh@suse.com>
16 fs/ocfs2/dlm/dlmcommon.h | 14 +++-------
17 fs/ocfs2/dlm/dlmdebug.c | 12 +-------
18 fs/ocfs2/dlm/dlmmaster.c | 68 ++++++++++++---------------------------------
19 3 files changed, 23 insertions(+), 71 deletions(-)
21 Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmcommon.h
22 ===================================================================
23 --- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmcommon.h
24 +++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmcommon.h
25 @@ -56,12 +56,6 @@ enum dlm_mle_type {
29 -struct dlm_lock_name {
32 - unsigned char name[DLM_LOCKID_NAME_MAX];
35 struct dlm_master_list_entry {
36 struct hlist_node master_hash_node;
37 struct list_head hb_events;
38 @@ -80,10 +74,10 @@ struct dlm_master_list_entry {
39 enum dlm_mle_type type;
40 struct o2hb_callback_func mle_hb_up;
41 struct o2hb_callback_func mle_hb_down;
43 - struct dlm_lock_resource *mleres;
44 - struct dlm_lock_name mlename;
46 + struct dlm_lock_resource *mleres;
47 + unsigned char mname[DLM_LOCKID_NAME_MAX];
48 + unsigned int mnamelen;
49 + unsigned int mnamehash;
53 Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmdebug.c
54 ===================================================================
55 --- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmdebug.c
56 +++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmdebug.c
57 @@ -287,18 +287,8 @@ static int stringify_nodemap(unsigned lo
58 static int dump_mle(struct dlm_master_list_entry *mle, char *buf, int len)
61 - unsigned int namelen;
62 - unsigned char *name;
65 - if (mle->type != DLM_MLE_MASTER) {
66 - name = mle->u.mlename.name;
67 - namelen = mle->u.mlename.len;
69 - name = (unsigned char *)mle->u.mleres->lockname.name;
70 - namelen = mle->u.mleres->lockname.len;
73 if (mle->type == DLM_MLE_BLOCK)
75 else if (mle->type == DLM_MLE_MASTER)
76 @@ -306,7 +296,7 @@ static int dump_mle(struct dlm_master_li
80 - out += stringify_lockname(name, namelen, buf + out, len - out);
81 + out += stringify_lockname(mle->mname, mle->mnamelen, buf + out, len - out);
82 out += snprintf(buf + out, len - out,
83 "\t%3s\tmas=%3u\tnew=%3u\tevt=%1d\tuse=%1d\tref=%3d\n",
84 mle_type, mle->master, mle->new_master,
85 Index: linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmmaster.c
86 ===================================================================
87 --- linux-2.6.27-sle11_ocfs2_update.orig/fs/ocfs2/dlm/dlmmaster.c
88 +++ linux-2.6.27-sle11_ocfs2_update/fs/ocfs2/dlm/dlmmaster.c
89 @@ -68,41 +68,16 @@ static int dlm_do_assert_master(struct d
90 void *nodemap, u32 flags);
91 static void dlm_deref_lockres_worker(struct dlm_work_item *item, void *data);
93 -static inline void __dlm_mle_name(struct dlm_master_list_entry *mle,
94 - unsigned char **name, unsigned int *namelen,
95 - unsigned int *namehash)
97 - BUG_ON(mle->type != DLM_MLE_BLOCK &&
98 - mle->type != DLM_MLE_MASTER &&
99 - mle->type != DLM_MLE_MIGRATION);
101 - if (mle->type != DLM_MLE_MASTER) {
102 - *name = mle->u.mlename.name;
103 - *namelen = mle->u.mlename.len;
105 - *namehash = mle->u.mlename.hash;
107 - *name = (unsigned char *)mle->u.mleres->lockname.name;
108 - *namelen = mle->u.mleres->lockname.len;
110 - *namehash = mle->u.mleres->lockname.hash;
114 static inline int dlm_mle_equal(struct dlm_ctxt *dlm,
115 struct dlm_master_list_entry *mle,
117 unsigned int namelen)
119 - unsigned char *mlename;
120 - unsigned int mlelen;
125 - __dlm_mle_name(mle, &mlename, &mlelen, NULL);
127 - if (namelen != mlelen || memcmp(name, mlename, namelen) != 0)
128 + if (namelen != mle->mnamelen ||
129 + memcmp(name, mle->mname, namelen) != 0)
133 @@ -317,12 +292,16 @@ static void dlm_init_mle(struct dlm_mast
135 if (mle->type == DLM_MLE_MASTER) {
137 - mle->u.mleres = res;
139 + memcpy(mle->mname, res->lockname.name, res->lockname.len);
140 + mle->mnamelen = res->lockname.len;
141 + mle->mnamehash = res->lockname.hash;
144 - memcpy(mle->u.mlename.name, name, namelen);
145 - mle->u.mlename.len = namelen;
146 - mle->u.mlename.hash = dlm_lockid_hash(name, namelen);
147 + mle->mleres = NULL;
148 + memcpy(mle->mname, name, namelen);
149 + mle->mnamelen = namelen;
150 + mle->mnamehash = dlm_lockid_hash(name, namelen);
153 atomic_inc(&dlm->mle_tot_count[mle->type]);
154 @@ -350,13 +329,10 @@ void __dlm_unlink_mle(struct dlm_ctxt *d
155 void __dlm_insert_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle)
157 struct hlist_head *bucket;
158 - unsigned char *mname;
159 - unsigned int mlen, hash;
161 assert_spin_locked(&dlm->master_lock);
163 - __dlm_mle_name(mle, &mname, &mlen, &hash);
164 - bucket = dlm_master_hash(dlm, hash);
165 + bucket = dlm_master_hash(dlm, mle->mnamehash);
166 hlist_add_head(&mle->master_hash_node, bucket);
169 @@ -450,8 +426,6 @@ static void dlm_mle_release(struct kref
171 struct dlm_master_list_entry *mle;
172 struct dlm_ctxt *dlm;
173 - unsigned char *mname;
178 @@ -461,8 +435,8 @@ static void dlm_mle_release(struct kref
179 assert_spin_locked(&dlm->spinlock);
180 assert_spin_locked(&dlm->master_lock);
182 - __dlm_mle_name(mle, &mname, &mlen, NULL);
183 - mlog(0, "Releasing mle for %.*s, type %d\n", mlen, mname, mle->type);
184 + mlog(0, "Releasing mle for %.*s, type %d\n", mle->mnamelen, mle->mname,
187 /* remove from list if not already */
188 __dlm_unlink_mle(dlm, mle);
189 @@ -1277,7 +1251,7 @@ static int dlm_restart_lock_mastery(stru
192 mle->type = DLM_MLE_MASTER;
193 - mle->u.mleres = res;
198 @@ -1316,18 +1290,14 @@ static int dlm_do_master_request(struct
199 struct dlm_ctxt *dlm = mle->dlm;
200 struct dlm_master_request request;
201 int ret, response=0, resend;
202 - unsigned char *mlename;
203 - unsigned int mlenamelen;
205 memset(&request, 0, sizeof(request));
206 request.node_idx = dlm->node_num;
208 BUG_ON(mle->type == DLM_MLE_MIGRATION);
210 - __dlm_mle_name(mle, &mlename, &mlenamelen, NULL);
212 - request.namelen = (u8)mlenamelen;
213 - memcpy(request.name, mlename, request.namelen);
214 + request.namelen = (u8)mle->mnamelen;
215 + memcpy(request.name, mle->mname, request.namelen);
218 ret = o2net_send_message(DLM_MASTER_REQUEST_MSG, dlm->key, &request,
219 @@ -3181,12 +3151,10 @@ static struct dlm_lock_resource *dlm_res
220 struct dlm_master_list_entry *mle)
222 struct dlm_lock_resource *res;
225 /* Find the lockres associated to the mle and set its owner to UNK */
226 - hash = dlm_lockid_hash(mle->u.mlename.name, mle->u.mlename.len);
227 - res = __dlm_lookup_lockres(dlm, mle->u.mlename.name, mle->u.mlename.len,
229 + res = __dlm_lookup_lockres(dlm, mle->mname, mle->mnamelen,
232 spin_unlock(&dlm->master_lock);