Unverified Commit 217759bb authored by Christian Brauner's avatar Christian Brauner
Browse files
parent a34606a9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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)				\
+18 −19
Original line number Diff line number Diff line
@@ -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);