• D
    net: aquantia: fix out of memory condition on rx side · 83360eb7
    Dmitry Bogdanov 提交于
    [ Upstream commit be6cef69ba570ebb327eba1ef6438f7af49aaf86 ]
    
    On embedded environments with hard memory limits it is a normal although
    rare case when skb can't be allocated on rx part under high traffic.
    
    In such OOM cases napi_complete_done() was not called.
    So the napi object became in an invalid state like it is "scheduled".
    Kernel do not re-schedules the poll of that napi object.
    
    Consequently, kernel can not remove that object the system hangs on
    `ifconfig down` waiting for a poll.
    
    We are fixing this by gracefully closing napi poll routine with correct
    invocation of napi_complete_done.
    
    This was reproduced with artificially failing the allocation of skb to
    simulate an "out of memory" error case and check that traffic does
    not get stuck.
    
    Fixes: 970a2e98 ("net: ethernet: aquantia: Vector operations")
    Signed-off-by: NIgor Russkikh <igor.russkikh@aquantia.com>
    Signed-off-by: NDmitry Bogdanov <dmitry.bogdanov@aquantia.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    83360eb7
aq_vec.c 8.6 KB