[SCSI] scsi_dh_emc: fix mode select request setup

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>
This commit is contained in:
Hannes Reinecke 2009-12-02 14:28:48 -06:00 коммит произвёл James Bottomley
Родитель 3a5b27bf6f
Коммит 6c71dcb28f
1 изменённых файлов: 4 добавлений и 2 удалений

Просмотреть файл

@ -272,7 +272,7 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
int len = 0; int len = 0;
rq = blk_get_request(sdev->request_queue, rq = blk_get_request(sdev->request_queue,
(cmd == MODE_SELECT) ? WRITE : READ, GFP_NOIO); (cmd != INQUIRY) ? WRITE : READ, GFP_NOIO);
if (!rq) { if (!rq) {
sdev_printk(KERN_INFO, sdev, "get_req: blk_get_request failed"); sdev_printk(KERN_INFO, sdev, "get_req: blk_get_request failed");
return NULL; return NULL;
@ -286,14 +286,17 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
len = sizeof(short_trespass); len = sizeof(short_trespass);
rq->cmd_flags |= REQ_RW; rq->cmd_flags |= REQ_RW;
rq->cmd[1] = 0x10; rq->cmd[1] = 0x10;
rq->cmd[4] = len;
break; break;
case MODE_SELECT_10: case MODE_SELECT_10:
len = sizeof(long_trespass); len = sizeof(long_trespass);
rq->cmd_flags |= REQ_RW; rq->cmd_flags |= REQ_RW;
rq->cmd[1] = 0x10; rq->cmd[1] = 0x10;
rq->cmd[8] = len;
break; break;
case INQUIRY: case INQUIRY:
len = CLARIION_BUFFER_SIZE; len = CLARIION_BUFFER_SIZE;
rq->cmd[4] = len;
memset(buffer, 0, len); memset(buffer, 0, len);
break; break;
default: default:
@ -301,7 +304,6 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
break; break;
} }
rq->cmd[4] = len;
rq->cmd_type = REQ_TYPE_BLOCK_PC; rq->cmd_type = REQ_TYPE_BLOCK_PC;
rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
REQ_FAILFAST_DRIVER; REQ_FAILFAST_DRIVER;