From: Hannes Reinecke <hare@suse.de>
To: James Bottomley <jbottomley@parallels.com>
Cc: linux-scsi@vger.kernel.org,
Sean Stewart <sean.stewart@netapp.com>,
Martin George <marting@netapp.com>,
Hannes Reinecke <hare@suse.de>
Subject: [PATCH 03/16] scsi_dh_alua: Pass buffer as function argument
Date: Fri, 20 Dec 2013 13:13:28 +0100 [thread overview]
Message-ID: <1387541621-54967-4-git-send-email-hare@suse.de> (raw)
In-Reply-To: <1387541621-54967-1-git-send-email-hare@suse.de>
Pass in the buffer as a function argument for submit_vpd() and
submit_rtpg().
Signed-off-by: Hannes Reinecke <hare@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
next prev parent reply other threads:[~2013-12-20 12:13 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-20 12:13 [PATCH 00/16] scsi_dh_alua updates Hannes Reinecke
2013-12-20 12:13 ` [PATCH 01/16] scsi_dh_alua: Improve error handling Hannes Reinecke
2013-12-20 12:13 ` [PATCH 02/16] scsi_dh_alua: use flag for RTPG extended header Hannes Reinecke
2013-12-20 12:13 ` Hannes Reinecke [this message]
2013-12-20 12:13 ` [PATCH 04/16] scsi_dh_alua: Make stpg synchronous Hannes Reinecke
2013-12-20 12:13 ` [PATCH 05/16] scsi_dh_alua: put sense buffer on stack Hannes Reinecke
2013-12-20 12:13 ` [PATCH 06/16] scsi_dh_alua: use local buffer for VPD inquiry Hannes Reinecke
2014-01-17 9:04 ` Mike Christie
2014-01-17 9:38 ` Hannes Reinecke
2013-12-20 12:13 ` [PATCH 07/16] scsi_dh_alua: Use separate alua_port_group structure Hannes Reinecke
2013-12-20 12:13 ` [PATCH 08/16] scsi_dh_alua: parse target device id Hannes Reinecke
2013-12-20 12:13 ` [PATCH 09/16] scsi_dh_alua: simplify sense code handling Hannes Reinecke
2013-12-20 12:13 ` [PATCH 10/16] scsi_dh_alua: Do not attach to management devices Hannes Reinecke
2013-12-20 12:13 ` [PATCH 11/16] scsi_dh_alua: multipath failover fails with error 15 Hannes Reinecke
2013-12-20 12:13 ` [PATCH 12/16] scsi_dh: return individual errors in scsi_dh_activate() Hannes Reinecke
2013-12-20 12:13 ` [PATCH 13/16] scsi_dh_alua: Clarify logging message Hannes Reinecke
2013-12-20 12:13 ` [PATCH 14/16] scsi_dh: invoke callback if ->activate is not present Hannes Reinecke
2013-12-20 12:13 ` [PATCH 15/16] scsi_dh_alua: revert commit a8e5a2d593cbfccf530c3382c2c328d2edaa7b66 Hannes Reinecke
2013-12-20 12:13 ` [PATCH 16/16] scsi_dh_alua: Use workqueue for RTPG Hannes Reinecke
2014-01-21 8:25 ` Vaughan Cao
-- strict thread matches above, loose matches on Subject: below --
2014-01-31 9:29 [PATCHv2 00/16] scsi_dh_alua updates Hannes Reinecke
2014-01-31 9:29 ` [PATCH 03/16] scsi_dh_alua: Pass buffer as function argument Hannes Reinecke
2014-02-14 11:22 ` Bart Van Assche
2014-02-14 11:36 ` Hannes Reinecke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1387541621-54967-4-git-send-email-hare@suse.de \
--to=hare@suse.de \
--cc=jbottomley@parallels.com \
--cc=linux-scsi@vger.kernel.org \
--cc=marting@netapp.com \
--cc=sean.stewart@netapp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).