mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 22:37:45 -04:00
nvme: fix identify error status silent ignore
Commit59c7c3caaaintended to only silently ignore non retry-able errors (DNR bit set) such that we can still identify misbehaving controllers, and in the other hand propagate retry-able errors (DNR bit cleared) so we don't wrongly abandon a namespace just because it happens to be temporarily inaccessible. The goal remains the same as the original commit where this was introduced but unfortunately had the logic backwards. Fixes:59c7c3caaa("nvme: fix possible hang when ns scanning fails during error recovery") Reported-by: Keith Busch <[email protected]> Signed-off-by: Sagi Grimberg <[email protected]> Reviewed-by: Keith Busch <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]>
This commit is contained in:
1 parent
e7eea44eef
commit
ea43d9709f
1 file changed
+9
-3
@@ -1116,10 +1116,16 @@ static int nvme_identify_ns_descs(struct nvme_ctrl *ctrl, unsigned nsid,
|
||||
dev_warn(ctrl->device,
|
||||
"Identify Descriptors failed (%d)\n", status);
|
||||
/*
|
||||
* Don't treat an error as fatal, as we potentially already
|
||||
* have a NGUID or EUI-64.
|
||||
* Don't treat non-retryable errors as fatal, as we potentially
|
||||
* already have a NGUID or EUI-64. If we failed with DNR set,
|
||||
* we want to silently ignore the error as we can still
|
||||
* identify the device, but if the status has DNR set, we want
|
||||
* to propagate the error back specifically for the disk
|
||||
* revalidation flow to make sure we don't abandon the
|
||||
* device just because of a temporal retry-able error (such
|
||||
* as path of transport errors).
|
||||
*/
|
||||
if (status > 0 && !(status & NVME_SC_DNR))
|
||||
if (status > 0 && (status & NVME_SC_DNR))
|
||||
status = 0;
|
||||
goto free_data;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user