Loading fs/ksmbd/smb2pdu.c +5 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "asn1.h" #include "connection.h" #include "transport_ipc.h" #include "transport_rdma.h" #include "vfs.h" #include "vfs_cache.h" #include "misc.h" Loading Loading @@ -7028,11 +7029,11 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, &rsp->Buffer[nbytes]; nii_rsp->IfIndex = cpu_to_le32(netdev->ifindex); /* TODO: specify the RDMA capabilities */ if (netdev->num_tx_queues > 1) nii_rsp->Capability = cpu_to_le32(RSS_CAPABLE); else nii_rsp->Capability = 0; if (netdev->num_tx_queues > 1) nii_rsp->Capability |= cpu_to_le32(RSS_CAPABLE); if (ksmbd_rdma_capable_netdev(netdev)) nii_rsp->Capability |= cpu_to_le32(RDMA_CAPABLE); nii_rsp->Next = cpu_to_le32(152); nii_rsp->Reserved = 0; Loading fs/ksmbd/transport_rdma.c +14 −0 Original line number Diff line number Diff line Loading @@ -2033,6 +2033,20 @@ int ksmbd_rdma_destroy(void) return 0; } bool ksmbd_rdma_capable_netdev(struct net_device *netdev) { struct ib_device *ibdev; bool rdma_capable = false; ibdev = ib_device_get_by_netdev(netdev, RDMA_DRIVER_UNKNOWN); if (ibdev) { if (rdma_frwr_is_supported(&ibdev->attrs)) rdma_capable = true; ib_device_put(ibdev); } return rdma_capable; } static struct ksmbd_transport_ops ksmbd_smb_direct_transport_ops = { .prepare = smb_direct_prepare, .disconnect = smb_direct_disconnect, Loading fs/ksmbd/transport_rdma.h +2 −0 Original line number Diff line number Diff line Loading @@ -53,9 +53,11 @@ struct smb_direct_data_transfer { #ifdef CONFIG_SMB_SERVER_SMBDIRECT int ksmbd_rdma_init(void); int ksmbd_rdma_destroy(void); bool ksmbd_rdma_capable_netdev(struct net_device *netdev); #else static inline int ksmbd_rdma_init(void) { return 0; } static inline int ksmbd_rdma_destroy(void) { return 0; } static inline bool ksmbd_rdma_capable_netdev(struct net_device *netdev) { return false; } #endif #endif /* __KSMBD_TRANSPORT_RDMA_H__ */ Loading
fs/ksmbd/smb2pdu.c +5 −4 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include "asn1.h" #include "connection.h" #include "transport_ipc.h" #include "transport_rdma.h" #include "vfs.h" #include "vfs_cache.h" #include "misc.h" Loading Loading @@ -7028,11 +7029,11 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, &rsp->Buffer[nbytes]; nii_rsp->IfIndex = cpu_to_le32(netdev->ifindex); /* TODO: specify the RDMA capabilities */ if (netdev->num_tx_queues > 1) nii_rsp->Capability = cpu_to_le32(RSS_CAPABLE); else nii_rsp->Capability = 0; if (netdev->num_tx_queues > 1) nii_rsp->Capability |= cpu_to_le32(RSS_CAPABLE); if (ksmbd_rdma_capable_netdev(netdev)) nii_rsp->Capability |= cpu_to_le32(RDMA_CAPABLE); nii_rsp->Next = cpu_to_le32(152); nii_rsp->Reserved = 0; Loading
fs/ksmbd/transport_rdma.c +14 −0 Original line number Diff line number Diff line Loading @@ -2033,6 +2033,20 @@ int ksmbd_rdma_destroy(void) return 0; } bool ksmbd_rdma_capable_netdev(struct net_device *netdev) { struct ib_device *ibdev; bool rdma_capable = false; ibdev = ib_device_get_by_netdev(netdev, RDMA_DRIVER_UNKNOWN); if (ibdev) { if (rdma_frwr_is_supported(&ibdev->attrs)) rdma_capable = true; ib_device_put(ibdev); } return rdma_capable; } static struct ksmbd_transport_ops ksmbd_smb_direct_transport_ops = { .prepare = smb_direct_prepare, .disconnect = smb_direct_disconnect, Loading
fs/ksmbd/transport_rdma.h +2 −0 Original line number Diff line number Diff line Loading @@ -53,9 +53,11 @@ struct smb_direct_data_transfer { #ifdef CONFIG_SMB_SERVER_SMBDIRECT int ksmbd_rdma_init(void); int ksmbd_rdma_destroy(void); bool ksmbd_rdma_capable_netdev(struct net_device *netdev); #else static inline int ksmbd_rdma_init(void) { return 0; } static inline int ksmbd_rdma_destroy(void) { return 0; } static inline bool ksmbd_rdma_capable_netdev(struct net_device *netdev) { return false; } #endif #endif /* __KSMBD_TRANSPORT_RDMA_H__ */