[Ocfs2-devel] [PATCH] ocfs2/dlm: check dlm_state under spinlock
Wengang Wang
wen.gang.wang at oracle.com
Tue Jun 15 21:08:42 PDT 2010
We should check dlm->dlm_state under dlm->spinlock though maybe in this case it
doesn't hurt.
Signed-off-by: Wengang Wang <wen.gang.wang at oracle.com>
---
fs/ocfs2/dlm/dlmdomain.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
index 6b5a492..ab82add 100644
--- a/fs/ocfs2/dlm/dlmdomain.c
+++ b/fs/ocfs2/dlm/dlmdomain.c
@@ -796,7 +796,7 @@ static int dlm_query_join_handler(struct o2net_msg *msg, u32 len, void *data,
spin_lock(&dlm_domain_lock);
dlm = __dlm_lookup_domain_full(query->domain, query->name_len);
if (!dlm)
- goto unlock_respond;
+ goto unlock_domain_respond;
/*
* There is a small window where the joining node may not see the
@@ -811,7 +811,7 @@ static int dlm_query_join_handler(struct o2net_msg *msg, u32 len, void *data,
"have node %u in its nodemap\n",
query->node_idx, nodenum);
packet.code = JOIN_DISALLOW;
- goto unlock_respond;
+ goto unlock_domain_respond;
}
}
nodenum++;
@@ -821,9 +821,9 @@ static int dlm_query_join_handler(struct o2net_msg *msg, u32 len, void *data,
* to be put in someone's domain map.
* Also, explicitly disallow joining at certain troublesome
* times (ie. during recovery). */
- if (dlm && dlm->dlm_state != DLM_CTXT_LEAVING) {
+ spin_lock(&dlm->spinlock);
+ if (dlm->dlm_state != DLM_CTXT_LEAVING) {
int bit = query->node_idx;
- spin_lock(&dlm->spinlock);
if (dlm->dlm_state == DLM_CTXT_NEW &&
dlm->joining_node == DLM_LOCK_RES_OWNER_UNKNOWN) {
@@ -869,10 +869,9 @@ static int dlm_query_join_handler(struct o2net_msg *msg, u32 len, void *data,
__dlm_set_joining_node(dlm, query->node_idx);
}
}
-
- spin_unlock(&dlm->spinlock);
}
-unlock_respond:
+ spin_unlock(&dlm->spinlock);
+unlock_domain_respond:
spin_unlock(&dlm_domain_lock);
respond:
--
1.6.6.1
More information about the Ocfs2-devel
mailing list