]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dlm: set zero linger time on sctp socket
authorDongmao Zhang <dmzhang@suse.com>
Tue, 10 Dec 2013 16:52:22 +0000 (10:52 -0600)
committerDavid Teigland <teigland@redhat.com>
Mon, 16 Dec 2013 15:52:34 +0000 (09:52 -0600)
The recovery time for a failed node was taking a long
time because the failed node could not perform the full
shutdown process.  Removing the linger time speeds this
up.  The dlm does not care what happens to messages to
or from the failed node.

Signed-off-by: Dongmao Zhang <dmzhang@suse.com>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/lowcomms.c

index d90909ec6aa6bc5dd846b0545773b8cee0bee7d8..a5e34dd6a32c91ac8bd7f85834e4f241a929bec8 100644 (file)
@@ -649,6 +649,7 @@ static void process_sctp_notification(struct connection *con,
                                      struct msghdr *msg, char *buf)
 {
        union sctp_notification *sn = (union sctp_notification *)buf;
+       struct linger linger;
 
        switch (sn->sn_header.sn_type) {
        case SCTP_SEND_FAILED:
@@ -727,6 +728,13 @@ static void process_sctp_notification(struct connection *con,
                        }
                        add_sock(new_con->sock, new_con);
 
+                       linger.l_onoff = 1;
+                       linger.l_linger = 0;
+                       ret = kernel_setsockopt(new_con->sock, SOL_SOCKET, SO_LINGER,
+                                               (char *)&linger, sizeof(linger));
+                       if (ret < 0)
+                               log_print("set socket option SO_LINGER failed");
+
                        log_print("connecting to %d sctp association %d",
                                 nodeid, (int)sn->sn_assoc_change.sac_assoc_id);