X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=block%2Fscsi_ioctl.c;h=e83f1dbf7c29a12563d18da1ae355929dcdde06e;hb=6ec129c3a2f8b38bc37e42348470ccfcb7460146;hp=f322b6a441d82fbe7db9a177ac0837fc54618cf2;hpb=706b75ddbe36d20d071424f9867385c319b67f8d;p=powerpc.git diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index f322b6a441..e83f1dbf7c 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c @@ -78,7 +78,9 @@ static int sg_set_timeout(request_queue_t *q, int __user *p) static int sg_get_reserved_size(request_queue_t *q, int __user *p) { - return put_user(q->sg_reserved_size, p); + unsigned val = min(q->sg_reserved_size, q->max_sectors << 9); + + return put_user(val, p); } static int sg_set_reserved_size(request_queue_t *q, int __user *p) @@ -223,7 +225,7 @@ static int verify_command(struct file *file, unsigned char *cmd) static int sg_io(struct file *file, request_queue_t *q, struct gendisk *bd_disk, struct sg_io_hdr *hdr) { - unsigned long start_time; + unsigned long start_time, timeout; int writing = 0, ret = 0; struct request *rq; char sense[SCSI_SENSE_BUFFERSIZE]; @@ -271,7 +273,8 @@ static int sg_io(struct file *file, request_queue_t *q, rq->cmd_type = REQ_TYPE_BLOCK_PC; - rq->timeout = jiffies_to_msecs(hdr->timeout); + timeout = msecs_to_jiffies(hdr->timeout); + rq->timeout = (timeout < INT_MAX) ? timeout : INT_MAX; if (!rq->timeout) rq->timeout = q->sg_timeout; if (!rq->timeout) @@ -333,8 +336,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)) + if (blk_rq_unmap_user(bio)) ret = -EFAULT; /* may not have succeeded, but output values written to control