Merge branch 'hv_netvsc-races'
authorDavid S. Miller <davem@davemloft.net>
Mon, 16 May 2016 17:26:01 +0000 (13:26 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 May 2016 17:26:01 +0000 (13:26 -0400)
commit860d7ef64da14b642a2b0dc15381b69b7263fc44
tree9029cc6548f66604f49a6397c3e80de2d0734300
parentda47b4572056487fd7941c26f73b3e8815ff712a
parent88098834827025cc04c15f1b4b0d9bbef3cf55af
Merge branch 'hv_netvsc-races'

Vitaly Kuznetsov says:

====================
hv_netvsc: avoid races on mtu change/set channels

Changes since v1:
- Rebased to net-next [Haiyang Zhang]

Original description:

MTU change and set channels operations are implemented as netvsc device
re-creation destroying internal structures (struct net_device stays). This
is really unfortunate but there is no support from Hyper-V host to do it
in a different way. Such re-creation is unsurprisingly racy, Haiyang
reported a crash when netvsc_change_mtu() is racing with
netvsc_link_change() but I was able to identify additional races upon
investigation. Both netvsc_set_channels() and netvsc_change_mtu() race
against:
1) netvsc_link_change()
2) netvsc_remove()
3) netvsc_send()

To solve these issues without introducing new locks some refactoring is
required. We need to get rid of very complex link graph in all the
internal structures and avoid traveling through structures which are being
removed.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>