From: Mike Christie <michaelc@cs.wisc.edu>
To: Hugh Daschbach <hdasch@broadcom.com>
Cc: "James E.J. Bottomley" <James.Bottomley@suse.de>,
Chandra Seetharaman <sekharan@us.ibm.com>,
Eddie Williams <Eddie.Williams@steeleye.com>,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Don't change direction flags in struct request.
Date: Fri, 12 Mar 2010 16:04:52 -0600 [thread overview]
Message-ID: <4B9ABA84.9020801@cs.wisc.edu> (raw)
In-Reply-To: <1268976690-3386-2-git-send-email-hdasch@broadcom.com>
[-- Attachment #1: Type: text/plain, Size: 2433 bytes --]
On 03/19/2010 12:31 AM, Hugh Daschbach wrote:
> The EMC multipath device handler should not change the I/O direction
> flags of its trespass command request.
>
> The CFQ elevator may BUG if the direction flags on an I/O request are
> changed after allocation. cfq_set_request() and cfq_put_request()
> count READ and WRITE requests separately. Changing the I/O request
> direction after blk_get_request() allocates the request throws off
> this CFQ accounting.
>
> Signed-off-by: Hugh Daschbach<hdasch@broadcom.com>
> ---
> drivers/scsi/device_handler/scsi_dh_emc.c | 8 ++++----
> 1 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
> index 6196675..3709342 100644
> --- a/drivers/scsi/device_handler/scsi_dh_emc.c
> +++ b/drivers/scsi/device_handler/scsi_dh_emc.c
> @@ -269,10 +269,12 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
> unsigned char *buffer)
> {
> struct request *rq;
> + int mode = READ;
> int len = 0;
>
> - rq = blk_get_request(sdev->request_queue,
> - (cmd == MODE_SELECT) ? WRITE : READ, GFP_NOIO);
> + if (cmd == MODE_SELECT || cmd == MODE_SELECT_10)
> + mode = WRITE;
> + rq = blk_get_request(sdev->request_queue, mode, GFP_NOIO);
> if (!rq) {
> sdev_printk(KERN_INFO, sdev, "get_req: blk_get_request failed");
> return NULL;
> @@ -284,12 +286,10 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
> switch (cmd) {
> case MODE_SELECT:
> len = sizeof(short_trespass);
> - rq->cmd_flags |= REQ_RW;
> rq->cmd[1] = 0x10;
> break;
> case MODE_SELECT_10:
> len = sizeof(long_trespass);
> - rq->cmd_flags |= REQ_RW;
> rq->cmd[1] = 0x10;
> break;
> case INQUIRY:
Did you try the patch I linked to the last time you posted about this?
I think there should be a patch which fixes this problem here:
http://git.kernel.org/?p=linux/kernel/git/jejb/scsi-misc-2.6.git;a=commitdiff;h=6c71dcb28ff9b63b814a0b76a256f5dae08d3e0d;hp=3a5b27bf6f29574d667230c7e76e4b83fe3014e0
I think it got into 2.6.34-rc1.
With that patch mode selects should get set up as writes.
Does it work? If it does then I think we just need the attached cleanup
patch which removes the cmd_flags setting. The patch that got merged
fixed the problem of initializing the request properly, but it forgot to
remove the cmd_flags setting.
[-- Attachment #2: emc-cleanup-cmd-flags.patch --]
[-- Type: text/plain, Size: 823 bytes --]
blk_get_request sets the cmd_flags, so we should not and do not
need to set them. If we did set them to a different value then
it can cause a oops in the elevator code.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
index 63032ec..2752892 100644
--- a/drivers/scsi/device_handler/scsi_dh_emc.c
+++ b/drivers/scsi/device_handler/scsi_dh_emc.c
@@ -284,13 +284,11 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
switch (cmd) {
case MODE_SELECT:
len = sizeof(short_trespass);
- rq->cmd_flags |= REQ_RW;
rq->cmd[1] = 0x10;
rq->cmd[4] = len;
break;
case MODE_SELECT_10:
len = sizeof(long_trespass);
- rq->cmd_flags |= REQ_RW;
rq->cmd[1] = 0x10;
rq->cmd[8] = len;
break;
next prev parent reply other threads:[~2010-03-12 22:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-02 0:04 PROBLEM: kernel BUG at block/cfq-iosched.c:3402 Hugh Daschbach
2010-03-19 5:31 ` Hugh Daschbach
2010-03-02 0:04 ` [PATCH] Don't change direction flags in struct request Hugh Daschbach
2010-03-19 5:31 ` Hugh Daschbach
2010-03-02 5:26 ` James Bottomley
2010-03-02 7:54 ` Mike Christie
2010-03-03 10:29 ` James Bottomley
2010-03-12 22:04 ` Mike Christie [this message]
2010-03-12 22:26 ` Hugh Daschbach
2010-03-19 2:21 ` Hugh Daschbach
2010-03-02 0:04 ` Hugh Daschbach
2010-03-02 0:20 ` PROBLEM: kernel BUG at block/cfq-iosched.c:3402 Dmitry Torokhov
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=4B9ABA84.9020801@cs.wisc.edu \
--to=michaelc@cs.wisc.edu \
--cc=Eddie.Williams@steeleye.com \
--cc=James.Bottomley@suse.de \
--cc=hdasch@broadcom.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=sekharan@us.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.