| From 31312db8d9fa233f096fa78eda7920d24835d4e7 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 3 Jun 2021 12:01:12 +0300 |
| Subject: RDMA/rxe: Fix failure during driver load |
| |
| From: Kamal Heib <kamalheib1@gmail.com> |
| |
| [ Upstream commit 32a25f2ea690dfaace19f7a3a916f5d7e1ddafe8 ] |
| |
| To avoid the following failure when trying to load the rdma_rxe module |
| while IPv6 is disabled, add a check for EAFNOSUPPORT and ignore the |
| failure, also delete the needless debug print from rxe_setup_udp_tunnel(). |
| |
| $ modprobe rdma_rxe |
| modprobe: ERROR: could not insert 'rdma_rxe': Operation not permitted |
| |
| Fixes: dfdd6158ca2c ("IB/rxe: Fix kernel panic in udp_setup_tunnel") |
| Link: https://lore.kernel.org/r/20210603090112.36341-1-kamalheib1@gmail.com |
| Reported-by: Yi Zhang <yi.zhang@redhat.com> |
| Signed-off-by: Kamal Heib <kamalheib1@gmail.com> |
| Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/sw/rxe/rxe_net.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/infiniband/sw/rxe/rxe_net.c b/drivers/infiniband/sw/rxe/rxe_net.c |
| index bce44502ab0e..c071d5b1b85a 100644 |
| --- a/drivers/infiniband/sw/rxe/rxe_net.c |
| +++ b/drivers/infiniband/sw/rxe/rxe_net.c |
| @@ -212,10 +212,8 @@ static struct socket *rxe_setup_udp_tunnel(struct net *net, __be16 port, |
| |
| /* Create UDP socket */ |
| err = udp_sock_create(net, &udp_cfg, &sock); |
| - if (err < 0) { |
| - pr_err("failed to create udp socket. err = %d\n", err); |
| + if (err < 0) |
| return ERR_PTR(err); |
| - } |
| |
| tnl_cfg.encap_type = 1; |
| tnl_cfg.encap_rcv = rxe_udp_encap_recv; |
| @@ -616,6 +614,12 @@ static int rxe_net_ipv6_init(void) |
| |
| recv_sockets.sk6 = rxe_setup_udp_tunnel(&init_net, |
| htons(ROCE_V2_UDP_DPORT), true); |
| + if (PTR_ERR(recv_sockets.sk6) == -EAFNOSUPPORT) { |
| + recv_sockets.sk6 = NULL; |
| + pr_warn("IPv6 is not supported, can not create a UDPv6 socket\n"); |
| + return 0; |
| + } |
| + |
| if (IS_ERR(recv_sockets.sk6)) { |
| recv_sockets.sk6 = NULL; |
| pr_err("Failed to create IPv6 UDP tunnel\n"); |
| -- |
| 2.30.2 |
| |