Skip to content

Commit 7eb8331

Browse files
hreineckedwsuse
authored andcommitted
Use argument structure for nvme_zns_append()
Use an argument structure instead of passing all arguments one by one. This allows for a future expansion of the argument list without having to change the library ABI. Signed-off-by: Hannes Reinecke <[email protected]>
1 parent f081393 commit 7eb8331

2 files changed

Lines changed: 39 additions & 21 deletions

File tree

src/nvme/ioctl.c

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,31 +1765,30 @@ int nvme_zns_mgmt_recv(struct nvme_zns_mgmt_recv_args *args)
17651765
return nvme_submit_io_passthru(args->fd, &cmd, args->result);
17661766
}
17671767

1768-
int nvme_zns_append(int fd, __u32 nsid, __u64 zslba, __u16 nlb, __u16 control,
1769-
__u32 ilbrt, __u16 lbat, __u16 lbatm, __u32 data_len,
1770-
void *data, __u32 metadata_len, void *metadata,
1771-
__u32 timeout, __u64 *result)
1768+
int nvme_zns_append(struct nvme_zns_append_args *args)
17721769
{
1773-
__u32 cdw10 = zslba & 0xffffffff;
1774-
__u32 cdw11 = zslba >> 32;
1775-
__u32 cdw12 = nlb | (control << 16);
1776-
__u32 cdw14 = ilbrt;
1777-
__u32 cdw15 = lbat | (lbatm << 16);
1770+
__u32 cdw10 = args->zslba & 0xffffffff;
1771+
__u32 cdw11 = args->zslba >> 32;
1772+
__u32 cdw12 = args->nlb | (args->control << 16);
1773+
__u32 cdw14 = args->ilbrt;
1774+
__u32 cdw15 = args->lbat | (args->lbatm << 16);
17781775

17791776
struct nvme_passthru_cmd64 cmd = {
17801777
.opcode = nvme_zns_cmd_append,
1781-
.nsid = nsid,
1778+
.nsid = args->nsid,
17821779
.cdw10 = cdw10,
17831780
.cdw11 = cdw11,
17841781
.cdw12 = cdw12,
17851782
.cdw14 = cdw14,
17861783
.cdw15 = cdw15,
1787-
.metadata = (__u64)(uintptr_t)metadata,
1788-
.addr = (__u64)(uintptr_t)data,
1789-
.metadata_len = metadata_len,
1790-
.data_len = data_len,
1791-
.timeout_ms = timeout,
1784+
.data_len = args->data_len,
1785+
.addr = (__u64)(uintptr_t)args->data,
1786+
.metadata_len = args->metadata_len,
1787+
.metadata = (__u64)(uintptr_t)args->metadata,
1788+
.timeout_ms = args->timeout,
17921789
};
17931790

1794-
return nvme_submit_io_passthru64(fd, &cmd, result);
1791+
if (args->args_size < sizeof(*args))
1792+
return -EINVAL;
1793+
return nvme_submit_io_passthru64(args->fd, &cmd, args->result);
17951794
}

src/nvme/ioctl.h

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4055,7 +4055,7 @@ static inline int nvme_zns_report_zones(int fd, __u32 nsid, __u64 slba,
40554055
}
40564056

40574057
/**
4058-
* nvme_zns_append() - Append data to a zone
4058+
* nvme_zns_append_args - Arguments for the NVMe ZNS Append command
40594059
* @fd: File descriptor of nvme device
40604060
* @nsid: Namespace ID
40614061
* @zslba: Zone start logical block address
@@ -4070,13 +4070,32 @@ static inline int nvme_zns_report_zones(int fd, __u32 nsid, __u64 slba,
40704070
* @metadata: Userspace address of the metadata
40714071
* @timeout: Timeout in ms
40724072
* @result: The command completion result from CQE dword0
4073+
*/
4074+
struct nvme_zns_append_args {
4075+
int args_size;
4076+
int fd;
4077+
__u32 nsid;
4078+
__u64 zslba;
4079+
__u16 nlb;
4080+
__u16 control;
4081+
__u32 ilbrt;
4082+
__u16 lbat;
4083+
__u16 lbatm;
4084+
__u32 data_len;
4085+
void *data;
4086+
__u32 metadata_len;
4087+
void *metadata;
4088+
__u32 timeout;
4089+
__u64 *result;
4090+
};
4091+
4092+
/**
4093+
* nvme_zns_append() - Append data to a zone
4094+
* @args: &struct nvme_zns_append_args argument structure
40734095
*
40744096
* Return: The nvme command status if a response was received (see
40754097
* &enum nvme_status_field) or -1 with errno set otherwise.
40764098
*/
4077-
int nvme_zns_append(int fd, __u32 nsid, __u64 zslba, __u16 nlb, __u16 control,
4078-
__u32 ilbrt, __u16 lbat, __u16 lbatm, __u32 data_len,
4079-
void *data, __u32 metadata_len, void *metadata,
4080-
__u32 timeout, __u64 *result);
4099+
int nvme_zns_append(struct nvme_zns_append_args *args);
40814100

40824101
#endif /* _LIBNVME_IOCTL_H */

0 commit comments

Comments
 (0)