> -----Original Message----- > From: k...@exchange.microsoft.com [mailto:k...@exchange.microsoft.com] > Sent: Wednesday, April 19, 2017 1:49 PM > To: da...@davemloft.net; netdev@vger.kernel.org; linux- > ker...@vger.kernel.org; de...@linuxdriverproject.org; o...@aepfle.de; > a...@canonical.com; jasow...@redhat.com; > leann.ogasaw...@canonical.comi; marcelo.ce...@canonical.com; Stephen > Hemminger <sthem...@microsoft.com> > Cc: KY Srinivasan <k...@microsoft.com> > Subject: [PATCH 1/1] netvsc: Deal with rescinded channels correctly > > [This sender failed our fraud detection checks and may not be who they > appear to be. Learn about spoofing at http://aka.ms/LearnAboutSpoofing] > > From: K. Y. Srinivasan <k...@microsoft.com> > > We will not be able to send packets over a channel that has been > rescinded. Make necessary adjustments so we can properly cleanup > even when the channel is rescinded. This issue can be trigerred > in the NIC hot-remove path. > > Signed-off-by: K. Y. Srinivasan <k...@microsoft.com>
Dave, Please drop this path; I will resend. K. Y > --- > drivers/net/hyperv/netvsc.c | 16 ++++++++++++++++ > 1 files changed, 16 insertions(+), 0 deletions(-) > > diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c > index 7ab06b3..b5b10fc 100644 > --- a/drivers/net/hyperv/netvsc.c > +++ b/drivers/net/hyperv/netvsc.c > @@ -135,6 +135,13 @@ static void netvsc_destroy_buf(struct hv_device > *device) > sizeof(struct nvsp_message), > (unsigned long)revoke_packet, > VM_PKT_DATA_INBAND, 0); > + /* If the failure is because the channel is rescinded; > + * ignore the failure since we cannot send on a rescinded > + * channel. This would allow us to properly cleanup > + * even when the channel is rescinded. > + */ > + if (device->channel->rescind) > + ret = 0; > /* > * If we failed here, we might as well return and > * have a leak rather than continue and a bugchk > @@ -195,6 +202,15 @@ static void netvsc_destroy_buf(struct hv_device > *device) > sizeof(struct nvsp_message), > (unsigned long)revoke_packet, > VM_PKT_DATA_INBAND, 0); > + > + /* If the failure is because the channel is rescinded; > + * ignore the failure since we cannot send on a rescinded > + * channel. This would allow us to properly cleanup > + * even when the channel is rescinded. > + */ > + if (device->channel->rescind) > + ret = 0; > + > /* If we failed here, we might as well return and > * have a leak rather than continue and a bugchk > */ > -- > 1.7.1