On Sat, 16 May 2026 16:40:22 -0700, Zhu Yanjun wrote:
quoted hunk ↗ jump to hunk
diff --git a/drivers/infiniband/sw/rxe/rxe.c
b/drivers/infiniband/sw/rxe/rxe.c
index b0714f9abe3d..84266dc416c4 100644
--- a/drivers/infiniband/sw/rxe/rxe.c
+++ b/drivers/infiniband/sw/rxe/rxe.c
@@ -251,7 +251,9 @@ static int rxe_newlink(const char *ibdev_name,
struct net_device *ndev)
static int rxe_dellink(struct ib_device *dev)
{
+ rtnl_lock();
rxe_net_del(dev);
+ rtnl_unlock();
return 0;
}diff --git a/drivers/infiniband/sw/rxe/rxe_net.c
b/drivers/infiniband/sw/rxe/rxe_net.c
index 50a2cb5405e2..ac53ea73996d 100644
--- a/drivers/infiniband/sw/rxe/rxe_net.c
+++ b/drivers/infiniband/sw/rxe/rxe_net.c
@@ -649,6 +649,8 @@ void rxe_net_del(struct ib_device *dev)
struct sock *sk;
struct net *net;
+ ASSERT_RTNL();
+
ndev = rxe_ib_device_get_netdev(&rxe->ib_dev);
if (!ndev)
return;
Since the solution is the same, and requires no new locks, I favor your
approach.
BR,
Edward