struct request *rq;
struct bio *bio;
char sense[SCSI_SENSE_BUFFERSIZE];
+ unsigned char cdb[BLK_MAX_CDB];
void *buffer;
if (hdr->interface_id != 'S')
if (hdr->dxfer_len > (q->max_sectors << 9))
return -EIO;
+ if (copy_from_user(cdb, hdr->cmdp, hdr->cmd_len))
+ return -EFAULT;
+
reading = writing = 0;
buffer = NULL;
bio = NULL;
* fill in request structure
*/
rq->cmd_len = hdr->cmd_len;
-
- if (copy_from_user(rq->cmd, hdr->cmdp, hdr->cmd_len)) {
- blk_put_request(rq);
- return -EFAULT;
- }
-
+ memcpy(rq->cmd, cdb, hdr->cmd_len);
if (sizeof(rq->cmd) != hdr->cmd_len)
memset(rq->cmd + hdr->cmd_len, 0, sizeof(rq->cmd) - hdr->cmd_len);
wait_queue_head_t wait[2];
};
+#define BLK_MAX_CDB 16
+
/*
* try to put the fields that are referenced together in the same cacheline
*/
* when request is used as a packet command carrier
*/
unsigned int cmd_len;
- unsigned char cmd[16];
+ unsigned char cmd[BLK_MAX_CDB];
unsigned int data_len;
void *data;