Commit 3b57ec8d authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] (5/15) big struct block_device * push (first series)

 - switch blk_{get,set}_readahead() to struct block_device *
parent 7290bad4
...@@ -240,13 +240,13 @@ int blk_ioctl(struct block_device *bdev, unsigned int cmd, unsigned long arg) ...@@ -240,13 +240,13 @@ int blk_ioctl(struct block_device *bdev, unsigned int cmd, unsigned long arg)
case BLKFRASET: case BLKFRASET:
if(!capable(CAP_SYS_ADMIN)) if(!capable(CAP_SYS_ADMIN))
return -EACCES; return -EACCES;
return blk_set_readahead(dev, arg); return blk_set_readahead(bdev, arg);
case BLKRAGET: case BLKRAGET:
case BLKFRAGET: case BLKFRAGET:
if (!arg) if (!arg)
return -EINVAL; return -EINVAL;
return put_user(blk_get_readahead(dev), (long *)arg); return put_user(blk_get_readahead(bdev), (long *)arg);
case BLKSECTGET: case BLKSECTGET:
if ((q = blk_get_queue(dev)) == NULL) if ((q = blk_get_queue(dev)) == NULL)
......
...@@ -115,13 +115,14 @@ inline request_queue_t *blk_get_queue(kdev_t dev) ...@@ -115,13 +115,14 @@ inline request_queue_t *blk_get_queue(kdev_t dev)
* *
* Returns zero on success, else negative errno * Returns zero on success, else negative errno
*/ */
int blk_set_readahead(kdev_t dev, unsigned sectors) int blk_set_readahead(struct block_device *bdev, unsigned sectors)
{ {
int ret = -EINVAL; int ret = -EINVAL;
request_queue_t *q = blk_get_queue(dev); request_queue_t *q = blk_get_queue(to_kdev_t(bdev->bd_dev));
if (q) { if (q) {
q->ra_sectors = sectors; q->ra_sectors = sectors;
blk_put_queue(q);
ret = 0; ret = 0;
} }
return ret; return ret;
...@@ -139,13 +140,15 @@ int blk_set_readahead(kdev_t dev, unsigned sectors) ...@@ -139,13 +140,15 @@ int blk_set_readahead(kdev_t dev, unsigned sectors)
* Will return zero if the queue has never had its readahead * Will return zero if the queue has never had its readahead
* setting altered. * setting altered.
*/ */
unsigned blk_get_readahead(kdev_t dev) unsigned blk_get_readahead(struct block_device *bdev)
{ {
unsigned ret = 0; unsigned ret = 0;
request_queue_t *q = blk_get_queue(dev); request_queue_t *q = blk_get_queue(to_kdev_t(bdev->bd_dev));
if (q) if (q) {
ret = q->ra_sectors; ret = q->ra_sectors;
blk_put_queue(q);
}
return ret; return ret;
} }
......
...@@ -1577,7 +1577,7 @@ static int device_size_calculation(mddev_t * mddev) ...@@ -1577,7 +1577,7 @@ static int device_size_calculation(mddev_t * mddev)
if (!md_size[mdidx(mddev)]) if (!md_size[mdidx(mddev)])
md_size[mdidx(mddev)] = sb->size * data_disks; md_size[mdidx(mddev)] = sb->size * data_disks;
readahead = (blk_get_readahead(rdev->dev) * 512) / PAGE_SIZE; readahead = (blk_get_readahead(rdev->bdev) * 512) / PAGE_SIZE;
if (!sb->level || (sb->level == 4) || (sb->level == 5)) { if (!sb->level || (sb->level == 4) || (sb->level == 5)) {
readahead = (mddev->sb->chunk_size>>PAGE_SHIFT) * 4 * data_disks; readahead = (mddev->sb->chunk_size>>PAGE_SHIFT) * 4 * data_disks;
if (readahead < data_disks * (MAX_SECTORS>>(PAGE_SHIFT-9))*2) if (readahead < data_disks * (MAX_SECTORS>>(PAGE_SHIFT-9))*2)
......
...@@ -314,8 +314,8 @@ extern void blk_queue_hardsect_size(request_queue_t *q, unsigned short); ...@@ -314,8 +314,8 @@ extern void blk_queue_hardsect_size(request_queue_t *q, unsigned short);
extern void blk_queue_segment_boundary(request_queue_t *q, unsigned long); extern void blk_queue_segment_boundary(request_queue_t *q, unsigned long);
extern void blk_queue_assign_lock(request_queue_t *q, spinlock_t *); extern void blk_queue_assign_lock(request_queue_t *q, spinlock_t *);
extern void blk_queue_prep_rq(request_queue_t *q, prep_rq_fn *pfn); extern void blk_queue_prep_rq(request_queue_t *q, prep_rq_fn *pfn);
extern int blk_set_readahead(kdev_t dev, unsigned sectors); extern int blk_set_readahead(struct block_device *bdev, unsigned sectors);
extern unsigned blk_get_readahead(kdev_t dev); extern unsigned blk_get_readahead(struct block_device *bdev);
extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *); extern int blk_rq_map_sg(request_queue_t *, struct request *, struct scatterlist *);
extern void blk_dump_rq_flags(struct request *, char *); extern void blk_dump_rq_flags(struct request *, char *);
......
...@@ -35,10 +35,11 @@ static int get_max_readahead(struct inode *inode) ...@@ -35,10 +35,11 @@ static int get_max_readahead(struct inode *inode)
{ {
unsigned blk_ra_kbytes = 0; unsigned blk_ra_kbytes = 0;
blk_ra_kbytes = blk_get_readahead(inode->i_dev) / 2; if (inode->i_sb->s_bdev) {
if (blk_ra_kbytes < VM_MIN_READAHEAD) blk_ra_kbytes = blk_get_readahead(inode->i_sb->s_bdev) / 2;
blk_ra_kbytes = VM_MAX_READAHEAD; if (blk_ra_kbytes < VM_MIN_READAHEAD)
blk_ra_kbytes = VM_MAX_READAHEAD;
}
return blk_ra_kbytes >> (PAGE_CACHE_SHIFT - 10); return blk_ra_kbytes >> (PAGE_CACHE_SHIFT - 10);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment