Skip to content

Commit d24822e

Browse files
namjaejeonsmfrench
authored andcommitted
ksmbd: detect RDMA capable lower devices when bridge and vlan netdev is used
If user set bridge interface as actual RDMA-capable NICs are lower devices, ksmbd can not detect as RDMA capable. This patch can detect the RDMA capable lower devices from bridge master or VLAN. With this change, ksmbd can accept both TCP and RDMA connections through the same bridge IP address, allowing mixed transport operation without requiring separate interfaces. Signed-off-by: Namjae Jeon <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent 6146a0f commit d24822e

1 file changed

Lines changed: 19 additions & 1 deletion

File tree

fs/smb/server/transport_rdma.c

Lines changed: 19 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,24 @@ 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+
return false;
2667+
}
2668+
26512669
static const struct ksmbd_transport_ops ksmbd_smb_direct_transport_ops = {
26522670
.prepare = smb_direct_prepare,
26532671
.disconnect = smb_direct_disconnect,

0 commit comments

Comments
 (0)