X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=block%2Fscsi_ioctl.c;h=f322b6a441d82fbe7db9a177ac0837fc54618cf2;hb=618b20a13e9ef4ed1d16f1ab94ccce8e4f55f9d9;hp=b3e210723a71f637605852b7d8136ef594af95d2;hpb=ea14fad0d416354a4e9bb1a04f32acba706f9548;p=powerpc.git diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index b3e210723a..f322b6a441 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,13 +271,6 @@ 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 = jiffies_to_msecs(hdr->timeout); if (!rq->timeout) rq->timeout = q->sg_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,6 +333,7 @@ static int sg_io(struct file *file, request_queue_t *q, hdr->sb_len_wr = len; } + rq->bio = bio; if (blk_rq_unmap_user(rq)) ret = -EFAULT;