47 lines
1.6 KiB
Diff
47 lines
1.6 KiB
Diff
From 23435e436dca1d54d847df704cd947ef56736e65 Mon Sep 17 00:00:00 2001
|
|
From: dpgilbert <authors@smartmontools.org>
|
|
Date: Wed, 27 Dec 2017 05:50:47 +0000
|
|
Subject: [PATCH 073/291] os_freebsd.cpp: on error was setting set_nvme_err()
|
|
to 1, fix
|
|
|
|
git-svn-id: http://svn.code.sf.net/p/smartmontools/code/trunk@4670 4ea69e1a-61f1-4043-bf83-b5c94c648137
|
|
---
|
|
smartmontools/ChangeLog | 5 +++++
|
|
smartmontools/os_freebsd.cpp | 11 ++++++++---
|
|
2 files changed, 13 insertions(+), 3 deletions(-)
|
|
|
|
|
|
diff --git a/smartmontools/os_freebsd.cpp b/smartmontools/os_freebsd.cpp
|
|
index 92e225f8..c0bb3b85 100644
|
|
--- a/smartmontools/os_freebsd.cpp
|
|
+++ b/smartmontools/os_freebsd.cpp
|
|
@@ -519,6 +519,7 @@ bool freebsd_nvme_device::nvme_pass_through(const nvme_cmd_in & in, nvme_cmd_out
|
|
{
|
|
// nvme_passthru_cmd pt;
|
|
struct nvme_pt_command pt;
|
|
+ struct nvme_completion *cp_p;
|
|
memset(&pt, 0, sizeof(pt));
|
|
|
|
pt.cmd.opc = in.opcode;
|
|
@@ -538,10 +539,14 @@ bool freebsd_nvme_device::nvme_pass_through(const nvme_cmd_in & in, nvme_cmd_out
|
|
if (status < 0)
|
|
return set_err(errno, "NVME_PASSTHROUGH_CMD: %s", strerror(errno));
|
|
|
|
- out.result=pt.cpl.cdw0; // Command specific result (DW0)
|
|
+ cp_p = &pt.cpl;
|
|
+ out.result=cp_p->cdw0; // Command specific result (DW0)
|
|
|
|
- if (nvme_completion_is_error(&pt.cpl))
|
|
- return set_nvme_err(out, nvme_completion_is_error(&pt.cpl));
|
|
+ if (nvme_completion_is_error(cp_p)) { /* ignore DNR and More bits */
|
|
+ uint16_t nvme_status = ((cp_p->status.sct << 8) | cp_p->status.sc) & 0x3ff;
|
|
+
|
|
+ return set_nvme_err(out, nvme_status);
|
|
+ }
|
|
|
|
return true;
|
|
}
|
|
--
|
|
2.19.1
|
|
|