aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Caulfield <pcaulfie@redhat.com>2007-01-02 12:08:54 -0500
committerSteven Whitehouse <swhiteho@redhat.com>2007-02-05 13:36:21 -0500
commit4edde74eedb8bc4c03adc3602b114b72a7ccd13f (patch)
tree636a9c5836a6ea132d7316ae101616039e8d768f
parent3fb4a251febe70e4c65ea8250545b391fd414d5a (diff)
[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>
-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,
709 if (!con) 709 if (!con)
710 return NULL; 710 return NULL;
711 711
712 spin_lock(&con->writequeue_lock);
712 e = list_entry(con->writequeue.prev, struct writequeue_entry, list); 713 e = list_entry(con->writequeue.prev, struct writequeue_entry, list);
713 if ((&e->list == &con->writequeue) || 714 if ((&e->list == &con->writequeue) ||
714 (PAGE_CACHE_SIZE - e->end < len)) { 715 (PAGE_CACHE_SIZE - e->end < len)) {
@@ -747,6 +748,7 @@ void dlm_lowcomms_commit_buffer(void *mh)
747 struct connection *con = e->con; 748 struct connection *con = e->con;
748 int users; 749 int users;
749 750
751 spin_lock(&con->writequeue_lock);
750 users = --e->users; 752 users = --e->users;
751 if (users) 753 if (users)
752 goto out; 754 goto out;