summaryrefslogtreecommitdiff
path: root/net/tipc/socket.c
diff options
context:
space:
mode:
authorJon Paul Maloy <jon.maloy@ericsson.com>2014-08-22 18:09:10 -0400
committerDavid S. Miller <davem@davemloft.net>2014-08-23 11:18:34 -0700
commit80e44c22255468337b891da2348cab68cb62766f (patch)
treeda9d58ff818406e20757fa1f431070262d18c93c /net/tipc/socket.c
parent5728901581139e68e6cf53b36590f64829c37453 (diff)
tipc: eliminate function tipc_port_shutdown()
tipc_port_shutdown() is a remnant from the now obsolete native interface. As such it grabs port_lock in order to protect itself from concurrent BH processing. However, after the recent changes to the port/socket upcalls, sockets are now basically single-threaded, and all execution, except the read-only tipc_sk_timer(), is executing within the protection of lock_sock(). So the use of port_lock is not needed here. In this commit we eliminate the whole function, and merge it into its only caller, tipc_shutdown(). Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Reviewed-by: Erik Hugne <erik.hugne@ericsson.com> Reviewed-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r--net/tipc/socket.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 5f8376e8da2a..f202d4790ce3 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -1899,7 +1899,7 @@ static int tipc_shutdown(struct socket *sock, int how)
struct tipc_sock *tsk = tipc_sk(sk);
struct tipc_port *port = &tsk->port;
struct sk_buff *buf;
- u32 peer;
+ u32 dnode;
int res;
if (how != SHUT_RDWR)
@@ -1920,10 +1920,17 @@ restart:
goto restart;
}
tipc_port_disconnect(port->ref);
- if (tipc_msg_reverse(buf, &peer, TIPC_CONN_SHUTDOWN))
- tipc_link_xmit(buf, peer, 0);
+ if (tipc_msg_reverse(buf, &dnode, TIPC_CONN_SHUTDOWN))
+ tipc_link_xmit(buf, dnode, port->ref);
} else {
- tipc_port_shutdown(port->ref);
+ dnode = tipc_port_peernode(port);
+ buf = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE,
+ TIPC_CONN_MSG, SHORT_H_SIZE,
+ 0, dnode, tipc_own_addr,
+ tipc_port_peerport(port),
+ port->ref, TIPC_CONN_SHUTDOWN);
+ tipc_link_xmit(buf, dnode, port->ref);
+ __tipc_port_disconnect(port);
}
sock->state = SS_DISCONNECTING;