Commit 74a85247 authored by SeongJae Park's avatar SeongJae Park Committed by Boris Ostrovsky
Browse files

xen-blkfront: add a parameter for disabling of persistent grants

Persistent grants feature provides high scalability.  On some small
systems, however, it could incur data copy overheads[1] and thus it is
required to be disabled.  It can be disabled from blkback side using a
module parameter, 'feature_persistent'.  But, it is impossible from
blkfront side.  For the reason, this commit adds a blkfront module
parameter for disabling of the feature.

[1] https://wiki.xen.org/wiki/Xen_4.3_Block_Protocol_Scalability



Signed-off-by: default avatarSeongJae Park <sjpark@amazon.de>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
Acked-by: default avatarRoger Pau Monné <roger.pau@citrix.com>
Link: https://lore.kernel.org/r/20200923061841.20531-3-sjpark@amazon.com


Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
parent aac8a70d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -8,3 +8,12 @@ Description:
                is 32 - higher value means more potential throughput but more
                memory usage. The backend picks the minimum of the frontend
                and its default backend value.

What:           /sys/module/xen_blkfront/parameters/feature_persistent
Date:           September 2020
KernelVersion:  5.10
Contact:        SeongJae Park <sjpark@amazon.de>
Description:
                Whether to enable the persistent grants feature or not.  Note
                that this option only takes effect on newly created frontends.
                The default is Y (enable).
+15 −5
Original line number Diff line number Diff line
@@ -1866,8 +1866,8 @@ again:
		message = "writing protocol";
		goto abort_transaction;
	}
	err = xenbus_printf(xbt, dev->nodename,
			    "feature-persistent", "%u", 1);
	err = xenbus_printf(xbt, dev->nodename, "feature-persistent", "%u",
			info->feature_persistent);
	if (err)
		dev_warn(&dev->dev,
			 "writing persistent grants feature to xenbus");
@@ -1941,6 +1941,13 @@ static int negotiate_mq(struct blkfront_info *info)
	}
	return 0;
}

/* Enable the persistent grants feature. */
static bool feature_persistent = true;
module_param(feature_persistent, bool, 0644);
MODULE_PARM_DESC(feature_persistent,
		"Enables the persistent grants feature");

/**
 * Entry point to this code when a new device is created.  Allocate the basic
 * structures and the ring buffer for communication with the backend, and
@@ -2007,6 +2014,8 @@ static int blkfront_probe(struct xenbus_device *dev,
	info->vdevice = vdevice;
	info->connected = BLKIF_STATE_DISCONNECTED;

	info->feature_persistent = feature_persistent;

	/* Front end dir is a number, which is used as the id. */
	info->handle = simple_strtoul(strrchr(dev->nodename, '/')+1, NULL, 0);
	dev_set_drvdata(&dev->dev, info);
@@ -2316,6 +2325,7 @@ static void blkfront_gather_backend_features(struct blkfront_info *info)
	if (xenbus_read_unsigned(info->xbdev->otherend, "feature-discard", 0))
		blkfront_setup_discard(info);

	if (info->feature_persistent)
		info->feature_persistent =
			!!xenbus_read_unsigned(info->xbdev->otherend,
					       "feature-persistent", 0);