Pass in the buffer as a function argument for submit_vpd() and
submit_rtpg().

Signed-off-by: Hannes Reinecke <h...@suse.de>
---
 drivers/scsi/device_handler/scsi_dh_alua.c | 44 ++++++++++++++++--------------
 1 file changed, 24 insertions(+), 20 deletions(-)

diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c 
b/drivers/scsi/device_handler/scsi_dh_alua.c
index ece2255..5358c2f 100644
--- a/drivers/scsi/device_handler/scsi_dh_alua.c
+++ b/drivers/scsi/device_handler/scsi_dh_alua.c
@@ -143,12 +143,13 @@ static struct request *get_alua_req(struct scsi_device 
*sdev,
  * submit_vpd_inquiry - Issue an INQUIRY VPD page 0x83 command
  * @sdev: sdev the command should be sent to
  */
-static int submit_vpd_inquiry(struct scsi_device *sdev, struct alua_dh_data *h)
+static int submit_vpd_inquiry(struct scsi_device *sdev, unsigned char *buff,
+                             int bufflen, unsigned char *sense)
 {
        struct request *rq;
        int err;
 
-       rq = get_alua_req(sdev, h->buff, h->bufflen, READ);
+       rq = get_alua_req(sdev, buff, bufflen, READ);
        if (!rq) {
                err = DRIVER_BUSY << 24;
                goto done;
@@ -158,12 +159,12 @@ static int submit_vpd_inquiry(struct scsi_device *sdev, 
struct alua_dh_data *h)
        rq->cmd[0] = INQUIRY;
        rq->cmd[1] = 1;
        rq->cmd[2] = 0x83;
-       rq->cmd[4] = h->bufflen;
+       rq->cmd[4] = bufflen;
        rq->cmd_len = COMMAND_SIZE(INQUIRY);
 
-       rq->sense = h->sense;
+       rq->sense = sense;
        memset(rq->sense, 0, SCSI_SENSE_BUFFERSIZE);
-       rq->sense_len = h->senselen = 0;
+       rq->sense_len = 0;
 
        err = blk_execute_rq(rq->q, NULL, rq, 1);
        if (err < 0) {
@@ -171,7 +172,8 @@ static int submit_vpd_inquiry(struct scsi_device *sdev, 
struct alua_dh_data *h)
                        err = DID_ERROR << 16;
                else
                        err = rq->errors;
-               h->senselen = rq->sense_len;
+               if (rq->sense_len)
+                       err |= (DRIVER_SENSE << 24);
        }
        blk_put_request(rq);
 done:
@@ -182,12 +184,13 @@ done:
  * submit_rtpg - Issue a REPORT TARGET GROUP STATES command
  * @sdev: sdev the command should be sent to
  */
-static unsigned submit_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
+static unsigned submit_rtpg(struct scsi_device *sdev, unsigned char *buff,
+                           int bufflen, unsigned char *sense, int flags)
 {
        struct request *rq;
        int err;
 
-       rq = get_alua_req(sdev, h->buff, h->bufflen, READ);
+       rq = get_alua_req(sdev, buff, bufflen, READ);
        if (!rq) {
                err = DRIVER_BUSY << 24;
                goto done;
@@ -195,19 +198,19 @@ static unsigned submit_rtpg(struct scsi_device *sdev, 
struct alua_dh_data *h)
 
        /* Prepare the command. */
        rq->cmd[0] = MAINTENANCE_IN;
-       if (!(h->flags & ALUA_RTPG_EXT_HDR_UNSUPP))
+       if (!(flags & ALUA_RTPG_EXT_HDR_UNSUPP))
                rq->cmd[1] = MI_REPORT_TARGET_PGS | MI_EXT_HDR_PARAM_FMT;
        else
                rq->cmd[1] = MI_REPORT_TARGET_PGS;
-       rq->cmd[6] = (h->bufflen >> 24) & 0xff;
-       rq->cmd[7] = (h->bufflen >> 16) & 0xff;
-       rq->cmd[8] = (h->bufflen >>  8) & 0xff;
-       rq->cmd[9] = h->bufflen & 0xff;
+       rq->cmd[6] = (bufflen >> 24) & 0xff;
+       rq->cmd[7] = (bufflen >> 16) & 0xff;
+       rq->cmd[8] = (bufflen >>  8) & 0xff;
+       rq->cmd[9] = bufflen & 0xff;
        rq->cmd_len = COMMAND_SIZE(MAINTENANCE_IN);
 
-       rq->sense = h->sense;
+       rq->sense = sense;
        memset(rq->sense, 0, SCSI_SENSE_BUFFERSIZE);
-       rq->sense_len = h->senselen = 0;
+       rq->sense_len = 0;
 
        err = blk_execute_rq(rq->q, NULL, rq, 1);
        if (err < 0) {
@@ -215,7 +218,8 @@ static unsigned submit_rtpg(struct scsi_device *sdev, 
struct alua_dh_data *h)
                        err = DID_ERROR << 16;
                else
                        err = rq->errors;
-               h->senselen = rq->sense_len;
+               if (rq->sense_len)
+                       err |= (DRIVER_SENSE << 24);
        }
        blk_put_request(rq);
 done:
@@ -374,11 +378,11 @@ static int alua_vpd_inquiry(struct scsi_device *sdev, 
struct alua_dh_data *h)
 
        expiry = round_jiffies_up(jiffies + timeout);
  retry:
-       retval = submit_vpd_inquiry(sdev, h);
+       retval = submit_vpd_inquiry(sdev, h->buff, h->bufflen, h->sense);
        if (retval) {
                unsigned err;
 
-               if (h->senselen == 0 ||
+               if (!(driver_byte(retval) & DRIVER_SENSE) ||
                    !scsi_normalize_sense(h->sense, SCSI_SENSE_BUFFERSIZE,
                                          &sense_hdr)) {
                        sdev_printk(KERN_INFO, sdev,
@@ -575,10 +579,10 @@ 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:
-       retval = submit_rtpg(sdev, h);
+       retval = submit_rtpg(sdev, h->buff, h->bufflen, h->sense, h->flags);
 
        if (retval) {
-               if (h->senselen == 0 ||
+               if (!(driver_byte(retval) & DRIVER_SENSE) ||
                    !scsi_normalize_sense(h->sense, SCSI_SENSE_BUFFERSIZE,
                                          &sense_hdr)) {
                        sdev_printk(KERN_INFO, sdev, "%s: rtpg failed, ",
-- 
1.7.12.4

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