Commit 03d8d4f1 authored by Hyunchul Lee's avatar Hyunchul Lee Committed by Namjae Jeon

ksmbd: set RDMA capability for FSCTL_QUERY_NETWORK_INTERFACE_INFO

set RDMA capability for
FSCTL_QUERY_NETWORK_INTERFACE_INFO.
Signed-off-by: default avatarHyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 96ad4ec5
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "asn1.h" #include "asn1.h"
#include "connection.h" #include "connection.h"
#include "transport_ipc.h" #include "transport_ipc.h"
#include "transport_rdma.h"
#include "vfs.h" #include "vfs.h"
#include "vfs_cache.h" #include "vfs_cache.h"
#include "misc.h" #include "misc.h"
...@@ -7028,11 +7029,11 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn, ...@@ -7028,11 +7029,11 @@ static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn,
&rsp->Buffer[nbytes]; &rsp->Buffer[nbytes];
nii_rsp->IfIndex = cpu_to_le32(netdev->ifindex); nii_rsp->IfIndex = cpu_to_le32(netdev->ifindex);
/* TODO: specify the RDMA capabilities */ nii_rsp->Capability = 0;
if (netdev->num_tx_queues > 1) if (netdev->num_tx_queues > 1)
nii_rsp->Capability = cpu_to_le32(RSS_CAPABLE); nii_rsp->Capability |= cpu_to_le32(RSS_CAPABLE);
else if (ksmbd_rdma_capable_netdev(netdev))
nii_rsp->Capability = 0; nii_rsp->Capability |= cpu_to_le32(RDMA_CAPABLE);
nii_rsp->Next = cpu_to_le32(152); nii_rsp->Next = cpu_to_le32(152);
nii_rsp->Reserved = 0; nii_rsp->Reserved = 0;
......
...@@ -2033,6 +2033,20 @@ int ksmbd_rdma_destroy(void) ...@@ -2033,6 +2033,20 @@ int ksmbd_rdma_destroy(void)
return 0; 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 = { static struct ksmbd_transport_ops ksmbd_smb_direct_transport_ops = {
.prepare = smb_direct_prepare, .prepare = smb_direct_prepare,
.disconnect = smb_direct_disconnect, .disconnect = smb_direct_disconnect,
......
...@@ -53,9 +53,11 @@ struct smb_direct_data_transfer { ...@@ -53,9 +53,11 @@ struct smb_direct_data_transfer {
#ifdef CONFIG_SMB_SERVER_SMBDIRECT #ifdef CONFIG_SMB_SERVER_SMBDIRECT
int ksmbd_rdma_init(void); int ksmbd_rdma_init(void);
int ksmbd_rdma_destroy(void); int ksmbd_rdma_destroy(void);
bool ksmbd_rdma_capable_netdev(struct net_device *netdev);
#else #else
static inline int ksmbd_rdma_init(void) { return 0; } static inline int ksmbd_rdma_init(void) { return 0; }
static inline int ksmbd_rdma_destroy(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
#endif /* __KSMBD_TRANSPORT_RDMA_H__ */ #endif /* __KSMBD_TRANSPORT_RDMA_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment