[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1391079118-23922-1-git-send-email-ogerlitz@mellanox.com>
Date: Thu, 30 Jan 2014 12:51:58 +0200
From: Or Gerlitz <ogerlitz@...lanox.com>
To: davem@...emloft.net
Cc: netdev@...r.kernel.org, edumazet@...gle.com,
Shlomo Pongratz <shlomop@...lanox.com>,
Or Gerlitz <ogerlitz@...lanox.com>
Subject: [PATCH net] net/ipv4: Use proper RCU APIs for writer-side in udp_offload.c
From: Shlomo Pongratz <shlomop@...lanox.com>
RCU writer side should use rcu_dereference_protected() and not
rcu_dereference(), fix that. This also removes the "suspicious RCU usage"
warning seen when running with CONFIG_PROVE_RCU.
Fixes: b582ef0 ('net: Add GRO support for UDP encapsulating protocols')
Reported-by: Eric Dumazet <edumazet@...gle.com>
Signed-off-by: Or Gerlitz <ogerlitz@...lanox.com>
Signed-off-by: Shlomo Pongratz <shlomop@...lanox.com>
---
net/ipv4/udp_offload.c | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
index 2ffea6f..1bf21d4 100644
--- a/net/ipv4/udp_offload.c
+++ b/net/ipv4/udp_offload.c
@@ -109,7 +109,8 @@ int udp_add_offload(struct udp_offload *uo)
new_offload->offload = uo;
spin_lock(&udp_offload_lock);
- rcu_assign_pointer(new_offload->next, rcu_dereference(*head));
+ rcu_assign_pointer(new_offload->next,
+ rcu_dereference_protected(*head, lockdep_is_held(&udp_offload_lock)));
rcu_assign_pointer(*head, new_offload);
spin_unlock(&udp_offload_lock);
@@ -130,12 +131,15 @@ void udp_del_offload(struct udp_offload *uo)
spin_lock(&udp_offload_lock);
- uo_priv = rcu_dereference(*head);
+ uo_priv = rcu_dereference_protected(*head,
+ lockdep_is_held(&udp_offload_lock));
for (; uo_priv != NULL;
- uo_priv = rcu_dereference(*head)) {
-
+ uo_priv = rcu_dereference_protected(*head,
+ lockdep_is_held(&udp_offload_lock))) {
if (uo_priv->offload == uo) {
- rcu_assign_pointer(*head, rcu_dereference(uo_priv->next));
+ rcu_assign_pointer(*head,
+ rcu_dereference_protected(uo_priv->next,
+ lockdep_is_held(&udp_offload_lock)));
goto unlock;
}
head = &uo_priv->next;
--
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists