Message ID | 20240123-vfs-bdev-file-v2-11-adbd023e19cc@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Open block devices as files | expand |
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 >
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);
Signed-off-by: Christian Brauner <brauner@kernel.org> --- 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(-)