sunvnet: improve error handling when a remote crashes
authorDavid L Stevens <david.stevens@oracle.com>
Mon, 26 Jan 2015 20:54:27 +0000 (15:54 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Jan 2015 08:25:21 +0000 (00:25 -0800)
commit8e2b60cd18381a2f102dc6157ea2481a9ddd0001
tree08a04d624d6b289fa51570c462c7b5ae7a102a6c
parent07ac3e7099b5788ee4b78233c96532c6209a304b
sunvnet: improve error handling when a remote crashes

If a remote machine crashes while there are pending transmit buffers, the
sunvnet driver reallocates the ring descriptors giving us enries that have
state VIO_DESC_FREE but also an allocated skb. This results in a BUG_ON()
call when the remote reboots and we reach that point in the ring.

This patch:

1) clears pending tx packets in the ring on port reset
2) changes a BUG_ON() to a pr_warn() when a remote host has given us an invalid
descriptor state
3) collapses multiple active buffer frees in a ring to a single message per
ring and adds the device name and remote MAC address

This fixes the particular problem of not cleaning up pending buffers on a
reset, but also prevents us from crashing if the remote handles descriptors
out of order or sets an unexpected state for a descriptor.

Signed-off-by: David L Stevens <david.stevens@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sun/sunvnet.c