Skip to content

Commit cff0a1b

Browse files
committed
Merge tag 'v6.18-rc4-smb-server-fixes' of git://git.samba.org/ksmbd
Pull smb server fixes from Steve French: - More safely detect RDMA capable devices correctly * tag 'v6.18-rc4-smb-server-fixes' of git://git.samba.org/ksmbd: ksmbd: detect RDMA capable netdevs include IPoIB ksmbd: detect RDMA capable lower devices when bridge and vlan netdev is used
2 parents 4a0c9b3 + e618765 commit cff0a1b

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

fs/smb/server/transport_rdma.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2606,7 +2606,7 @@ void ksmbd_rdma_destroy(void)
26062606
}
26072607
}
26082608

2609-
bool ksmbd_rdma_capable_netdev(struct net_device *netdev)
2609+
static bool ksmbd_find_rdma_capable_netdev(struct net_device *netdev)
26102610
{
26112611
struct smb_direct_device *smb_dev;
26122612
int i;
@@ -2648,6 +2648,28 @@ bool ksmbd_rdma_capable_netdev(struct net_device *netdev)
26482648
return rdma_capable;
26492649
}
26502650

2651+
bool ksmbd_rdma_capable_netdev(struct net_device *netdev)
2652+
{
2653+
struct net_device *lower_dev;
2654+
struct list_head *iter;
2655+
2656+
if (ksmbd_find_rdma_capable_netdev(netdev))
2657+
return true;
2658+
2659+
/* check if netdev is bridge or VLAN */
2660+
if (netif_is_bridge_master(netdev) ||
2661+
netdev->priv_flags & IFF_802_1Q_VLAN)
2662+
netdev_for_each_lower_dev(netdev, lower_dev, iter)
2663+
if (ksmbd_find_rdma_capable_netdev(lower_dev))
2664+
return true;
2665+
2666+
/* check if netdev is IPoIB safely without layer violation */
2667+
if (netdev->type == ARPHRD_INFINIBAND)
2668+
return true;
2669+
2670+
return false;
2671+
}
2672+
26512673
static const struct ksmbd_transport_ops ksmbd_smb_direct_transport_ops = {
26522674
.prepare = smb_direct_prepare,
26532675
.disconnect = smb_direct_disconnect,

0 commit comments

Comments
 (0)