| From 8af8cf38c24947fd8b4b4a6f32a0e5c9ea0204e5 Mon Sep 17 00:00:00 2001 |
| From: Hannes Reinecke <hare@suse.de> |
| Date: Wed, 2 Dec 2009 14:28:48 -0600 |
| Subject: scsi_dh_emc: fix mode select request setup |
| |
| From: Hannes Reinecke <hare@suse.de> |
| |
| commit 6c71dcb28ff9b63b814a0b76a256f5dae08d3e0d upstream. |
| |
| This patch fixes the request setup code for mode selects. I got the fixes from |
| Hannes Reinecke while trying to hunt down some problems and merged it |
| into one patch. I am sending it because Hannes is busy with other things. |
| |
| The patch fixes: |
| - setting of the length for mode selects. |
| - setting of the data direction for mode select 10. |
| |
| Signed-off-by: Hannes Reinecke <hare@suse.de> |
| Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> |
| Signed-off-by: James Bottomley <James.Bottomley@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| drivers/scsi/device_handler/scsi_dh_emc.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/scsi/device_handler/scsi_dh_emc.c |
| +++ b/drivers/scsi/device_handler/scsi_dh_emc.c |
| @@ -272,7 +272,7 @@ static struct request *get_req(struct sc |
| int len = 0; |
| |
| rq = blk_get_request(sdev->request_queue, |
| - (cmd == MODE_SELECT) ? WRITE : READ, GFP_NOIO); |
| + (cmd != INQUIRY) ? WRITE : READ, GFP_NOIO); |
| if (!rq) { |
| sdev_printk(KERN_INFO, sdev, "get_req: blk_get_request failed"); |
| return NULL; |
| @@ -286,14 +286,17 @@ static struct request *get_req(struct sc |
| 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; |
| case INQUIRY: |
| len = CLARIION_BUFFER_SIZE; |
| + rq->cmd[4] = len; |
| memset(buffer, 0, len); |
| break; |
| default: |
| @@ -301,7 +304,6 @@ static struct request *get_req(struct sc |
| break; |
| } |
| |
| - rq->cmd[4] = len; |
| rq->cmd_type = REQ_TYPE_BLOCK_PC; |
| rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | |
| REQ_FAILFAST_DRIVER; |