X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=block%2Fgenhd.c;h=a9ec910974c1934675b887d2fc8c2d0703579b01;hb=f28ad2c3daf0691081d91488df4d9d101e1a2b5d;hp=d84a7df1e2a094e663f7e1683bb941f1c3562e2d;hpb=74a6d0f064cd9106599ce3f1d924309669e83582;p=linux-2.6-omap-h63xx.git diff --git a/block/genhd.c b/block/genhd.c index d84a7df1e2a..a9ec910974c 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -256,6 +256,22 @@ void blkdev_show(struct seq_file *seqf, off_t offset) } #endif /* CONFIG_PROC_FS */ +/** + * register_blkdev - register a new block device + * + * @major: the requested major device number [1..255]. If @major=0, try to + * allocate any unused major number. + * @name: the name of the new block device as a zero terminated string + * + * The @name must be unique within the system. + * + * The return value depends on the @major input parameter. + * - if a major device number was requested in range [1..255] then the + * function returns zero on success, or a negative error code + * - if any unused major number was requested with @major=0 parameter + * then the return value is the allocated major number in range + * [1..255] or a negative error code otherwise + */ int register_blkdev(unsigned int major, const char *name) { struct blk_major_name **n, *p; @@ -1084,9 +1100,17 @@ dev_t blk_lookup_devt(const char *name, int partno) struct gendisk *disk = dev_to_disk(dev); struct hd_struct *part; - if (strcmp(dev->bus_id, name)) + if (strcmp(dev_name(dev), name)) continue; + if (partno < disk->minors) { + /* We need to return the right devno, even + * if the partition doesn't exist yet. + */ + devt = MKDEV(MAJOR(dev->devt), + MINOR(dev->devt) + partno); + break; + } part = disk_get_part(disk, partno); if (part) { devt = part_devt(part);