diff options
author | Tejun Heo <tj@kernel.org> | 2008-09-03 03:01:48 -0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-10-09 02:56:05 -0400 |
commit | f331c0296f2a9fee0d396a70598b954062603015 (patch) | |
tree | f74c467d58940131d97d90c4ea549843185e6ef0 /block/ioctl.c | |
parent | cf771cb5a7b716f3f9e532fd42a1e3a0a75adec5 (diff) |
block: don't depend on consecutive minor space
* Implement disk_devt() and part_devt() and use them to directly
access devt instead of computing it from ->major and ->first_minor.
Note that all references to ->major and ->first_minor outside of
block layer is used to determine devt of the disk (the part0) and as
->major and ->first_minor will continue to represent devt for the
disk, converting these users aren't strictly necessary. However,
convert them for consistency.
* Implement disk_max_parts() to avoid directly deferencing
genhd->minors.
* Update bdget_disk() such that it doesn't assume consecutive minor
space.
* Move devt computation from register_disk() to add_disk() and make it
the only one (all other usages use the initially determined value).
These changes clean up the code and will help disk->part dereference
fix and extended block device numbers.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/ioctl.c')
-rw-r--r-- | block/ioctl.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/block/ioctl.c b/block/ioctl.c index d77f5e280a6e..403f7d7e0c28 100644 --- a/block/ioctl.c +++ b/block/ioctl.c | |||
@@ -29,7 +29,7 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user | |||
29 | if (bdev != bdev->bd_contains) | 29 | if (bdev != bdev->bd_contains) |
30 | return -EINVAL; | 30 | return -EINVAL; |
31 | partno = p.pno; | 31 | partno = p.pno; |
32 | if (partno <= 0 || partno >= disk->minors) | 32 | if (partno <= 0 || partno > disk_max_parts(disk)) |
33 | return -EINVAL; | 33 | return -EINVAL; |
34 | switch (a.op) { | 34 | switch (a.op) { |
35 | case BLKPG_ADD_PARTITION: | 35 | case BLKPG_ADD_PARTITION: |
@@ -47,7 +47,7 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user | |||
47 | mutex_lock(&bdev->bd_mutex); | 47 | mutex_lock(&bdev->bd_mutex); |
48 | 48 | ||
49 | /* overlap? */ | 49 | /* overlap? */ |
50 | for (i = 0; i < disk->minors - 1; i++) { | 50 | for (i = 0; i < disk_max_parts(disk); i++) { |
51 | struct hd_struct *s = disk->part[i]; | 51 | struct hd_struct *s = disk->part[i]; |
52 | 52 | ||
53 | if (!s) | 53 | if (!s) |
@@ -96,7 +96,7 @@ static int blkdev_reread_part(struct block_device *bdev) | |||
96 | struct gendisk *disk = bdev->bd_disk; | 96 | struct gendisk *disk = bdev->bd_disk; |
97 | int res; | 97 | int res; |
98 | 98 | ||
99 | if (disk->minors == 1 || bdev != bdev->bd_contains) | 99 | if (!disk_max_parts(disk) || bdev != bdev->bd_contains) |
100 | return -EINVAL; | 100 | return -EINVAL; |
101 | if (!capable(CAP_SYS_ADMIN)) | 101 | if (!capable(CAP_SYS_ADMIN)) |
102 | return -EACCES; | 102 | return -EACCES; |