[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:
parent
3a5b27bf6f
commit
6c71dcb28f
|
@ -272,7 +272,7 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
|
|||
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 scsi_device *sdev, int cmd,
|
|||
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 scsi_device *sdev, int cmd,
|
|||
break;
|
||||
}
|
||||
|
||||
rq->cmd[4] = len;
|
||||
rq->cmd_type = REQ_TYPE_BLOCK_PC;
|
||||
rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
|
||||
REQ_FAILFAST_DRIVER;
|
||||
|
|
Loading…
Reference in New Issue