diff options
Diffstat (limited to 'drivers/net/xen-netfront.c')
| -rw-r--r-- | drivers/net/xen-netfront.c | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index ff04d4f95baa..e30d80033cbc 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -907,6 +907,7 @@ static int handle_incoming_queue(struct net_device *dev,  		/* Ethernet work: Delayed to here as it peeks the header. */  		skb->protocol = eth_type_trans(skb, dev); +		skb_reset_network_header(skb);  		if (checksum_setup(dev, skb)) {  			kfree_skb(skb); @@ -1832,7 +1833,6 @@ static void netback_changed(struct xenbus_device *dev,  	case XenbusStateReconfiguring:  	case XenbusStateReconfigured:  	case XenbusStateUnknown: -	case XenbusStateClosed:  		break;  	case XenbusStateInitWait: @@ -1847,6 +1847,10 @@ static void netback_changed(struct xenbus_device *dev,  		netdev_notify_peers(netdev);  		break; +	case XenbusStateClosed: +		if (dev->state == XenbusStateClosed) +			break; +		/* Missed the backend's CLOSING state -- fallthrough */  	case XenbusStateClosing:  		xenbus_frontend_closed(dev);  		break; |