diff mbox

scsi: ILLEGAL REQUEST + ASC==27 => target failure

Message ID 20170927124419.23637-1-mwilck@suse.com (mailing list archive)
State Accepted
Headers show

Commit Message

Martin Wilck Sept. 27, 2017, 12:44 p.m. UTC
ASC 0x27 is "WRITE PROTECTED". This error code is returned e.g.
by Fujitsu ETERNUS systems under certain conditions for
WRITE SAME 16 commands with UNMAP bit set. It should not be
treated as a path error. In general, it makes sense to assume
that being write protected is a target rather than a path
property.

Signed-off-by: Martin Wilck <mwilck@suse.com>
---
 drivers/scsi/scsi_error.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Lee Duncan Sept. 27, 2017, 4:11 p.m. UTC | #1
On 09/27/2017 05:44 AM, Martin Wilck wrote:
> ASC 0x27 is "WRITE PROTECTED". This error code is returned e.g.
> by Fujitsu ETERNUS systems under certain conditions for
> WRITE SAME 16 commands with UNMAP bit set. It should not be
> treated as a path error. In general, it makes sense to assume
> that being write protected is a target rather than a path
> property.
> 
> Signed-off-by: Martin Wilck <mwilck@suse.com>
> ---
>  drivers/scsi/scsi_error.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
> index 38942050b265..dab876c65473 100644
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -580,7 +580,8 @@ int scsi_check_sense(struct scsi_cmnd *scmd)
>  		if (sshdr.asc == 0x20 || /* Invalid command operation code */
>  		    sshdr.asc == 0x21 || /* Logical block address out of range */
>  		    sshdr.asc == 0x24 || /* Invalid field in cdb */
> -		    sshdr.asc == 0x26) { /* Parameter value invalid */
> +		    sshdr.asc == 0x26 || /* Parameter value invalid */
> +		    sshdr.asc == 0x27) { /* Write protected */
>  			set_host_byte(scmd, DID_TARGET_FAILURE);
>  		}
>  		return SUCCESS;
> 

Looks good to me.

Acked-by: Lee Duncan <lduncan@suse.com>
Martin K. Petersen Sept. 28, 2017, 1:56 a.m. UTC | #2
Martin,

> ASC 0x27 is "WRITE PROTECTED". This error code is returned e.g.  by
> Fujitsu ETERNUS systems under certain conditions for WRITE SAME 16
> commands with UNMAP bit set. It should not be treated as a path
> error. In general, it makes sense to assume that being write protected
> is a target rather than a path property.

Applied to 4.14/scsi-fixes. Thanks!
diff mbox

Patch

diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 38942050b265..dab876c65473 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -580,7 +580,8 @@  int scsi_check_sense(struct scsi_cmnd *scmd)
 		if (sshdr.asc == 0x20 || /* Invalid command operation code */
 		    sshdr.asc == 0x21 || /* Logical block address out of range */
 		    sshdr.asc == 0x24 || /* Invalid field in cdb */
-		    sshdr.asc == 0x26) { /* Parameter value invalid */
+		    sshdr.asc == 0x26 || /* Parameter value invalid */
+		    sshdr.asc == 0x27) { /* Write protected */
 			set_host_byte(scmd, DID_TARGET_FAILURE);
 		}
 		return SUCCESS;