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 <kbusch@kernel.org> Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Keith Busch <kbusch@kernel.org> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
		
							parent
							
								
									e7eea44eef
								
							
						
					
					
						commit
						ea43d9709f
					
				| @ -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; | ||||
| 	} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user