Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8235777b authored by Juergen Gross's avatar Juergen Gross
Browse files

xen: make use of xenbus_read_unsigned() in xen-blkback



Use xenbus_read_unsigned() instead of xenbus_scanf() when possible.
This requires to change the type of one read from int to unsigned,
but this case has been wrong before: negative values are not allowed
for the modified case.

Cc: konrad.wilk@oracle.com
Cc: roger.pau@citrix.com

Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Acked-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
parent 9c53a179
Loading
Loading
Loading
Loading
+14 −22
Original line number Original line Diff line number Diff line
@@ -533,13 +533,11 @@ static void xen_blkbk_discard(struct xenbus_transaction xbt, struct backend_info
	struct xenbus_device *dev = be->dev;
	struct xenbus_device *dev = be->dev;
	struct xen_blkif *blkif = be->blkif;
	struct xen_blkif *blkif = be->blkif;
	int err;
	int err;
	int state = 0, discard_enable;
	int state = 0;
	struct block_device *bdev = be->blkif->vbd.bdev;
	struct block_device *bdev = be->blkif->vbd.bdev;
	struct request_queue *q = bdev_get_queue(bdev);
	struct request_queue *q = bdev_get_queue(bdev);


	err = xenbus_scanf(XBT_NIL, dev->nodename, "discard-enable", "%d",
	if (!xenbus_read_unsigned(dev->nodename, "discard-enable", 1))
			   &discard_enable);
	if (err == 1 && !discard_enable)
		return;
		return;


	if (blk_queue_discard(q)) {
	if (blk_queue_discard(q)) {
@@ -1039,22 +1037,17 @@ static int connect_ring(struct backend_info *be)
		xenbus_dev_fatal(dev, err, "unknown fe protocol %s", protocol);
		xenbus_dev_fatal(dev, err, "unknown fe protocol %s", protocol);
		return -ENOSYS;
		return -ENOSYS;
	}
	}
	err = xenbus_scanf(XBT_NIL, dev->otherend,
	pers_grants = xenbus_read_unsigned(dev->otherend, "feature-persistent",
			   "feature-persistent", "%u", &pers_grants);
					   0);
	if (err <= 0)
		pers_grants = 0;

	be->blkif->vbd.feature_gnt_persistent = pers_grants;
	be->blkif->vbd.feature_gnt_persistent = pers_grants;
	be->blkif->vbd.overflow_max_grants = 0;
	be->blkif->vbd.overflow_max_grants = 0;


	/*
	/*
	 * Read the number of hardware queues from frontend.
	 * Read the number of hardware queues from frontend.
	 */
	 */
	err = xenbus_scanf(XBT_NIL, dev->otherend, "multi-queue-num-queues",
	requested_num_queues = xenbus_read_unsigned(dev->otherend,
			   "%u", &requested_num_queues);
						    "multi-queue-num-queues",
	if (err < 0) {
						    1);
		requested_num_queues = 1;
	} else {
	if (requested_num_queues > xenblk_max_queues
	if (requested_num_queues > xenblk_max_queues
	    || requested_num_queues == 0) {
	    || requested_num_queues == 0) {
		/* Buggy or malicious guest. */
		/* Buggy or malicious guest. */
@@ -1063,7 +1056,6 @@ static int connect_ring(struct backend_info *be)
				requested_num_queues, xenblk_max_queues);
				requested_num_queues, xenblk_max_queues);
		return -ENOSYS;
		return -ENOSYS;
	}
	}
	}
	be->blkif->nr_rings = requested_num_queues;
	be->blkif->nr_rings = requested_num_queues;
	if (xen_blkif_alloc_rings(be->blkif))
	if (xen_blkif_alloc_rings(be->blkif))
		return -ENOMEM;
		return -ENOMEM;