diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 13:24:40 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 13:24:40 -0400 |
commit | bdf7cf1c83872a0586ce4c4da6889103cc36dbd3 (patch) | |
tree | 9311bbcf8b9ffbe7207eba5cca557275f8151ae7 /drivers | |
parent | 40efeb4d0bb1993c3c10baff9b7d86839f99171e (diff) | |
parent | ac04fee0b5c55bbac0858727a4154110b55d3f5a (diff) |
Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/linux-2.6-block:
loop: export module parameters
block: export blk_{get,put}_queue()
block: remove unused variable in bio_attempt_front_merge()
block: always allocate genhd->ev if check_events is implemented
brd: export module parameters
brd: fix comment on initial device creation
brd: handle on-demand devices correctly
brd: limit 'max_part' module param to DISK_MAX_PARTS
brd: get rid of unused members from struct brd_device
block: fix oops on !disk->queue and sysfs discard alignment display
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/block/brd.c | 42 | ||||
-rw-r--r-- | drivers/block/loop.c | 17 |
2 files changed, 40 insertions, 19 deletions
diff --git a/drivers/block/brd.c b/drivers/block/brd.c index b7f51e4594f8..dba1c32e1ddf 100644 --- a/drivers/block/brd.c +++ b/drivers/block/brd.c | |||
@@ -35,10 +35,6 @@ | |||
35 | */ | 35 | */ |
36 | struct brd_device { | 36 | struct brd_device { |
37 | int brd_number; | 37 | int brd_number; |
38 | int brd_refcnt; | ||
39 | loff_t brd_offset; | ||
40 | loff_t brd_sizelimit; | ||
41 | unsigned brd_blocksize; | ||
42 | 38 | ||
43 | struct request_queue *brd_queue; | 39 | struct request_queue *brd_queue; |
44 | struct gendisk *brd_disk; | 40 | struct gendisk *brd_disk; |
@@ -440,11 +436,11 @@ static int rd_nr; | |||
440 | int rd_size = CONFIG_BLK_DEV_RAM_SIZE; | 436 | int rd_size = CONFIG_BLK_DEV_RAM_SIZE; |
441 | static int max_part; | 437 | static int max_part; |
442 | static int part_shift; | 438 | static int part_shift; |
443 | module_param(rd_nr, int, 0); | 439 | module_param(rd_nr, int, S_IRUGO); |
444 | MODULE_PARM_DESC(rd_nr, "Maximum number of brd devices"); | 440 | MODULE_PARM_DESC(rd_nr, "Maximum number of brd devices"); |
445 | module_param(rd_size, int, 0); | 441 | module_param(rd_size, int, S_IRUGO); |
446 | MODULE_PARM_DESC(rd_size, "Size of each RAM disk in kbytes."); | 442 | MODULE_PARM_DESC(rd_size, "Size of each RAM disk in kbytes."); |
447 | module_param(max_part, int, 0); | 443 | module_param(max_part, int, S_IRUGO); |
448 | MODULE_PARM_DESC(max_part, "Maximum number of partitions per RAM disk"); | 444 | MODULE_PARM_DESC(max_part, "Maximum number of partitions per RAM disk"); |
449 | MODULE_LICENSE("GPL"); | 445 | MODULE_LICENSE("GPL"); |
450 | MODULE_ALIAS_BLOCKDEV_MAJOR(RAMDISK_MAJOR); | 446 | MODULE_ALIAS_BLOCKDEV_MAJOR(RAMDISK_MAJOR); |
@@ -552,7 +548,7 @@ static struct kobject *brd_probe(dev_t dev, int *part, void *data) | |||
552 | struct kobject *kobj; | 548 | struct kobject *kobj; |
553 | 549 | ||
554 | mutex_lock(&brd_devices_mutex); | 550 | mutex_lock(&brd_devices_mutex); |
555 | brd = brd_init_one(dev & MINORMASK); | 551 | brd = brd_init_one(MINOR(dev) >> part_shift); |
556 | kobj = brd ? get_disk(brd->brd_disk) : ERR_PTR(-ENOMEM); | 552 | kobj = brd ? get_disk(brd->brd_disk) : ERR_PTR(-ENOMEM); |
557 | mutex_unlock(&brd_devices_mutex); | 553 | mutex_unlock(&brd_devices_mutex); |
558 | 554 | ||
@@ -575,25 +571,39 @@ static int __init brd_init(void) | |||
575 | * | 571 | * |
576 | * (1) if rd_nr is specified, create that many upfront, and this | 572 | * (1) if rd_nr is specified, create that many upfront, and this |
577 | * also becomes a hard limit. | 573 | * also becomes a hard limit. |
578 | * (2) if rd_nr is not specified, create 1 rd device on module | 574 | * (2) if rd_nr is not specified, create CONFIG_BLK_DEV_RAM_COUNT |
579 | * load, user can further extend brd device by create dev node | 575 | * (default 16) rd device on module load, user can further |
580 | * themselves and have kernel automatically instantiate actual | 576 | * extend brd device by create dev node themselves and have |
581 | * device on-demand. | 577 | * kernel automatically instantiate actual device on-demand. |
582 | */ | 578 | */ |
583 | 579 | ||
584 | part_shift = 0; | 580 | part_shift = 0; |
585 | if (max_part > 0) | 581 | if (max_part > 0) { |
586 | part_shift = fls(max_part); | 582 | part_shift = fls(max_part); |
587 | 583 | ||
584 | /* | ||
585 | * Adjust max_part according to part_shift as it is exported | ||
586 | * to user space so that user can decide correct minor number | ||
587 | * if [s]he want to create more devices. | ||
588 | * | ||
589 | * Note that -1 is required because partition 0 is reserved | ||
590 | * for the whole disk. | ||
591 | */ | ||
592 | max_part = (1UL << part_shift) - 1; | ||
593 | } | ||
594 | |||
595 | if ((1UL << part_shift) > DISK_MAX_PARTS) | ||
596 | return -EINVAL; | ||
597 | |||
588 | if (rd_nr > 1UL << (MINORBITS - part_shift)) | 598 | if (rd_nr > 1UL << (MINORBITS - part_shift)) |
589 | return -EINVAL; | 599 | return -EINVAL; |
590 | 600 | ||
591 | if (rd_nr) { | 601 | if (rd_nr) { |
592 | nr = rd_nr; | 602 | nr = rd_nr; |
593 | range = rd_nr; | 603 | range = rd_nr << part_shift; |
594 | } else { | 604 | } else { |
595 | nr = CONFIG_BLK_DEV_RAM_COUNT; | 605 | nr = CONFIG_BLK_DEV_RAM_COUNT; |
596 | range = 1UL << (MINORBITS - part_shift); | 606 | range = 1UL << MINORBITS; |
597 | } | 607 | } |
598 | 608 | ||
599 | if (register_blkdev(RAMDISK_MAJOR, "ramdisk")) | 609 | if (register_blkdev(RAMDISK_MAJOR, "ramdisk")) |
@@ -632,7 +642,7 @@ static void __exit brd_exit(void) | |||
632 | unsigned long range; | 642 | unsigned long range; |
633 | struct brd_device *brd, *next; | 643 | struct brd_device *brd, *next; |
634 | 644 | ||
635 | range = rd_nr ? rd_nr : 1UL << (MINORBITS - part_shift); | 645 | range = rd_nr ? rd_nr << part_shift : 1UL << MINORBITS; |
636 | 646 | ||
637 | list_for_each_entry_safe(brd, next, &brd_devices, brd_list) | 647 | list_for_each_entry_safe(brd, next, &brd_devices, brd_list) |
638 | brd_del_one(brd); | 648 | brd_del_one(brd); |
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index c59a672a3de0..76c8da78212b 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -1540,9 +1540,9 @@ static const struct block_device_operations lo_fops = { | |||
1540 | * And now the modules code and kernel interface. | 1540 | * And now the modules code and kernel interface. |
1541 | */ | 1541 | */ |
1542 | static int max_loop; | 1542 | static int max_loop; |
1543 | module_param(max_loop, int, 0); | 1543 | module_param(max_loop, int, S_IRUGO); |
1544 | MODULE_PARM_DESC(max_loop, "Maximum number of loop devices"); | 1544 | MODULE_PARM_DESC(max_loop, "Maximum number of loop devices"); |
1545 | module_param(max_part, int, 0); | 1545 | module_param(max_part, int, S_IRUGO); |
1546 | MODULE_PARM_DESC(max_part, "Maximum number of partitions per loop device"); | 1546 | MODULE_PARM_DESC(max_part, "Maximum number of partitions per loop device"); |
1547 | MODULE_LICENSE("GPL"); | 1547 | MODULE_LICENSE("GPL"); |
1548 | MODULE_ALIAS_BLOCKDEV_MAJOR(LOOP_MAJOR); | 1548 | MODULE_ALIAS_BLOCKDEV_MAJOR(LOOP_MAJOR); |
@@ -1688,9 +1688,20 @@ static int __init loop_init(void) | |||
1688 | */ | 1688 | */ |
1689 | 1689 | ||
1690 | part_shift = 0; | 1690 | part_shift = 0; |
1691 | if (max_part > 0) | 1691 | if (max_part > 0) { |
1692 | part_shift = fls(max_part); | 1692 | part_shift = fls(max_part); |
1693 | 1693 | ||
1694 | /* | ||
1695 | * Adjust max_part according to part_shift as it is exported | ||
1696 | * to user space so that user can decide correct minor number | ||
1697 | * if [s]he want to create more devices. | ||
1698 | * | ||
1699 | * Note that -1 is required because partition 0 is reserved | ||
1700 | * for the whole disk. | ||
1701 | */ | ||
1702 | max_part = (1UL << part_shift) - 1; | ||
1703 | } | ||
1704 | |||
1694 | if ((1UL << part_shift) > DISK_MAX_PARTS) | 1705 | if ((1UL << part_shift) > DISK_MAX_PARTS) |
1695 | return -EINVAL; | 1706 | return -EINVAL; |
1696 | 1707 | ||