}
int nvme_get_features_host_id(int fd, enum nvme_get_features_sel sel,
- bool exhid, __u32 len, __u8 *hostid)
+ bool exhid, __u32 len, __u8 *hostid)
+{
+ __u32 result = 0;
+ int err;
+
+ err = nvme_get_features_host_id2(fd, sel, exhid, len, hostid, &result);
+ if (err && result)
+ err = result;
+ return err;
+}
+
+int nvme_get_features_host_id2(int fd, enum nvme_get_features_sel sel,
+ bool exhid, __u32 len, __u8 *hostid, __u32 *result)
{
struct nvme_get_features_args args = {
.args_size = sizeof(args),
.data_len = len,
.data = hostid,
.timeout = NVME_DEFAULT_IOCTL_TIMEOUT,
- .result = NULL,
+ .result = result,
};
return nvme_get_features(&args);
* &enum nvme_status_field) or -1 with errno set otherwise.
*/
int nvme_get_features_host_id(int fd, enum nvme_get_features_sel sel,
- bool exhid, __u32 len, __u8 *hostid);
+ bool exhid, __u32 len, __u8 *hostid);
+
+/**
+ * nvme_get_features_host_id2() - Get host id feature
+ * @fd: File descriptor of nvme device
+ * @sel: Select which type of attribute to return, see &enum nvme_get_features_sel
+ * @exhid: Enable Extended Host Identifier
+ * @len: Length of @hostid
+ * @hostid: Buffer for returned host ID
+ * @result: The command completion result from CQE dword0
+ *
+ * Return: 0 if the ioctl was successful, -1 with errno set to EPROTO when
+ * a non-zero state is returned in @result, or -1 with errno set otherwise.
+ */
+int nvme_get_features_host_id2(int fd, enum nvme_get_features_sel sel,
+ bool exhid, __u32 len, __u8 *hostid, __u32 *result);
/**
* nvme_get_features_resv_mask() - Get reservation mask feature