diff mbox

[for-2.0] iscsi: recognize "invalid field" ASCQ from WRITE SAME command

Message ID 1396442728-32321-1-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini April 2, 2014, 12:45 p.m. UTC
Some targets may return "invalid field" as the ASCQ from WRITE SAME
if they support the command only without the UNMAP field.  Recognize
that, and return ENOTSUP just like for "invalid operation code".

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/iscsi.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Peter Lieven April 2, 2014, 8:32 p.m. UTC | #1
Am 02.04.2014 14:45, schrieb Paolo Bonzini:
> Some targets may return "invalid field" as the ASCQ from WRITE SAME
> if they support the command only without the UNMAP field.  Recognize
> that, and return ENOTSUP just like for "invalid operation code".
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/iscsi.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/block/iscsi.c b/block/iscsi.c
> index 6d6cd4f..f01c883 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -1012,7 +1012,8 @@ retry:
>  
>      if (iTask.status == SCSI_STATUS_CHECK_CONDITION &&
>          iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
> -        iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE) {
> +        (iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE ||
> +	 iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB)) {
>          /* WRITE SAME is not supported by the target */
>          iscsilun->has_write_same = false;
>          scsi_free_scsi_task(iTask.task);

I also checked that

SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB

is available in libiscsi 1.4.0 already.


Reviewed-by: Peter Lieven <pl@kamp.de>
diff mbox

Patch

diff --git a/block/iscsi.c b/block/iscsi.c
index 6d6cd4f..f01c883 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1012,7 +1012,8 @@  retry:
 
     if (iTask.status == SCSI_STATUS_CHECK_CONDITION &&
         iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
-        iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE) {
+        (iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE ||
+	 iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB)) {
         /* WRITE SAME is not supported by the target */
         iscsilun->has_write_same = false;
         scsi_free_scsi_task(iTask.task);