X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=block%2Fscsi_ioctl.c;h=2528a0c0dec8bc906533d1b62163f6404d1c697c;hb=8e5cfc45e7527eb5c8a9a22d56a7b9227e7c0913;hp=5493c2fbbab177335814a24362b95763eb5dc820;hpb=c3e59d1e891f6140a346de2b8547e25133c716b0;p=powerpc.git diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index 5493c2fbba..2528a0c0de 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c @@ -228,6 +228,7 @@ static int sg_io(struct file *file, request_queue_t *q, struct request *rq; char sense[SCSI_SENSE_BUFFERSIZE]; unsigned char cmd[BLK_MAX_CDB]; + struct bio *bio; if (hdr->interface_id != 'S') return -EINVAL; @@ -270,14 +271,7 @@ static int sg_io(struct file *file, request_queue_t *q, rq->cmd_type = REQ_TYPE_BLOCK_PC; - /* - * bounce this after holding a reference to the original bio, it's - * needed for proper unmapping - */ - if (rq->bio) - blk_queue_bounce(q, &rq->bio); - - rq->timeout = (hdr->timeout * HZ) / 1000; + rq->timeout = jiffies_to_msecs(hdr->timeout); if (!rq->timeout) rq->timeout = q->sg_timeout; if (!rq->timeout) @@ -308,6 +302,7 @@ static int sg_io(struct file *file, request_queue_t *q, if (ret) goto out; + bio = rq->bio; rq->retries = 0; start_time = jiffies; @@ -338,7 +333,7 @@ static int sg_io(struct file *file, request_queue_t *q, hdr->sb_len_wr = len; } - if (blk_rq_unmap_user(rq)) + if (blk_rq_unmap_user(bio)) ret = -EFAULT; /* may not have succeeded, but output values written to control