X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=block%2Fgenhd.c;h=a9ec910974c1934675b887d2fc8c2d0703579b01;hb=64e71303e44f3697e4568147caa966de74bdb4fb;hp=397960cf26afcd61fc7c2bba2365944c8485c767;hpb=2150edc6c5cf00f7adb54538b9ea2a3e9cedca3f;p=linux-2.6-omap-h63xx.git diff --git a/block/genhd.c b/block/genhd.c index 397960cf26a..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; @@ -1087,6 +1103,14 @@ dev_t blk_lookup_devt(const char *name, int partno) 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);