lkml.org 
[lkml]   [2022]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 104/155] xen-blkfront: Cache feature_persistent value before advertisement
    Date
    From: SeongJae Park <sj@kernel.org>

    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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    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
    @@ -1759,6 +1759,12 @@ abort_transaction:
    return err;
    }

    +/* 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)
    @@ -1850,6 +1856,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)
    @@ -1919,12 +1926,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
    @@ -2284,7 +2285,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,

    \
     
     \ /
      Last update: 2022-09-06 16:13    [W:2.625 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site