Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 80e44c22 authored by Jon Paul Maloy's avatar Jon Paul Maloy Committed by David S. Miller
Browse files

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: default avatarJon Maloy <jon.maloy@ericsson.com>
Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
Reviewed-by: default avatarYing Xue <ying.xue@windriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 57289015
Loading
Loading
Loading
Loading
+0 −24
Original line number Diff line number Diff line
@@ -385,27 +385,3 @@ int tipc_port_disconnect(u32 ref)
	tipc_port_unlock(p_ptr);
	return res;
}

/*
 * tipc_port_shutdown(): Send a SHUTDOWN msg to peer and disconnect
 */
int tipc_port_shutdown(u32 ref)
{
	struct tipc_msg *msg;
	struct tipc_port *p_ptr;
	struct sk_buff *buf = NULL;
	u32 peer_node;

	p_ptr = tipc_port_lock(ref);
	if (!p_ptr)
		return -EINVAL;
	peer_node = tipc_port_peernode(p_ptr);
	buf = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE, TIPC_CONN_MSG,
			      SHORT_H_SIZE, 0, peer_node,
			      tipc_own_addr, tipc_port_peerport(p_ptr),
			      p_ptr->ref, TIPC_CONN_SHUTDOWN);
	tipc_port_unlock(p_ptr);
	msg = buf_msg(buf);
	tipc_link_xmit(buf, peer_node,	msg_link_selector(msg));
	return tipc_port_disconnect(ref);
}
+0 −2
Original line number Diff line number Diff line
@@ -106,8 +106,6 @@ int tipc_port_connect(u32 portref, struct tipc_portid const *port);

int tipc_port_disconnect(u32 portref);

int tipc_port_shutdown(u32 ref);

/*
 * The following routines require that the port be locked on entry
 */
+11 −4
Original line number Diff line number Diff line
@@ -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 @@ static int tipc_shutdown(struct socket *sock, int how)
				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;