lkml.org 
[lkml]   [2016]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/6] hv_netvsc: synchronize netvsc_change_mtu()/netvsc_set_channels() with netvsc_remove()
    Date
    When netvsc device is removed during mtu change or channels setup we get
    into troubles as both paths are trying to remove the device. Synchronize
    them with start_remove flag and rtnl lock.

    Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
    ---
    drivers/net/hyperv/netvsc_drv.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
    index 393403a..71b9125 100644
    --- a/drivers/net/hyperv/netvsc_drv.c
    +++ b/drivers/net/hyperv/netvsc_drv.c
    @@ -707,7 +707,7 @@ static int netvsc_set_channels(struct net_device *net,
    int ret = 0;
    bool recovering = false;

    - if (!nvdev || nvdev->destroy)
    + if (net_device_ctx->start_remove || !nvdev || nvdev->destroy)
    return -ENODEV;

    num_chn = nvdev->num_chn;
    @@ -855,7 +855,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
    u32 num_chn;
    int ret = 0;

    - if (nvdev == NULL || nvdev->destroy)
    + if (ndevctx->start_remove || !nvdev || nvdev->destroy)
    return -ENODEV;

    if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2)
    @@ -1206,7 +1206,12 @@ static int netvsc_remove(struct hv_device *dev)
    ndev_ctx = netdev_priv(net);
    net_device = ndev_ctx->nvdev;

    + /* Avoid racing with netvsc_change_mtu()/netvsc_set_channels()
    + * removing the device.
    + */
    + rtnl_lock();
    ndev_ctx->start_remove = true;
    + rtnl_unlock();

    cancel_delayed_work_sync(&ndev_ctx->dwork);
    cancel_work_sync(&ndev_ctx->work);
    --
    2.5.5
    \
     
     \ /
      Last update: 2016-05-12 15:01    [W:3.396 / U:1.424 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site