On 03/28/2013 02:32 PM, Jeff Moyer wrote:
> Hi,
> 
> If blk_get_requet fails here, it means that the queue is dead.  It seems
> better to return a DEV_OFFLINED error code than the misleading
> TEMP_UNAVAIL.  Comments?
> 
> Signed-off-by: Jeff Moyer <jmo...@redhat.com>
> 
> diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c 
> b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
> index 084062b..eec24d3 100644
> --- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c
> +++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
> @@ -118,7 +118,7 @@ static int hp_sw_tur(struct scsi_device *sdev, struct 
> hp_sw_dh_data *h)
>  retry:
>       req = blk_get_request(sdev->request_queue, WRITE, GFP_NOIO);
>       if (!req)
> -             return SCSI_DH_RES_TEMP_UNAVAIL;
> +             return SCSI_DH_DEV_OFFLINED;

Can we always assume that if using GFP_NOIO then resource allocation
failures will never be returned to us? If so, then the patch is fine. If
not then do we want to base this patch on top of "block: handle pointer
error from blk_get_request" and check the return value. If -ENOMEM then
return SCSI_DH_RES_TEMP_UNAVAIL, and if -ENODEV then return
SCSI_DH_DEV_OFFLINED.

You probably then want to also fix up scsi_dh_alua and scsi_dh_emc the
same way. It looks like they have the same issue.

scsi_dh_emc looks like it has extra errors in that the failure checks
for send_inquiry_cmd do not handle get_req failures properly. It looks
like it ignore them if the senselen is not set.


>  
>       req->cmd_type = REQ_TYPE_BLOCK_PC;
>       req->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to