RE: [PATCH 3/3] libsas: fix sas_queuecommand return values

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> ->queuecommand must return either 0, or one of the SCSI_MLQUEUE_* return
> values.  Non-transient errors are indicated by setting cmd->result before
> calling ->scsi_done and returning 0.  Fix libsas to adhere to this calling
> convention.  Note that the DID_ERROR for returns from the low-level driver
> might not be correct for all cases, but it's the best we can do with
> the current layering in libsas.  I also suspect that the pre-existing
> handling of -SAS_QUEUE_FULL should really be SCSI_MLQUEUE_HOST_BUSY, but
> I'll leave that for a separate change.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> 
> Index: linux-2.6/drivers/scsi/libsas/sas_scsi_host.c
> ===================================================================
> --- linux-2.6.orig/drivers/scsi/libsas/sas_scsi_host.c	2011-07-11
> 20:25:25.529428978 +0200
> +++ linux-2.6/drivers/scsi/libsas/sas_scsi_host.c	2011-07-11
> 20:29:22.321479498 +0200
> @@ -207,7 +207,7 @@ int sas_queuecommand(struct Scsi_Host *h
> 
>  	task = sas_create_task(cmd, dev, GFP_ATOMIC);
>  	if (!task)
> -		return -ENOMEM;
> +		return SCSI_MLQUEUE_HOST_BUSY;
> 
>  	/* Queue up, Direct Mode or Task Collector Mode. */
>  	if (sas_ha->lldd_max_execute_num < 2)
> @@ -223,9 +223,10 @@ out_free_task:
>  	SAS_DPRINTK("lldd_execute_task returned: %d\n", res);
>  	ASSIGN_SAS_TASK(cmd, NULL);
>  	sas_free_task(task);
> -	if (res != -SAS_QUEUE_FULL)
> -		return res;
> -	cmd->result = DID_SOFT_ERROR << 16; /* retry */
> +	if (res = -SAS_QUEUE_FULL)
[Jack Wang] Seems you should use res == -SAS_QUEUE_FULL ? 
I will test the patchset and report result later.
> +		cmd->result = DID_SOFT_ERROR << 16; /* retry */
> +	else
> +		cmd->result = DID_ERROR << 16;
>  out_done:
>  	cmd->scsi_done(cmd);
>  	return 0;
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux