int i;
 
        /* Not ready to connect? */
-       if (!blkif->rings || !blkif->rings[0].irq || !blkif->vbd.bdev)
+       if (!blkif->rings || !blkif->rings[0].irq || !blkif->vbd.bdev_handle)
                return;
 
        /* Already connected? */
                return;
        }
 
-       err = sync_blockdev(blkif->vbd.bdev);
+       err = sync_blockdev(blkif->vbd.bdev_handle->bdev);
        if (err) {
                xenbus_dev_error(blkif->be->dev, err, "block flush");
                return;
        }
-       invalidate_inode_pages2(blkif->vbd.bdev->bd_inode->i_mapping);
+       invalidate_inode_pages2(
+                       blkif->vbd.bdev_handle->bdev->bd_inode->i_mapping);
 
        for (i = 0; i < blkif->nr_rings; i++) {
                ring = &blkif->rings[i];
 
 static void xen_vbd_free(struct xen_vbd *vbd)
 {
-       if (vbd->bdev)
-               blkdev_put(vbd->bdev, NULL);
-       vbd->bdev = NULL;
+       if (vbd->bdev_handle)
+               bdev_release(vbd->bdev_handle);
+       vbd->bdev_handle = NULL;
 }
 
 static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
                          int cdrom)
 {
        struct xen_vbd *vbd;
-       struct block_device *bdev;
+       struct bdev_handle *bdev_handle;
 
        vbd = &blkif->vbd;
        vbd->handle   = handle;
 
        vbd->pdevice  = MKDEV(major, minor);
 
-       bdev = blkdev_get_by_dev(vbd->pdevice, vbd->readonly ?
+       bdev_handle = bdev_open_by_dev(vbd->pdevice, vbd->readonly ?
                                 BLK_OPEN_READ : BLK_OPEN_WRITE, NULL, NULL);
 
-       if (IS_ERR(bdev)) {
+       if (IS_ERR(bdev_handle)) {
                pr_warn("xen_vbd_create: device %08x could not be opened\n",
                        vbd->pdevice);
                return -ENOENT;
        }
 
-       vbd->bdev = bdev;
-       if (vbd->bdev->bd_disk == NULL) {
+       vbd->bdev_handle = bdev_handle;
+       if (vbd->bdev_handle->bdev->bd_disk == NULL) {
                pr_warn("xen_vbd_create: device %08x doesn't exist\n",
                        vbd->pdevice);
                xen_vbd_free(vbd);
        }
        vbd->size = vbd_sz(vbd);
 
-       if (cdrom || disk_to_cdi(vbd->bdev->bd_disk))
+       if (cdrom || disk_to_cdi(vbd->bdev_handle->bdev->bd_disk))
                vbd->type |= VDISK_CDROM;
-       if (vbd->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)
+       if (vbd->bdev_handle->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)
                vbd->type |= VDISK_REMOVABLE;
 
-       if (bdev_write_cache(bdev))
+       if (bdev_write_cache(bdev_handle->bdev))
                vbd->flush_support = true;
-       if (bdev_max_secure_erase_sectors(bdev))
+       if (bdev_max_secure_erase_sectors(bdev_handle->bdev))
                vbd->discard_secure = true;
 
        pr_debug("Successful creation of handle=%04x (dom=%u)\n",
        struct xen_blkif *blkif = be->blkif;
        int err;
        int state = 0;
-       struct block_device *bdev = be->blkif->vbd.bdev;
+       struct block_device *bdev = be->blkif->vbd.bdev_handle->bdev;
 
        if (!xenbus_read_unsigned(dev->nodename, "discard-enable", 1))
                return;
                goto abort;
        }
        err = xenbus_printf(xbt, dev->nodename, "sector-size", "%lu",
-                           (unsigned long)
-                           bdev_logical_block_size(be->blkif->vbd.bdev));
+                           (unsigned long)bdev_logical_block_size(
+                                       be->blkif->vbd.bdev_handle->bdev));
        if (err) {
                xenbus_dev_fatal(dev, err, "writing %s/sector-size",
                                 dev->nodename);
                goto abort;
        }
        err = xenbus_printf(xbt, dev->nodename, "physical-sector-size", "%u",
-                           bdev_physical_block_size(be->blkif->vbd.bdev));
+                           bdev_physical_block_size(
+                                       be->blkif->vbd.bdev_handle->bdev));
        if (err)
                xenbus_dev_error(dev, err, "writing %s/physical-sector-size",
                                 dev->nodename);