summaryrefslogtreecommitdiffstats
path: root/drivers/staging/unisys
diff options
context:
space:
mode:
authorTim Sell <Timothy.Sell@unisys.com>2015-07-24 12:00:25 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-07-24 13:43:37 -0700
commitdb8499273e0110b2285f9190dcde5e8492d46076 (patch)
tree3de9e8a17d1172b3df4aa270bfc8303187b5407a /drivers/staging/unisys
parent81d275c6c37f075643fec3789ea3f3e4097cda41 (diff)
downloadlinux-db8499273e0110b2285f9190dcde5e8492d46076.tar.bz2
staging: unisys: visornic - prevent NETDEV WATCHDOG timeouts after IO recovery
After IO partition recovery, it was possible to get into a situation where a visornic device would repeatedly report: NETDEV WATCHDOG: eth0 (): transmit queue 0 timed out The actual problem would affect any visornic device that was rapidly transmitting at the same time the IO partition was being recovered. Once you hit the problem, the only way to resume use of the nic would be to reboot the Linux client partition. The problem was caused by chstat.sent_xmit and chstat.got_xmit_done NOT getting cleared during IO partition recovery. This is necessary because outstanding xmits would essentially be "abandoned" during such recovery. These fields are now cleared in virtnic_serverdown_complete(). Signed-off-by: Tim Sell <Timothy.Sell@unisys.com> Signed-off-by: Benjamin Romer <benjamin.romer@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/unisys')
-rw-r--r--drivers/staging/unisys/visornic/visornic_main.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/staging/unisys/visornic/visornic_main.c b/drivers/staging/unisys/visornic/visornic_main.c
index a4aa8afd04dd..2a9b055dcc51 100644
--- a/drivers/staging/unisys/visornic/visornic_main.c
+++ b/drivers/staging/unisys/visornic/visornic_main.c
@@ -380,6 +380,8 @@ visornic_serverdown_complete(struct visornic_devdata *devdata)
rtnl_unlock();
atomic_set(&devdata->num_rcvbuf_in_iovm, 0);
+ devdata->chstat.sent_xmit = 0;
+ devdata->chstat.got_xmit_done = 0;
if (devdata->server_down_complete_func)
(*devdata->server_down_complete_func)(devdata->dev, 0);