Skip to content

Commit 9d06ed1

Browse files
committed
[WIP] libnvme: use 64-bit version struct nvme_passtru_cmd everywhere
The linux commit 65e68edce0db ("nvme: allow 64-bit results in passthru commands") introduced the 64-bit version of the passthru. Reduce the complexity of the library by just offering one passthru data structure. Signed-off-by: Daniel Wagner <[email protected]>
1 parent 13cee90 commit 9d06ed1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+645
-973
lines changed

libnvme/src/libnvme.map

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ LIBNVME_1_16 {
1313

1414
LIBNVME_2_0 {
1515
global:
16-
nvme_admin_passthru64;
17-
nvme_admin_passthru;
1816
nvme_close;
1917
nvme_create_ctrl;
2018
nvme_create_global_ctx;
@@ -132,8 +130,6 @@ LIBNVME_2_0 {
132130
nvme_init_logging;
133131
nvme_insert_tls_key;
134132
nvme_insert_tls_key_versioned;
135-
nvme_io_passthru64;
136-
nvme_io_passthru;
137133
nvme_ipaddrs_eq;
138134
nvme_lookup_ctrl;
139135
nvme_lookup_host;
@@ -250,12 +246,8 @@ LIBNVME_2_0 {
250246
nvme_skip_namespaces;
251247
nvme_status_to_errno;
252248
nvme_status_to_string;
253-
nvme_submit_admin_passthru64;
254249
nvme_submit_admin_passthru;
255-
nvme_submit_io_passthru64;
256250
nvme_submit_io_passthru;
257-
nvme_submit_passthru64;
258-
nvme_submit_passthru;
259251
nvme_subsys_filter;
260252
nvme_subsystem_first_ctrl;
261253
nvme_subsystem_first_ns;

libnvme/src/nvme/ioctl.c

Lines changed: 12 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ int nvme_get_nsid(struct nvme_transport_handle *hdl, __u32 *nsid)
100100
}
101101

102102
__attribute__((weak))
103-
int nvme_submit_passthru64(struct nvme_transport_handle *hdl, unsigned long ioctl_cmd,
104-
struct nvme_passthru_cmd64 *cmd,
105-
__u64 *result)
103+
int nvme_submit_passthru(struct nvme_transport_handle *hdl,
104+
unsigned long ioctl_cmd, struct nvme_passthru_cmd *cmd,
105+
__u64 *result)
106106
{
107107
int err = ioctl(hdl->fd, ioctl_cmd, cmd);
108108

@@ -113,132 +113,22 @@ int nvme_submit_passthru64(struct nvme_transport_handle *hdl, unsigned long ioct
113113
return err;
114114
}
115115

116-
__attribute__((weak))
117-
int nvme_submit_passthru(struct nvme_transport_handle *hdl, unsigned long ioctl_cmd,
118-
struct nvme_passthru_cmd *cmd, __u32 *result)
119-
{
120-
int err = ioctl(hdl->fd, ioctl_cmd, cmd);
121-
122-
if (err >= 0 && result)
123-
*result = cmd->result;
124-
if (err < 0)
125-
return -errno;
126-
return err;
127-
}
128-
129-
static int nvme_passthru64(struct nvme_transport_handle *hdl, unsigned long ioctl_cmd, __u8 opcode,
130-
__u8 flags, __u16 rsvd, __u32 nsid, __u32 cdw2,
131-
__u32 cdw3, __u32 cdw10, __u32 cdw11, __u32 cdw12,
132-
__u32 cdw13, __u32 cdw14, __u32 cdw15,
133-
__u32 data_len, void *data, __u32 metadata_len,
134-
void *metadata, __u32 timeout_ms, __u64 *result)
135-
{
136-
struct nvme_passthru_cmd64 cmd = {
137-
.opcode = opcode,
138-
.flags = flags,
139-
.rsvd1 = rsvd,
140-
.nsid = nsid,
141-
.cdw2 = cdw2,
142-
.cdw3 = cdw3,
143-
.metadata = (__u64)(uintptr_t)metadata,
144-
.addr = (__u64)(uintptr_t)data,
145-
.metadata_len = metadata_len,
146-
.data_len = data_len,
147-
.cdw10 = cdw10,
148-
.cdw11 = cdw11,
149-
.cdw12 = cdw12,
150-
.cdw13 = cdw13,
151-
.cdw14 = cdw14,
152-
.cdw15 = cdw15,
153-
.timeout_ms = timeout_ms,
154-
};
155-
156-
return nvme_submit_passthru64(hdl, ioctl_cmd, &cmd, result);
157-
}
158-
159-
static int nvme_passthru(struct nvme_transport_handle *hdl, unsigned long ioctl_cmd, __u8 opcode,
160-
__u8 flags, __u16 rsvd, __u32 nsid, __u32 cdw2,
161-
__u32 cdw3, __u32 cdw10, __u32 cdw11, __u32 cdw12,
162-
__u32 cdw13, __u32 cdw14, __u32 cdw15, __u32 data_len,
163-
void *data, __u32 metadata_len, void *metadata,
164-
__u32 timeout_ms, __u32 *result)
165-
{
166-
struct nvme_passthru_cmd cmd = {
167-
.opcode = opcode,
168-
.flags = flags,
169-
.rsvd1 = rsvd,
170-
.nsid = nsid,
171-
.cdw2 = cdw2,
172-
.cdw3 = cdw3,
173-
.metadata = (__u64)(uintptr_t)metadata,
174-
.addr = (__u64)(uintptr_t)data,
175-
.metadata_len = metadata_len,
176-
.data_len = data_len,
177-
.cdw10 = cdw10,
178-
.cdw11 = cdw11,
179-
.cdw12 = cdw12,
180-
.cdw13 = cdw13,
181-
.cdw14 = cdw14,
182-
.cdw15 = cdw15,
183-
.timeout_ms = timeout_ms,
184-
};
185-
186-
return nvme_submit_passthru(hdl, ioctl_cmd, &cmd, result);
187-
}
188-
189-
int nvme_submit_admin_passthru64(struct nvme_transport_handle *hdl, struct nvme_passthru_cmd64 *cmd,
190-
__u64 *result)
191-
{
192-
return nvme_submit_passthru64(hdl, NVME_IOCTL_ADMIN64_CMD, cmd, result);
193-
}
194-
195-
int nvme_admin_passthru64(struct nvme_transport_handle *hdl, __u8 opcode, __u8 flags, __u16 rsvd,
196-
__u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10,
197-
__u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14,
198-
__u32 cdw15, __u32 data_len, void *data,
199-
__u32 metadata_len, void *metadata, __u32 timeout_ms,
200-
__u64 *result)
201-
{
202-
return nvme_passthru64(hdl, NVME_IOCTL_ADMIN64_CMD, opcode, flags, rsvd,
203-
nsid, cdw2, cdw3, cdw10, cdw11, cdw12, cdw13,
204-
cdw14, cdw15, data_len, data, metadata_len,
205-
metadata, timeout_ms, result);
206-
}
207-
208-
int nvme_submit_admin_passthru(struct nvme_transport_handle *hdl, struct nvme_passthru_cmd *cmd, __u32 *result)
116+
int nvme_submit_admin_passthru(struct nvme_transport_handle *hdl,
117+
struct nvme_passthru_cmd *cmd, __u64 *result)
209118
{
210119
switch (hdl->type) {
211120
case NVME_TRANSPORT_HANDLE_TYPE_DIRECT:
212-
return nvme_submit_passthru(hdl, NVME_IOCTL_ADMIN_CMD, cmd, result);
121+
return nvme_submit_passthru(hdl, NVME_IOCTL_ADMIN64_CMD,
122+
cmd, result);
213123
case NVME_TRANSPORT_HANDLE_TYPE_MI:
214-
return nvme_mi_admin_admin_passthru(
215-
hdl, cmd->opcode, cmd->flags, cmd->rsvd1,
216-
cmd->nsid, cmd->cdw2, cmd->cdw3, cmd->cdw10,
217-
cmd->cdw11, cmd->cdw12, cmd->cdw13,
218-
cmd->cdw14, cmd->cdw15,
219-
cmd->data_len, (void *)(uintptr_t)cmd->addr,
220-
cmd->metadata_len, (void *)(uintptr_t)cmd->metadata,
221-
cmd->timeout_ms, result);
124+
return nvme_mi_admin_admin_passthru(hdl, cmd, result);
222125
default:
223126
break;
224127
}
225128

226129
return -ENOTSUP;
227130
}
228131

229-
int nvme_admin_passthru(struct nvme_transport_handle *hdl, __u8 opcode, __u8 flags, __u16 rsvd,
230-
__u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10,
231-
__u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14,
232-
__u32 cdw15, __u32 data_len, void *data,
233-
__u32 metadata_len, void *metadata, __u32 timeout_ms,
234-
__u32 *result)
235-
{
236-
return nvme_passthru(hdl, NVME_IOCTL_ADMIN_CMD, opcode, flags, rsvd,
237-
nsid, cdw2, cdw3, cdw10, cdw11, cdw12, cdw13,
238-
cdw14, cdw15, data_len, data, metadata_len,
239-
metadata, timeout_ms, result);
240-
}
241-
242132
static bool force_4k;
243133

244134
__attribute__((constructor))
@@ -356,7 +246,7 @@ static bool nvme_uring_is_usable(struct nvme_transport_handle *hdl)
356246

357247
int nvme_get_log(struct nvme_transport_handle *hdl,
358248
struct nvme_passthru_cmd *cmd, bool rae,
359-
__u32 xfer_len, __u32 *result)
249+
__u32 xfer_len, __u64 *result)
360250
{
361251
__u64 offset = 0, xfer, data_len = cmd->data_len;
362252
__u64 start = (__u64)cmd->cdw13 << 32 | cmd->cdw12;
@@ -581,37 +471,8 @@ int nvme_get_ana_log_atomic(struct nvme_transport_handle *hdl, bool rae, bool rg
581471
return -EAGAIN;
582472
}
583473

584-
int nvme_submit_io_passthru64(struct nvme_transport_handle *hdl, struct nvme_passthru_cmd64 *cmd,
585-
__u64 *result)
586-
{
587-
return nvme_submit_passthru64(hdl, NVME_IOCTL_IO64_CMD, cmd, result);
588-
}
589-
590-
int nvme_io_passthru64(struct nvme_transport_handle *hdl, __u8 opcode, __u8 flags, __u16 rsvd,
591-
__u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10,
592-
__u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14,
593-
__u32 cdw15, __u32 data_len, void *data, __u32 metadata_len,
594-
void *metadata, __u32 timeout_ms, __u64 *result)
595-
{
596-
return nvme_passthru64(hdl, NVME_IOCTL_IO64_CMD, opcode, flags, rsvd,
597-
nsid, cdw2, cdw3, cdw10, cdw11, cdw12, cdw13,
598-
cdw14, cdw15, data_len, data, metadata_len, metadata,
599-
timeout_ms, result);
600-
}
601-
602-
int nvme_submit_io_passthru(struct nvme_transport_handle *hdl, struct nvme_passthru_cmd *cmd, __u32 *result)
603-
{
604-
return nvme_submit_passthru(hdl, NVME_IOCTL_IO_CMD, cmd, result);
605-
}
606-
607-
int nvme_io_passthru(struct nvme_transport_handle *hdl, __u8 opcode, __u8 flags, __u16 rsvd,
608-
__u32 nsid, __u32 cdw2, __u32 cdw3, __u32 cdw10,
609-
__u32 cdw11, __u32 cdw12, __u32 cdw13, __u32 cdw14,
610-
__u32 cdw15, __u32 data_len, void *data, __u32 metadata_len,
611-
void *metadata, __u32 timeout_ms, __u32 *result)
474+
int nvme_submit_io_passthru(struct nvme_transport_handle *hdl,
475+
struct nvme_passthru_cmd *cmd, __u64 *result)
612476
{
613-
return nvme_passthru(hdl, NVME_IOCTL_IO_CMD, opcode, flags, rsvd, nsid,
614-
cdw2, cdw3, cdw10, cdw11, cdw12, cdw13, cdw14,
615-
cdw15, data_len, data, metadata_len, metadata,
616-
timeout_ms, result);
477+
return nvme_submit_passthru(hdl, NVME_IOCTL_IO64_CMD, cmd, result);
617478
}

0 commit comments

Comments
 (0)