aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/lowcomms.c
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2009-09-18 15:31:47 -0400
committerDavid Teigland <teigland@redhat.com>2009-09-30 13:19:44 -0400
commit04bedd79a7037ee7af816b06c60c738144475c4a (patch)
treee68657f25eda860333a5dc37eb64181e1c686f35 /fs/dlm/lowcomms.c
parent9c1fe834c1bd7725b411055c66886b64c928083d (diff)
dlm: fix lowcomms_connect_node for sctp
The recently added dlm_lowcomms_connect_node() from 391fbdc5d527149578490db2f1619951d91f3561 does not work when using SCTP instead of TCP. The sctp connection code has nothing to do without data to send. Check for no data in the sctp connection code and do nothing instead of triggering a BUG. Also have connect_node() do nothing when the protocol is sctp. Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/lowcomms.c')
-rw-r--r--fs/dlm/lowcomms.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
index 240cef14fe58..a3350e4c8184 100644
--- a/fs/dlm/lowcomms.c
+++ b/fs/dlm/lowcomms.c
@@ -316,6 +316,10 @@ int dlm_lowcomms_connect_node(int nodeid)
316{ 316{
317 struct connection *con; 317 struct connection *con;
318 318
319 /* with sctp there's no connecting without sending */
320 if (dlm_config.ci_protocol != 0)
321 return 0;
322
319 if (nodeid == dlm_our_nodeid()) 323 if (nodeid == dlm_our_nodeid())
320 return 0; 324 return 0;
321 325
@@ -855,11 +859,14 @@ static void sctp_init_assoc(struct connection *con)
855 outmessage.msg_flags = MSG_EOR; 859 outmessage.msg_flags = MSG_EOR;
856 860
857 spin_lock(&con->writequeue_lock); 861 spin_lock(&con->writequeue_lock);
858 e = list_entry(con->writequeue.next, struct writequeue_entry,
859 list);
860 862
861 BUG_ON((struct list_head *) e == &con->writequeue); 863 if (list_empty(&con->writequeue)) {
864 spin_unlock(&con->writequeue_lock);
865 log_print("writequeue empty for nodeid %d", con->nodeid);
866 return;
867 }
862 868
869 e = list_first_entry(&con->writequeue, struct writequeue_entry, list);
863 len = e->len; 870 len = e->len;
864 offset = e->offset; 871 offset = e->offset;
865 spin_unlock(&con->writequeue_lock); 872 spin_unlock(&con->writequeue_lock);