Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1363663 > unrolled thread

[PATCH net-next] hv_netvsc: Fix the order of num_sc_offered decrement

Started byHaiyang Zhang <haiyangz@microsoft.com>
First post2016-03-23 21:20 +0100
Last post2016-03-24 03:00 +0100
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH net-next] hv_netvsc: Fix the order of num_sc_offered decrement Haiyang Zhang <haiyangz@microsoft.com> - 2016-03-23 21:20 +0100
    Re: [PATCH net-next] hv_netvsc: Fix the order of num_sc_offered  decrement David Miller <davem@davemloft.net> - 2016-03-24 03:00 +0100

#1363663 — [PATCH net-next] hv_netvsc: Fix the order of num_sc_offered decrement

FromHaiyang Zhang <haiyangz@microsoft.com>
Date2016-03-23 21:20 +0100
Subject[PATCH net-next] hv_netvsc: Fix the order of num_sc_offered decrement
Message-ID<rfXq2-b9-19@gated-at.bofh.it>
Reorder the code in netvsc_sc_open(), so num_sc_offered is only decremented
after vmbus_open() is called. This avoid pontential race of removing device
before all channels are setup.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>

---
 drivers/net/hyperv/rndis_filter.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index d5a54da..c4e1e04 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -986,12 +986,6 @@ static void netvsc_sc_open(struct vmbus_channel *new_sc)
 
 	nvscdev = hv_get_drvdata(new_sc->primary_channel->device_obj);
 
-	spin_lock_irqsave(&nvscdev->sc_lock, flags);
-	nvscdev->num_sc_offered--;
-	spin_unlock_irqrestore(&nvscdev->sc_lock, flags);
-	if (nvscdev->num_sc_offered == 0)
-		complete(&nvscdev->channel_init_wait);
-
 	if (chn_index >= nvscdev->num_chn)
 		return;
 
@@ -1004,6 +998,12 @@ static void netvsc_sc_open(struct vmbus_channel *new_sc)
 
 	if (ret == 0)
 		nvscdev->chn_table[chn_index] = new_sc;
+
+	spin_lock_irqsave(&nvscdev->sc_lock, flags);
+	nvscdev->num_sc_offered--;
+	spin_unlock_irqrestore(&nvscdev->sc_lock, flags);
+	if (nvscdev->num_sc_offered == 0)
+		complete(&nvscdev->channel_init_wait);
 }
 
 int rndis_filter_device_add(struct hv_device *dev,
-- 
1.7.4.1

[toc] | [next] | [standalone]


#1363865 — Re: [PATCH net-next] hv_netvsc: Fix the order of num_sc_offered decrement

FromDavid Miller <davem@davemloft.net>
Date2016-03-24 03:00 +0100
SubjectRe: [PATCH net-next] hv_netvsc: Fix the order of num_sc_offered decrement
Message-ID<rg2J4-3GP-1@gated-at.bofh.it>
In reply to#1363663
From: Haiyang Zhang <haiyangz@microsoft.com>
Date: Wed, 23 Mar 2016 14:54:48 -0700

> Reorder the code in netvsc_sc_open(), so num_sc_offered is only decremented
> after vmbus_open() is called. This avoid pontential race of removing device
> before all channels are setup.
> 
> Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
> Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>

Applied, thanks.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web