--- l/drivers/infiniband/core/verbs.c +++ v/drivers/infiniband/core/verbs.c @@ -1979,6 +1979,7 @@ int ib_get_eth_speed(struct ib_device *d netdev = ib_device_get_netdev(dev, port_num); if (!netdev) return -ENODEV; + dev_hold(netdev); rtnl_lock(); rc = __ethtool_get_link_ksettings(netdev, &lksettings); @@ -1995,6 +1996,7 @@ int ib_get_eth_speed(struct ib_device *d netdev->name, netdev_speed); } + dev_put(netdev); ib_get_width_and_speed(netdev_speed, lksettings.lanes, speed, width);