mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
ksmbd: set RDMA capability for FSCTL_QUERY_NETWORK_INTERFACE_INFO
set RDMA capability for FSCTL_QUERY_NETWORK_INTERFACE_INFO. Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
96ad4ec51c
commit
03d8d4f189
3 changed files with 21 additions and 4 deletions
|
@ -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,
|
||||||
&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)
|
||||||
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 {
|
||||||
#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__ */
|
||||||
|
|
Loading…
Reference in a new issue