dlm: use TCP_NODELAY
David Teigland [Fri, 12 Nov 2010 17:12:55 +0000 (11:12 -0600)]
Nagling doesn't help and can sometimes hurt dlm comms.

Signed-off-by: David Teigland <teigland@redhat.com>

fs/dlm/lowcomms.c

index 1d4e644..2bedb0a 100644 (file)
@@ -926,6 +926,7 @@ static void tcp_connect_to_sock(struct connection *con)
        struct sockaddr_storage saddr, src_addr;
        int addr_len;
        struct socket *sock = NULL;
+       int one = 1;
 
        if (con->nodeid == 0) {
                log_print("attempt to connect sock 0 foiled");
@@ -971,6 +972,11 @@ static void tcp_connect_to_sock(struct connection *con)
        make_sockaddr(&saddr, dlm_config.ci_tcp_port, &addr_len);
 
        log_print("connecting to %d", con->nodeid);
+
+       /* Turn off Nagle's algorithm */
+       kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY, (char *)&one,
+                         sizeof(one));
+
        result =
                sock->ops->connect(sock, (struct sockaddr *)&saddr, addr_len,
                                   O_NONBLOCK);
@@ -1022,6 +1028,10 @@ static struct socket *tcp_create_listen_sock(struct connection *con,
                goto create_out;
        }
 
+       /* Turn off Nagle's algorithm */
+       kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY, (char *)&one,
+                         sizeof(one));
+
        result = kernel_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
                                   (char *)&one, sizeof(one));