+}
+
+struct block_dev*
+blk_mount_part(struct block_dev* bdev,
+ const char* name,
+ size_t index,
+ u64_t start_lba,
+ u64_t end_lba)
+{
+ struct block_dev* pbdev = cake_grab(lbd_pile);
+ memcpy(pbdev, bdev, sizeof(*bdev));
+
+ struct device* dev =
+ device_addvol(NULL, pbdev, "%sp%d", bdev->bdev_id, index + 1);
+ dev->write = __block_write;
+ dev->read = __block_read;
+
+ pbdev->start_lba = start_lba;
+ pbdev->end_lba = end_lba;
+ pbdev->dev = dev;
+
+ strcpy(pbdev->bdev_id, dev->name_val);
+ if (name) {
+ strncpy(pbdev->name, name, PARTITION_NAME_SIZE);
+ }
+
+ llist_append(&bdev->parts, &pbdev->parts);
+
+ return pbdev;