Message ID | 20220906162414.105452-1-sj@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [for-stable-5.10.y] xen-blkfront: Cache feature_persistent value before advertisement | expand |
On Tue, Sep 06, 2022 at 04:24:14PM +0000, SeongJae Park wrote: > commit fe8f65b018effbf473f53af3538d0c1878b8b329 upstream. > > Xen blkfront advertises its support of the persistent grants feature > when it first setting up and when resuming in 'talk_to_blkback()'. > Then, blkback reads the advertised value when it connects with blkfront > and decides if it will use the persistent grants feature or not, and > advertises its decision to blkfront. Blkfront reads the blkback's > decision and it also makes the decision for the use of the feature. > > Commit 402c43ea6b34 ("xen-blkfront: Apply 'feature_persistent' parameter > when connect"), however, made the blkfront's read of the parameter for > disabling the advertisement, namely 'feature_persistent', to be done > when it negotiate, not when advertise. Therefore blkfront advertises > without reading the parameter. As the field for caching the parameter > value is zero-initialized, it always advertises as the feature is > disabled, so that the persistent grants feature becomes always disabled. > > This commit fixes the issue by making the blkfront does parmeter caching > just before the advertisement. > > Fixes: 402c43ea6b34 ("xen-blkfront: Apply 'feature_persistent' parameter when connect") > Cc: <stable@vger.kernel.org> # 5.10.x > Reported-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > Signed-off-by: SeongJae Park <sj@kernel.org> > Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > Reviewed-by: Juergen Gross <jgross@suse.com> > Link: https://lore.kernel.org/r/20220831165824.94815-4-sj@kernel.org > Signed-off-by: Juergen Gross <jgross@suse.com> > --- > > This patch is a manual backport of the upstream commit on the 5.10.y > kernel. Please note that this patch can be applied on the latest 5.10.y > only after the preceding patch[1] is applied. > > [1] https://lore.kernel.org/stable/20220906132819.016040100@linuxfoundation.org/ Now queued up, thanks. greg k-h
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index 9d5460f6e0ff..6f33d62331b1 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -1852,6 +1852,12 @@ static void free_info(struct blkfront_info *info) kfree(info); } +/* 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"); + /* Common code used when first setting up, and when resuming. */ static int talk_to_blkback(struct xenbus_device *dev, struct blkfront_info *info) @@ -1943,6 +1949,7 @@ static int talk_to_blkback(struct xenbus_device *dev, message = "writing protocol"; goto abort_transaction; } + info->feature_persistent_parm = feature_persistent; err = xenbus_printf(xbt, dev->nodename, "feature-persistent", "%u", info->feature_persistent_parm); if (err) @@ -2019,12 +2026,6 @@ 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 @@ -2394,7 +2395,6 @@ static void blkfront_gather_backend_features(struct blkfront_info *info) if (xenbus_read_unsigned(info->xbdev->otherend, "feature-discard", 0)) blkfront_setup_discard(info); - info->feature_persistent_parm = feature_persistent; if (info->feature_persistent_parm) info->feature_persistent = !!xenbus_read_unsigned(info->xbdev->otherend,