Skip to content

Commit 217759b

Browse files
committed
xen: port block device access to file
Link: https://lore.kernel.org/r/20240123-vfs-bdev-file-v2-11-adbd023e19cc@kernel.org Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent a34606a commit 217759b

3 files changed

Lines changed: 22 additions & 23 deletions

File tree

drivers/block/xen-blkback/blkback.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ static int xen_vbd_translate(struct phys_req *req, struct xen_blkif *blkif,
465465
}
466466

467467
req->dev = vbd->pdevice;
468-
req->bdev = vbd->bdev_handle->bdev;
468+
req->bdev = file_bdev(vbd->bdev_file);
469469
rc = 0;
470470

471471
out:
@@ -969,7 +969,7 @@ static int dispatch_discard_io(struct xen_blkif_ring *ring,
969969
int err = 0;
970970
int status = BLKIF_RSP_OKAY;
971971
struct xen_blkif *blkif = ring->blkif;
972-
struct block_device *bdev = blkif->vbd.bdev_handle->bdev;
972+
struct block_device *bdev = file_bdev(blkif->vbd.bdev_file);
973973
struct phys_req preq;
974974

975975
xen_blkif_get(blkif);

drivers/block/xen-blkback/common.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ struct xen_vbd {
221221
unsigned char type;
222222
/* phys device that this vbd maps to. */
223223
u32 pdevice;
224-
struct bdev_handle *bdev_handle;
224+
struct file *bdev_file;
225225
/* Cached size parameter. */
226226
sector_t size;
227227
unsigned int flush_support:1;
@@ -360,7 +360,7 @@ struct pending_req {
360360
};
361361

362362

363-
#define vbd_sz(_v) bdev_nr_sectors((_v)->bdev_handle->bdev)
363+
#define vbd_sz(_v) bdev_nr_sectors(file_bdev((_v)->bdev_file))
364364

365365
#define xen_blkif_get(_b) (atomic_inc(&(_b)->refcnt))
366366
#define xen_blkif_put(_b) \

drivers/block/xen-blkback/xenbus.c

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ static void xen_update_blkif_status(struct xen_blkif *blkif)
8181
int i;
8282

8383
/* Not ready to connect? */
84-
if (!blkif->rings || !blkif->rings[0].irq || !blkif->vbd.bdev_handle)
84+
if (!blkif->rings || !blkif->rings[0].irq || !blkif->vbd.bdev_file)
8585
return;
8686

8787
/* Already connected? */
@@ -99,13 +99,12 @@ static void xen_update_blkif_status(struct xen_blkif *blkif)
9999
return;
100100
}
101101

102-
err = sync_blockdev(blkif->vbd.bdev_handle->bdev);
102+
err = sync_blockdev(file_bdev(blkif->vbd.bdev_file));
103103
if (err) {
104104
xenbus_dev_error(blkif->be->dev, err, "block flush");
105105
return;
106106
}
107-
invalidate_inode_pages2(
108-
blkif->vbd.bdev_handle->bdev->bd_inode->i_mapping);
107+
invalidate_inode_pages2(blkif->vbd.bdev_file->f_mapping);
109108

110109
for (i = 0; i < blkif->nr_rings; i++) {
111110
ring = &blkif->rings[i];
@@ -473,17 +472,17 @@ static void xenvbd_sysfs_delif(struct xenbus_device *dev)
473472

474473
static void xen_vbd_free(struct xen_vbd *vbd)
475474
{
476-
if (vbd->bdev_handle)
477-
bdev_release(vbd->bdev_handle);
478-
vbd->bdev_handle = NULL;
475+
if (vbd->bdev_file)
476+
fput(vbd->bdev_file);
477+
vbd->bdev_file = NULL;
479478
}
480479

481480
static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
482481
unsigned major, unsigned minor, int readonly,
483482
int cdrom)
484483
{
485484
struct xen_vbd *vbd;
486-
struct bdev_handle *bdev_handle;
485+
struct file *bdev_file;
487486

488487
vbd = &blkif->vbd;
489488
vbd->handle = handle;
@@ -492,32 +491,32 @@ static int xen_vbd_create(struct xen_blkif *blkif, blkif_vdev_t handle,
492491

493492
vbd->pdevice = MKDEV(major, minor);
494493

495-
bdev_handle = bdev_open_by_dev(vbd->pdevice, vbd->readonly ?
494+
bdev_file = bdev_file_open_by_dev(vbd->pdevice, vbd->readonly ?
496495
BLK_OPEN_READ : BLK_OPEN_WRITE, NULL, NULL);
497496

498-
if (IS_ERR(bdev_handle)) {
497+
if (IS_ERR(bdev_file)) {
499498
pr_warn("xen_vbd_create: device %08x could not be opened\n",
500499
vbd->pdevice);
501500
return -ENOENT;
502501
}
503502

504-
vbd->bdev_handle = bdev_handle;
505-
if (vbd->bdev_handle->bdev->bd_disk == NULL) {
503+
vbd->bdev_file = bdev_file;
504+
if (file_bdev(vbd->bdev_file)->bd_disk == NULL) {
506505
pr_warn("xen_vbd_create: device %08x doesn't exist\n",
507506
vbd->pdevice);
508507
xen_vbd_free(vbd);
509508
return -ENOENT;
510509
}
511510
vbd->size = vbd_sz(vbd);
512511

513-
if (cdrom || disk_to_cdi(vbd->bdev_handle->bdev->bd_disk))
512+
if (cdrom || disk_to_cdi(file_bdev(vbd->bdev_file)->bd_disk))
514513
vbd->type |= VDISK_CDROM;
515-
if (vbd->bdev_handle->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)
514+
if (file_bdev(vbd->bdev_file)->bd_disk->flags & GENHD_FL_REMOVABLE)
516515
vbd->type |= VDISK_REMOVABLE;
517516

518-
if (bdev_write_cache(bdev_handle->bdev))
517+
if (bdev_write_cache(file_bdev(bdev_file)))
519518
vbd->flush_support = true;
520-
if (bdev_max_secure_erase_sectors(bdev_handle->bdev))
519+
if (bdev_max_secure_erase_sectors(file_bdev(bdev_file)))
521520
vbd->discard_secure = true;
522521

523522
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
570569
struct xen_blkif *blkif = be->blkif;
571570
int err;
572571
int state = 0;
573-
struct block_device *bdev = be->blkif->vbd.bdev_handle->bdev;
572+
struct block_device *bdev = file_bdev(be->blkif->vbd.bdev_file);
574573

575574
if (!xenbus_read_unsigned(dev->nodename, "discard-enable", 1))
576575
return;
@@ -932,15 +931,15 @@ static void connect(struct backend_info *be)
932931
}
933932
err = xenbus_printf(xbt, dev->nodename, "sector-size", "%lu",
934933
(unsigned long)bdev_logical_block_size(
935-
be->blkif->vbd.bdev_handle->bdev));
934+
file_bdev(be->blkif->vbd.bdev_file)));
936935
if (err) {
937936
xenbus_dev_fatal(dev, err, "writing %s/sector-size",
938937
dev->nodename);
939938
goto abort;
940939
}
941940
err = xenbus_printf(xbt, dev->nodename, "physical-sector-size", "%u",
942941
bdev_physical_block_size(
943-
be->blkif->vbd.bdev_handle->bdev));
942+
file_bdev(be->blkif->vbd.bdev_file)));
944943
if (err)
945944
xenbus_dev_error(dev, err, "writing %s/physical-sector-size",
946945
dev->nodename);

0 commit comments

Comments
 (0)