lkml.org 
[lkml]   [2015]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.1 13/56] xen-netback: fix a BUG() during initialization
    Date
    4.1-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: "Palik, Imre" <imrep@amazon.de>

    [ Upstream commit 12b322ac85208de564ecf23aa754d796a91de21f ]

    Commit edafc132baac ("xen-netback: making the bandwidth limiter runtime settable")
    introduced the capability to change the bandwidth rate limit at runtime.
    But it also introduced a possible crashing bug.

    If netback receives two XenbusStateConnected without getting the
    hotplug-status watch firing in between, then it will try to register the
    watches for the rate limiter again. But this triggers a BUG() in the watch
    registration code.

    The fix modifies connect() to remove the possibly existing packet-rate
    watches before trying to install those watches. This behaviour is in line
    with how connect() deals with the hotplug-status watch.

    Signed-off-by: Imre Palik <imrep@amazon.de>
    Cc: Matt Wilson <msw@amazon.com>
    Acked-by: Wei Liu <wei.liu2@citrix.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/xen-netback/xenbus.c | 4 ++++
    1 file changed, 4 insertions(+)

    --- a/drivers/net/xen-netback/xenbus.c
    +++ b/drivers/net/xen-netback/xenbus.c
    @@ -681,6 +681,9 @@ static int xen_register_watchers(struct
    char *node;
    unsigned maxlen = strlen(dev->nodename) + sizeof("/rate");

    + if (vif->credit_watch.node)
    + return -EADDRINUSE;
    +
    node = kmalloc(maxlen, GFP_KERNEL);
    if (!node)
    return -ENOMEM;
    @@ -770,6 +773,7 @@ static void connect(struct backend_info
    }

    xen_net_read_rate(dev, &credit_bytes, &credit_usec);
    + xen_unregister_watchers(be->vif);
    xen_register_watchers(dev, be->vif);
    read_xenbus_vif_flags(be);




    \
     
     \ /
      Last update: 2015-07-08 10:21    [W:4.045 / U:0.240 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site