The ioctl might return 0, but the NVMe status might indicate an
error. In these cases we should return EPROTO to indicate that
the command did not succeed.
Signed-off-by: Hannes Reinecke <hare@suse.de>
{
int err = ioctl(fd, ioctl_cmd, cmd);
- if (err >= 0 && result)
- *result = cmd->result;
+ if (err >= 0) {
+ if (result)
+ *result = cmd->result;
+ if (cmd->result) {
+ errno = EPROTO;
+ err = -1;
+ }
+ }
return err;
}
{
int err = ioctl(fd, ioctl_cmd, cmd);
- if (err >= 0 && result)
- *result = cmd->result;
+ if (err >= 0) {
+ if (result)
+ *result = cmd->result;
+ if (cmd->result) {
+ errno = EPROTO;
+ err = -1;
+ }
+ }
return err;
}
#define TEST_CDW15 0x15151515
#define TEST_UUIDX 0b1001110
#define TEST_FID 0xFE
-#define TEST_RESULT 0x12345678
+#define TEST_RESULT 0x0
#define TEST_SEL NVME_GET_FEATURES_SEL_SAVED
#define TEST_SC NVME_SC_INVALID_FIELD