diff options
Diffstat (limited to 'block/genhd.c')
-rw-r--r-- | block/genhd.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/block/genhd.c b/block/genhd.c index 397960cf26af..a9ec910974c1 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -256,6 +256,22 @@ void blkdev_show(struct seq_file *seqf, off_t offset) | |||
256 | } | 256 | } |
257 | #endif /* CONFIG_PROC_FS */ | 257 | #endif /* CONFIG_PROC_FS */ |
258 | 258 | ||
259 | /** | ||
260 | * register_blkdev - register a new block device | ||
261 | * | ||
262 | * @major: the requested major device number [1..255]. If @major=0, try to | ||
263 | * allocate any unused major number. | ||
264 | * @name: the name of the new block device as a zero terminated string | ||
265 | * | ||
266 | * The @name must be unique within the system. | ||
267 | * | ||
268 | * The return value depends on the @major input parameter. | ||
269 | * - if a major device number was requested in range [1..255] then the | ||
270 | * function returns zero on success, or a negative error code | ||
271 | * - if any unused major number was requested with @major=0 parameter | ||
272 | * then the return value is the allocated major number in range | ||
273 | * [1..255] or a negative error code otherwise | ||
274 | */ | ||
259 | int register_blkdev(unsigned int major, const char *name) | 275 | int register_blkdev(unsigned int major, const char *name) |
260 | { | 276 | { |
261 | struct blk_major_name **n, *p; | 277 | struct blk_major_name **n, *p; |
@@ -1087,6 +1103,14 @@ dev_t blk_lookup_devt(const char *name, int partno) | |||
1087 | if (strcmp(dev_name(dev), name)) | 1103 | if (strcmp(dev_name(dev), name)) |
1088 | continue; | 1104 | continue; |
1089 | 1105 | ||
1106 | if (partno < disk->minors) { | ||
1107 | /* We need to return the right devno, even | ||
1108 | * if the partition doesn't exist yet. | ||
1109 | */ | ||
1110 | devt = MKDEV(MAJOR(dev->devt), | ||
1111 | MINOR(dev->devt) + partno); | ||
1112 | break; | ||
1113 | } | ||
1090 | part = disk_get_part(disk, partno); | 1114 | part = disk_get_part(disk, partno); |
1091 | if (part) { | 1115 | if (part) { |
1092 | devt = part_devt(part); | 1116 | devt = part_devt(part); |