summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/rds/connection.c3
-rw-r--r--net/rds/tcp_listen.c28
2 files changed, 8 insertions, 23 deletions
diff --git a/net/rds/connection.c b/net/rds/connection.c
index 185f73b01694..a542f94c0214 100644
--- a/net/rds/connection.c
+++ b/net/rds/connection.c
@@ -455,6 +455,9 @@ void rds_conn_shutdown(struct rds_conn_path *cp)
rcu_read_unlock();
}
+ /* we do not hold the socket lock here but it is safe because
+ * fan-out is disabled when calling conn_slots_available()
+ */
if (conn->c_trans->conn_slots_available)
conn->c_trans->conn_slots_available(conn, false);
}
diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
index b4ab68a1da6d..08a506aa7ce7 100644
--- a/net/rds/tcp_listen.c
+++ b/net/rds/tcp_listen.c
@@ -59,30 +59,12 @@ void rds_tcp_keepalive(struct socket *sock)
static int
rds_tcp_get_peer_sport(struct socket *sock)
{
- union {
- struct sockaddr_storage storage;
- struct sockaddr addr;
- struct sockaddr_in sin;
- struct sockaddr_in6 sin6;
- } saddr;
- int sport;
-
- if (kernel_getpeername(sock, &saddr.addr) >= 0) {
- switch (saddr.addr.sa_family) {
- case AF_INET:
- sport = ntohs(saddr.sin.sin_port);
- break;
- case AF_INET6:
- sport = ntohs(saddr.sin6.sin6_port);
- break;
- default:
- sport = -1;
- }
- } else {
- sport = -1;
- }
+ struct sock *sk = sock->sk;
+
+ if (!sk)
+ return -1;
- return sport;
+ return ntohs(READ_ONCE(inet_sk(sk)->inet_dport));
}
/* rds_tcp_accept_one_path(): if accepting on cp_index > 0, make sure the