Message ID | 1440679281-13234-6-git-send-email-hare@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 <hare@suse.de> > --- > 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 <emilne@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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
Fixup submit_rtpg() to always return a standard SCSI return code. Signed-off-by: Hannes Reinecke <hare@suse.de> --- drivers/scsi/device_handler/scsi_dh_alua.c | 38 +++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-)