#include <uapi/linux/cifs/cifs_mount.h>
#include "../smbfs_common/smb2pdu.h"
#include "smb2pdu.h"
+#include "smbdirect.h"
#define SMB_PATH_MAX 260
#define CIFS_PORT 445
int (*copy_into_pages)(struct TCP_Server_Info *server,
struct cifs_readdata *rdata,
struct iov_iter *iter);
- struct kvec iov[2];
+ struct kvec iov[3];
struct TCP_Server_Info *server;
#ifdef CONFIG_CIFS_SMB_DIRECT
struct smbd_mr *mr;
+ struct smbd_buffer_descriptor_v1 smbd_v1;
#endif
bool using_rdma;
unsigned int pagesz;
unsigned int total_len;
unsigned int num_iov = 0;
- BUG_ON(*_num_iov < 2);
+ BUG_ON(*_num_iov < 3);
*_num_iov = 0;
if (server == NULL)
cpu_to_le16(offsetof(struct smb2_read_req, Buffer));
req->ReadChannelInfoLength =
cpu_to_le16(sizeof(struct smbd_buffer_descriptor_v1));
- v1 = (struct smbd_buffer_descriptor_v1 *) &req->Buffer[0];
+ v1 = &rdata->smbd_v1;
v1->offset = cpu_to_le64(rdata->mr->mr->iova);
v1->token = cpu_to_le32(rdata->mr->mr->rkey);
v1->length = cpu_to_le32(rdata->mr->mr->length);
+ total_len -= 1;
+ iov[1].iov_base = v1;
+ iov[1].iov_len = sizeof(*v1);
+ num_iov += 1;
+
rdata->using_rdma = true;
- total_len += sizeof(*v1) - 1;
}
#endif
iov[0].iov_base = req;
iov[0].iov_len = total_len;
num_iov += 1;
+ if (num_iov > 1)
+ total_len += iov[1].iov_len;
+
if (request_type & CHAINED_REQUEST) {
if (!(request_type & END_OF_CHAIN)) {
unsigned int next_cmd;
int resp_buftype, rc;
struct smb2_read_req *req = NULL;
struct smb2_read_rsp *rsp = NULL;
- struct kvec iov[2];
+ struct kvec iov[3];
struct kvec rsp_iov;
int flags = CIFS_LOG_ERROR;
struct cifs_ses *ses = io_parms->tcon->ses;