Re: [PATCH 05/23] scsi_dh_alua: return standard SCSI return codes in submit_rtpg

2015-09-01 Thread Christoph Hellwig
On Thu, Aug 27, 2015 at 02:41:03PM +0200, Hannes Reinecke wrote:
> Fixup submit_rtpg() to always return a standard SCSI return code.

Oh, this fixes the problems in the previous patch up.  Maybe just skip the
error handling changes in the previous patch and keep them purely in this
one?

> + if (driver_byte(retval) == DRIVER_BUSY)
> + err = SCSI_DH_DEV_TEMP_BUSY;
> + else
> + err = SCSI_DH_IO;
> + return err;

This could be simplified to:

if (driver_byte(retval) == DRIVER_BUSY)
return SCSI_DH_DEV_TEMP_BUSY;
return SCSI_DH_IO;
--
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


Re: [PATCH 05/23] scsi_dh_alua: return standard SCSI return codes in submit_rtpg

2015-09-22 Thread Ewan Milne
On Thu, 2015-08-27 at 14:41 +0200, Hannes Reinecke wrote:
> Fixup submit_rtpg() to always return a standard SCSI return code.
> 
> Signed-off-by: Hannes Reinecke 
> ---
>  drivers/scsi/device_handler/scsi_dh_alua.c | 38 
> +-
>  1 file changed, 22 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c 
> b/drivers/scsi/device_handler/scsi_dh_alua.c
> index 7b43ee3..c41d662 100644
> --- a/drivers/scsi/device_handler/scsi_dh_alua.c
> +++ b/drivers/scsi/device_handler/scsi_dh_alua.c
> @@ -139,11 +139,13 @@ static unsigned submit_rtpg(struct scsi_device *sdev, 
> struct alua_dh_data *h,
>   bool rtpg_ext_hdr_req)
>  {
>   struct request *rq;
> - int err = SCSI_DH_RES_TEMP_UNAVAIL;
> + int err = 0;
>  
>   rq = get_alua_req(sdev, h->buff, h->bufflen, READ);
> - if (!rq)
> + if (!rq) {
> + err = DRIVER_BUSY << 24;
>   goto done;
> + }
>  
>   /* Prepare the command. */
>   rq->cmd[0] = MAINTENANCE_IN;
> @@ -161,13 +163,10 @@ static unsigned submit_rtpg(struct scsi_device *sdev, 
> struct alua_dh_data *h,
>   memset(rq->sense, 0, SCSI_SENSE_BUFFERSIZE);
>   rq->sense_len = h->senselen = 0;
>  
> - err = blk_execute_rq(rq->q, NULL, rq, 1);
> - if (err == -EIO) {
> - sdev_printk(KERN_INFO, sdev,
> - "%s: rtpg failed with %x\n",
> - ALUA_DH_NAME, rq->errors);
> + blk_execute_rq(rq->q, NULL, rq, 1);
> + if (rq->errors) {
> + err = rq->errors;
>   h->senselen = rq->sense_len;
> - err = SCSI_DH_IO;
>   }
>   blk_put_request(rq);
>  done:
> @@ -489,7 +488,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct 
> alua_dh_data *h, int wait_
>   struct scsi_sense_hdr sense_hdr;
>   int len, k, off, valid_states = 0;
>   unsigned char *ucp;
> - unsigned err;
> + unsigned err, retval;
>   bool rtpg_ext_hdr_req = 1;
>   unsigned long expiry, interval = 0;
>   unsigned int tpg_desc_tbl_off;
> @@ -501,13 +500,20 @@ static int alua_rtpg(struct scsi_device *sdev, struct 
> alua_dh_data *h, int wait_
>   expiry = round_jiffies_up(jiffies + h->transition_tmo * HZ);
>  
>   retry:
> - err = submit_rtpg(sdev, h, rtpg_ext_hdr_req);
> -
> - if (err == SCSI_DH_IO && h->senselen > 0) {
> - err = scsi_normalize_sense(h->sense, SCSI_SENSE_BUFFERSIZE,
> -&sense_hdr);
> - if (!err)
> - return SCSI_DH_IO;
> + retval = submit_rtpg(sdev, h, rtpg_ext_hdr_req);
> +
> + if (retval) {
> + if (!scsi_normalize_sense(h->sense, SCSI_SENSE_BUFFERSIZE,
> +   &sense_hdr)) {
> + sdev_printk(KERN_INFO, sdev,
> + "%s: rtpg failed, result %d\n",
> + ALUA_DH_NAME, retval);
> + if (driver_byte(retval) == DRIVER_BUSY)
> + err = SCSI_DH_DEV_TEMP_BUSY;
> + else
> + err = SCSI_DH_IO;
> + return err;
> + }
>  
>   /*
>* submit_rtpg() has failed on existing arrays

Reviewed-by: Ewan D. Milne 


--
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