aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/lowcomms-tcp.c
diff options
context:
space:
mode:
authorPatrick Caulfield <pcaulfie@redhat.com>2007-01-02 17:08:54 +0000
committerSteven Whitehouse <swhiteho@redhat.com>2007-02-05 13:36:21 -0500
commit4edde74eedb8bc4c03adc3602b114b72a7ccd13f (patch)
tree636a9c5836a6ea132d7316ae101616039e8d768f /fs/dlm/lowcomms-tcp.c
parent[DLM] Fix schedule() calls (diff)
downloadlinux-dev-4edde74eedb8bc4c03adc3602b114b72a7ccd13f.tar.xz
linux-dev-4edde74eedb8bc4c03adc3602b114b72a7ccd13f.zip
[DLM] Fix spin lock already unlocked bug
I just noticed this message when testing some other changes I'd made to lowcomms (to use workqueues) but the problem seems to be in the current git trees too. I'm amazed no-one has seen it. BUG: spinlock already unlocked on CPU#1, dlm_recoverd/16868 Signed-Off-By: Patrick Caulfield <pcaulfie@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to '')
-rw-r--r--fs/dlm/lowcomms-tcp.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/dlm/lowcomms-tcp.c b/fs/dlm/lowcomms-tcp.c
index 18b91c65bdb3..ce5e7cdfb45d 100644
--- a/fs/dlm/lowcomms-tcp.c
+++ b/fs/dlm/lowcomms-tcp.c
@@ -709,6 +709,7 @@ void *dlm_lowcomms_get_buffer(int nodeid, int len,
if (!con)
return NULL;
+ spin_lock(&con->writequeue_lock);
e = list_entry(con->writequeue.prev, struct writequeue_entry, list);
if ((&e->list == &con->writequeue) ||
(PAGE_CACHE_SIZE - e->end < len)) {
@@ -747,6 +748,7 @@ void dlm_lowcomms_commit_buffer(void *mh)
struct connection *con = e->con;
int users;
+ spin_lock(&con->writequeue_lock);
users = --e->users;
if (users)
goto out;