]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
Use argument structure for nvme_zns_append()
authorHannes Reinecke <hare@suse.de>
Fri, 17 Dec 2021 07:03:42 +0000 (08:03 +0100)
committerDaniel Wagner <dwagner@suse.de>
Mon, 10 Jan 2022 16:55:18 +0000 (17:55 +0100)
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 <hare@suse.de>
src/nvme/ioctl.c
src/nvme/ioctl.h

index 531763c206f8eece2ce250ec8260a087122034a4..ad1fd0cad91088c913d8301c1566c9370fc42d37 100644 (file)
@@ -1765,31 +1765,30 @@ int nvme_zns_mgmt_recv(struct nvme_zns_mgmt_recv_args *args)
        return nvme_submit_io_passthru(args->fd, &cmd, args->result);
 }
 
-int nvme_zns_append(int fd, __u32 nsid, __u64 zslba, __u16 nlb, __u16 control,
-                   __u32 ilbrt, __u16 lbat, __u16 lbatm, __u32 data_len,
-                   void *data, __u32 metadata_len, void *metadata,
-                   __u32 timeout, __u64 *result)
+int nvme_zns_append(struct nvme_zns_append_args *args)
 {
-       __u32 cdw10 = zslba & 0xffffffff;
-       __u32 cdw11 = zslba >> 32;
-       __u32 cdw12 = nlb | (control << 16);
-       __u32 cdw14 = ilbrt;
-       __u32 cdw15 = lbat | (lbatm << 16);
+       __u32 cdw10 = args->zslba & 0xffffffff;
+       __u32 cdw11 = args->zslba >> 32;
+       __u32 cdw12 = args->nlb | (args->control << 16);
+       __u32 cdw14 = args->ilbrt;
+       __u32 cdw15 = args->lbat | (args->lbatm << 16);
 
        struct nvme_passthru_cmd64 cmd = {
                .opcode         = nvme_zns_cmd_append,
-               .nsid           = nsid,
+               .nsid           = args->nsid,
                .cdw10          = cdw10,
                .cdw11          = cdw11,
                .cdw12          = cdw12,
                .cdw14          = cdw14,
                .cdw15          = cdw15,
-               .metadata       = (__u64)(uintptr_t)metadata,
-               .addr           = (__u64)(uintptr_t)data,
-               .metadata_len   = metadata_len,
-               .data_len       = data_len,
-               .timeout_ms     = timeout,
+               .data_len       = args->data_len,
+               .addr           = (__u64)(uintptr_t)args->data,
+               .metadata_len   = args->metadata_len,
+               .metadata       = (__u64)(uintptr_t)args->metadata,
+               .timeout_ms     = args->timeout,
        };
 
-       return nvme_submit_io_passthru64(fd, &cmd, result);
+       if (args->args_size < sizeof(*args))
+               return -EINVAL;
+       return nvme_submit_io_passthru64(args->fd, &cmd, args->result);
 }
index 42604ca92a0de5aff846ab2ca7cc8e3dd7f21dac..b8b479dfdf8f25a8ec680dc0906f22ce407ee4c5 100644 (file)
@@ -4055,7 +4055,7 @@ static inline int nvme_zns_report_zones(int fd, __u32 nsid, __u64 slba,
 }
 
 /**
- * nvme_zns_append() - Append data to a zone
+ * nvme_zns_append_args - Arguments for the NVMe ZNS Append command
  * @fd:                File descriptor of nvme device
  * @nsid:      Namespace ID
  * @zslba:     Zone start logical block address
@@ -4070,13 +4070,32 @@ static inline int nvme_zns_report_zones(int fd, __u32 nsid, __u64 slba,
  * @metadata:  Userspace address of the metadata
  * @timeout:   Timeout in ms
  * @result:    The command completion result from CQE dword0
+ */
+struct nvme_zns_append_args {
+       int args_size;
+       int fd;
+       __u32 nsid;
+       __u64 zslba;
+       __u16 nlb;
+       __u16 control;
+       __u32 ilbrt;
+       __u16 lbat;
+       __u16 lbatm;
+       __u32 data_len;
+       void *data;
+       __u32 metadata_len;
+       void *metadata;
+       __u32 timeout;
+       __u64 *result;
+};
+
+/**
+ * nvme_zns_append() - Append data to a zone
+ * @args:      &struct nvme_zns_append_args argument structure
  *
  * Return: The nvme command status if a response was received (see
  * &enum nvme_status_field) or -1 with errno set otherwise.
  */
-int nvme_zns_append(int fd, __u32 nsid, __u64 zslba, __u16 nlb, __u16 control,
-                   __u32 ilbrt, __u16 lbat, __u16 lbatm, __u32 data_len,
-                   void *data, __u32 metadata_len, void *metadata,
-                   __u32 timeout, __u64 *result);
+int nvme_zns_append(struct nvme_zns_append_args *args);
 
 #endif /* _LIBNVME_IOCTL_H */