Skip to content

Commit abf651d

Browse files
authored
Merge pull request #8 from xyan264/copy-data-fix
Only copy data to send buffer when a 'write' command is issued
2 parents 86bfb01 + fa3fbf9 commit abf651d

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

plugins/microchip/switchtec-nvme-device.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ int pax_nvme_submit_admin_passthru_1k_rsp(int fd,
7171
struct pax_nvme_device *pax;
7272
struct switchtec_device_manage_nvme_req req;
7373
struct switchtec_device_manage_nvme_rsp rsp;
74-
int data_len;
74+
size_t data_len = 0;
7575
int status;
7676

7777
memset(&req, 0, sizeof(req));
@@ -84,12 +84,14 @@ int pax_nvme_submit_admin_passthru_1k_rsp(int fd,
8484
/* sqe[9] should be 0 per spec */
8585
req.nvme_sqe[9] = 0;
8686

87-
if (cmd->data_len > sizeof(req.nvme_data))
88-
data_len = sizeof(req.nvme_data);
89-
else
90-
data_len = cmd->data_len;
87+
if (cmd->opcode & 0x1) {
88+
if (cmd->data_len > sizeof(req.nvme_data))
89+
data_len = sizeof(req.nvme_data);
90+
else
91+
data_len = cmd->data_len;
9192

92-
memcpy(req.nvme_data, (void *)cmd->addr, data_len);
93+
memcpy(req.nvme_data, (void *)cmd->addr, data_len);
94+
}
9395

9496
req.hdr.expected_rsp_len = (sizeof(rsp.nvme_cqe) + sizeof(rsp.nvme_data));
9597

@@ -120,7 +122,7 @@ int pax_nvme_submit_admin_passthru_4k_rsp(int fd,
120122
struct pax_nvme_device *pax;
121123
struct switchtec_admin_passthru_nvme_req req;
122124
struct switchtec_admin_passthru_nvme_rsp rsp;
123-
size_t data_len;
125+
size_t data_len = 0;
124126
size_t rsp_len;
125127
int status;
126128

@@ -133,12 +135,15 @@ int pax_nvme_submit_admin_passthru_4k_rsp(int fd,
133135
/* sqe[9] should be 0 per spec */
134136
req.nvme_sqe[9] = 0;
135137

136-
if (cmd->data_len > sizeof(req.nvme_data))
137-
data_len = sizeof(req.nvme_data);
138-
else
139-
data_len = cmd->data_len;
138+
if (cmd->opcode & 0x1) {
139+
if (cmd->data_len > sizeof(req.nvme_data))
140+
data_len = sizeof(req.nvme_data);
141+
else
142+
data_len = cmd->data_len;
143+
144+
memcpy(req.nvme_data, (void *)cmd->addr, data_len);
145+
}
140146

141-
memcpy(req.nvme_data, (void *)cmd->addr, data_len);
142147
data_len = data_len + 16 * 4;
143148

144149
rsp_len = (sizeof(rsp.nvme_cqe) + cmd->data_len);

0 commit comments

Comments
 (0)