struct block_device *disk_map_sector_rcu(struct gendisk *disk, sector_t sector);
 
-int blk_alloc_devt(struct hd_struct *part, dev_t *devt);
+int blk_alloc_devt(struct block_device *part, dev_t *devt);
 void blk_free_devt(dev_t devt);
 char *disk_name(struct gendisk *hd, int partno, char *buf);
 #define ADDPART_FLAG_NONE      0
 
 }
 
 /**
- * blk_alloc_devt - allocate a dev_t for a partition
- * @part: partition to allocate dev_t for
+ * blk_alloc_devt - allocate a dev_t for a block device
+ * @bdev: block device to allocate dev_t for
  * @devt: out parameter for resulting dev_t
  *
  * Allocate a dev_t for block device.
  * CONTEXT:
  * Might sleep.
  */
-int blk_alloc_devt(struct hd_struct *part, dev_t *devt)
+int blk_alloc_devt(struct block_device *bdev, dev_t *devt)
 {
-       struct gendisk *disk = part_to_disk(part);
+       struct gendisk *disk = bdev->bd_disk;
        int idx;
 
        /* in consecutive minor range? */
-       if (part->bdev->bd_partno < disk->minors) {
-               *devt = MKDEV(disk->major, disk->first_minor + part->bdev->bd_partno);
+       if (bdev->bd_partno < disk->minors) {
+               *devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno);
                return 0;
        }
 
 
        disk->flags |= GENHD_FL_UP;
 
-       retval = blk_alloc_devt(disk->part0->bd_part, &devt);
+       retval = blk_alloc_devt(disk->part0, &devt);
        if (retval) {
                WARN_ON(1);
                return;