From: Greg Kroah-Hartman Date: Thu, 8 Sep 2022 11:49:52 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v5.19.9~87 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3db25d6a248febb27950023bef5dff01af27a060;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: xen-blkfront-cache-feature_persistent-value-before-advertisement.patch --- diff --git a/queue-5.10/series b/queue-5.10/series index 65009bd889b..e6f3e166698 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -1 +1,2 @@ nfsd-fix-verifier-returned-in-stable-writes.patch +xen-blkfront-cache-feature_persistent-value-before-advertisement.patch diff --git a/queue-5.10/xen-blkfront-cache-feature_persistent-value-before-advertisement.patch b/queue-5.10/xen-blkfront-cache-feature_persistent-value-before-advertisement.patch new file mode 100644 index 00000000000..f5896874bdb --- /dev/null +++ b/queue-5.10/xen-blkfront-cache-feature_persistent-value-before-advertisement.patch @@ -0,0 +1,87 @@ +From fe8f65b018effbf473f53af3538d0c1878b8b329 Mon Sep 17 00:00:00 2001 +From: SeongJae Park +Date: Wed, 31 Aug 2022 16:58:24 +0000 +Subject: xen-blkfront: Cache feature_persistent value before advertisement +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: SeongJae Park + +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: # 5.10.x +Reported-by: Marek Marczykowski-Górecki +Signed-off-by: SeongJae Park +Tested-by: Marek Marczykowski-Górecki +Reviewed-by: Juergen Gross +Link: https://lore.kernel.org/r/20220831165824.94815-4-sj@kernel.org +Signed-off-by: Juergen Gross +Signed-off-by: Greg Kroah-Hartman +--- + drivers/block/xen-blkfront.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +--- a/drivers/block/xen-blkfront.c ++++ b/drivers/block/xen-blkfront.c +@@ -1852,6 +1852,12 @@ static void free_info(struct blkfront_in + 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 @@ again: + 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_ + 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_feat + 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,