int                     dev_id;         /* blkdev unique id */
 
        int                     major;          /* blkdev assigned major */
+       int                     minor;
        struct gendisk          *disk;          /* blkdev's gendisk and rq */
 
        u32                     image_format;   /* Either 1 or 2 */
        snprintf(disk->disk_name, sizeof(disk->disk_name), RBD_DRV_NAME "%d",
                 rbd_dev->dev_id);
        disk->major = rbd_dev->major;
-       disk->first_minor = 0;
+       disk->first_minor = rbd_dev->minor;
        disk->fops = &rbd_bd_ops;
        disk->private_data = rbd_dev;
 
                return sprintf(buf, "%d\n", rbd_dev->major);
 
        return sprintf(buf, "(none)\n");
+}
+
+static ssize_t rbd_minor_show(struct device *dev,
+                             struct device_attribute *attr, char *buf)
+{
+       struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
 
+       return sprintf(buf, "%d\n", rbd_dev->minor);
 }
 
 static ssize_t rbd_client_id_show(struct device *dev,
 static DEVICE_ATTR(size, S_IRUGO, rbd_size_show, NULL);
 static DEVICE_ATTR(features, S_IRUGO, rbd_features_show, NULL);
 static DEVICE_ATTR(major, S_IRUGO, rbd_major_show, NULL);
+static DEVICE_ATTR(minor, S_IRUGO, rbd_minor_show, NULL);
 static DEVICE_ATTR(client_id, S_IRUGO, rbd_client_id_show, NULL);
 static DEVICE_ATTR(pool, S_IRUGO, rbd_pool_show, NULL);
 static DEVICE_ATTR(pool_id, S_IRUGO, rbd_pool_id_show, NULL);
        &dev_attr_size.attr,
        &dev_attr_features.attr,
        &dev_attr_major.attr,
+       &dev_attr_minor.attr,
        &dev_attr_client_id.attr,
        &dev_attr_pool.attr,
        &dev_attr_pool_id.attr,
        if (ret < 0)
                goto err_out_id;
        rbd_dev->major = ret;
+       rbd_dev->minor = 0;
 
        /* Set up the blkdev mapping. */