Re: [PATCH v2 11/34] xen: port block device access to file

Jan Kara
2024-01-31T18:31:14Z

On Tue 23-01-24 14:26:28, Christian Brauner wrote:
> Signed-off-by: Christian Brauner <brauner@kernel.org>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

Honza

> ---
> drivers/block/xen-blkback/blkback.c | 4 ++--
> drivers/block/xen-blkback/common.h | 4 ++--
> drivers/block/xen-blkback/xenbus.c | 37 ++++++++++++++++++-------------------
> 3 files changed, 22 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
> index 4defd7f387c7..944576d582fb 100644
> --- a/drivers/block/xen-blkback/blkback.c
> +++ b/drivers/block/xen-blkback/blkback.c
> @@ -465,7 +465,7 @@ static int xen_vbd_translate(struct phys_req *req, struct xen_blkif *blkif,
> }
>
> req->dev = vbd->pdevice;
> - req->bdev = vbd->bdev_handle->bdev;
> + req->bdev = file_bdev(vbd->bdev_file);
> rc = 0;
>
> out:
> @@ -969,7 +969,7 @@ static int dispatch_discard_io(struct xen_blkif_ring *ring,
> int err = 0;
> int status = BLKIF_RSP_OKAY;
> struct xen_blkif *blkif = ring->blkif;
> - struct block_device *bdev = blkif->vbd.bdev_handle->bdev;
> + struct block_device *bdev = file_bdev(blkif->vbd.bdev_file);
> struct phys_req preq;
>
> xen_blkif_get(blkif);
> diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
> index 1432c83183d0..b427d54bc120 100644
> --- a/drivers/block/xen-blkback/common.h
> +++ b/drivers/block/xen-blkback/common.h
> @@ -221,7 +221,7 @@ struct xen_vbd {
> unsigned char type;
> /* phys device that this vbd maps to. */
> u32 pdevice;
> - struct bdev_handle *bdev_handle;
> + struct file *bdev_file;
> /* Cached size parameter. */
> sector_t size;
> unsigned int flush_support:1;
> @@ -360,7 +360,7 @@ struct pending_req {
> };
>
>
> -#define vbd_sz(_v) bdev_nr_sectors((_v)->bdev_handle->bdev)
> +#define vbd_sz(_v) bdev_nr_sectors(file_bdev((_v)->bdev_file))
>
> #define xen_blkif_get(_b) (atomic_inc(&(_b)->refcnt))
> #define xen_blkif_put(_b) \
> diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
> index e34219ea2b05..0621878940ae 100644
> --- a/drivers/block/xen-blkback/xenbus.c
> +++ b/drivers/block/xen-blkback/xenbus.c
> @@ -81,7 +81,7 @@ static void xen_update_blkif_status(struct xen_blkif *blkif)
> int i;
>
> /* Not ready to connect? */
> - if (!blkif->rings || !blkif->rings[0].irq || !blkif->vbd.bdev_handle)
> + if (!blkif->rings || !blkif->rings[0].irq || !blkif->vbd.bdev_file)
> return;
>
> /* Already connected? */
> @@ -99,13 +99,12 @@ static void xen_update_blkif_status(struct xen_blkif *blkif)
> return;
> }
>
> - err = sync_blockdev(blkif->vbd.bdev_handle->bdev);
> + err = sync_blockdev(file_bdev(blkif->vbd.bdev_file));
> if (err) {
> xenbus_dev_error(blkif->be->dev, err, "block flush");
> return;
> }
> - invalidate_inode_pages2(
> - blkif->vbd.bdev_handle->bdev->bd_inode->i_mapping);
> + invalidate_inode_pages2(blkif->vbd.bdev_file->f_mapping);
>
> for (i = 0; i < blkif->nr_rings; i++) {
> ring = &blkif->rings[i];
> @@ -473,9 +472,9 @@ static void xenvbd_sysfs_delif(struct xenbus_device *dev)
>
> static void xen_vbd_free(struct xen_vbd *vbd)
> {
> - if (vbd->bdev_handle)
> - bdev_release(vbd->bdev_handle);
> - vbd->bdev_handle = NULL;
> + if (vbd->bdev_file)
> + fput(vbd->bdev_file);
> + vbd->bdev_file = NULL;
> }
>
> static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
> @@ -483,7 +482,7 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
> int cdrom)
> {
> struct xen_vbd *vbd;
> - struct bdev_handle *bdev_handle;
> + struct file *bdev_file;
>
> vbd = &blkif->vbd;
> vbd->handle = handle;
> @@ -492,17 +491,17 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
>
> vbd->pdevice = MKDEV(major, minor);
>
> - bdev_handle = bdev_open_by_dev(vbd->pdevice, vbd->readonly ?
> + bdev_file = bdev_file_open_by_dev(vbd->pdevice, vbd->readonly ?
> BLK_OPEN_READ : BLK_OPEN_WRITE, NULL, NULL);
>
> - if (IS_ERR(bdev_handle)) {
> + if (IS_ERR(bdev_file)) {
> pr_warn("xen_vbd_create: device %08x could not be opened\n",
> vbd->pdevice);
> return -ENOENT;
> }
>
> - vbd->bdev_handle = bdev_handle;
> - if (vbd->bdev_handle->bdev->bd_disk == NULL) {
> + vbd->bdev_file = bdev_file;
> + if (file_bdev(vbd->bdev_file)->bd_disk == NULL) {
> pr_warn("xen_vbd_create: device %08x doesn't exist\n",
> vbd->pdevice);
> xen_vbd_free(vbd);
> @@ -510,14 +509,14 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
> }
> vbd->size = vbd_sz(vbd);
>
> - if (cdrom || disk_to_cdi(vbd->bdev_handle->bdev->bd_disk))
> + if (cdrom || disk_to_cdi(file_bdev(vbd->bdev_file)->bd_disk))
> vbd->type |= VDISK_CDROM;
> - if (vbd->bdev_handle->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)
> + if (file_bdev(vbd->bdev_file)->bd_disk->flags & GENHD_FL_REMOVABLE)
> vbd->type |= VDISK_REMOVABLE;
>
> - if (bdev_write_cache(bdev_handle->bdev))
> + if (bdev_write_cache(file_bdev(bdev_file)))
> vbd->flush_support = true;
> - if (bdev_max_secure_erase_sectors(bdev_handle->bdev))
> + if (bdev_max_secure_erase_sectors(file_bdev(bdev_file)))
> vbd->discard_secure = true;
>
> pr_debug("Successful creation of handle=%04x (dom=%u)\n",
> @@ -570,7 +569,7 @@ static void xen_blkbk_discard(struct xenbus_transaction xbt, struct backend_info
> struct xen_blkif *blkif = be->blkif;
> int err;
> int state = 0;
> - struct block_device *bdev = be->blkif->vbd.bdev_handle->bdev;
> + struct block_device *bdev = file_bdev(be->blkif->vbd.bdev_file);
>
> if (!xenbus_read_unsigned(dev->nodename, "discard-enable", 1))
> return;
> @@ -932,7 +931,7 @@ static void connect(struct backend_info *be)
> }
> err = xenbus_printf(xbt, dev->nodename, "sector-size", "%lu",
> (unsigned long)bdev_logical_block_size(
> - be->blkif->vbd.bdev_handle->bdev));
> + file_bdev(be->blkif->vbd.bdev_file)));
> if (err) {
> xenbus_dev_fatal(dev, err, "writing %s/sector-size",
> dev->nodename);
> @@ -940,7 +939,7 @@ static void connect(struct backend_info *be)
> }
> err = xenbus_printf(xbt, dev->nodename, "physical-sector-size", "%u",
> bdev_physical_block_size(
> - be->blkif->vbd.bdev_handle->bdev));
> + file_bdev(be->blkif->vbd.bdev_file)));
> if (err)
> xenbus_dev_error(dev, err, "writing %s/physical-sector-size",
> dev->nodename);
>
> --
> 2.43.0
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR