• Dexuan Cui's avatar
    vmbus: fix subchannel removal · b5679ceb
    Dexuan Cui authored
    The changes to split ring allocation from open/close, broke
    the cleanup of subchannels. This resulted in problems using
    uio on network devices because the subchannel was left behind
    when the network device was unbound.
    
    The cause was in the disconnect logic which used list splice
    to move the subchannel list into a local variable. This won't
    work because the subchannel list is needed later during the
    process of the rescind messages (relid2channel).
    
    The fix is to just leave the subchannel list in place
    which is what the original code did. The list is cleaned
    up later when the host rescind is processed.
    
    Without the fix, we have a lot of "hang" issues in netvsc when we
    try to change the NIC's MTU, set the number of channels, etc.
    
    Fixes: ae6935ed ("vmbus: split ring buffer allocation from open")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarStephen Hemminger <sthemmin@microsoft.com>
    Signed-off-by: default avatarDexuan Cui <decui@microsoft.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    b5679ceb
channel.c 25.6 KB