From: Veaceslav Falico <vfalico@redhat.com>
To: netdev@vger.kernel.org
Cc: jiri@resnulli.us, Veaceslav Falico <vfalico@redhat.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Alexander Duyck <alexander.h.duyck@intel.com>,
Cong Wang <amwang@redhat.com>
Subject: [PATCH v3 net-next 02/27] net: add RCU variant to search for netdev_adjacent link
Date: Tue, 17 Sep 2013 02:46:27 +0200 [thread overview]
Message-ID: <1379378812-18346-3-git-send-email-vfalico@redhat.com> (raw)
In-Reply-To: <1379378812-18346-1-git-send-email-vfalico@redhat.com>
Currently we have only the RTNL flavour, however we can traverse it while
holding only RCU, so add the RCU search. Add only one function that will be
used further, other functions can be added easily afterwards, if anyone
would need them.
CC: "David S. Miller" <davem@davemloft.net>
CC: Eric Dumazet <edumazet@google.com>
CC: Jiri Pirko <jiri@resnulli.us>
CC: Alexander Duyck <alexander.h.duyck@intel.com>
CC: Cong Wang <amwang@redhat.com>
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
---
Notes:
v2 -> v3:
No change.
v1 -> v2:
No changes.
RFC -> v1:
rename neighbour_dev_list/all_dev_list to adj_list/all_adj_list and rework
the naming of functions - to make the use the pattern
netdev_(all_)(lower|upper)_* . Uninline functions to get better stack
traces - inline doesn't give much speed improvement, but this way the stack
traces are meaningful. Remove the unused (through the whole patchset)
functions - they can easily be added afterwards.
net/core/dev.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/net/core/dev.c b/net/core/dev.c
index f69a8ab..75eabef 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4380,6 +4380,33 @@ struct netdev_adjacent {
struct rcu_head rcu;
};
+static struct netdev_adjacent *__netdev_find_adj_rcu(struct net_device *dev,
+ struct net_device *adj_dev,
+ bool upper, bool neighbour)
+{
+ struct netdev_adjacent *adj;
+ struct list_head *adj_list;
+
+ if (neighbour)
+ adj_list = upper ? &dev->adj_list.upper :
+ &dev->adj_list.lower;
+ else
+ adj_list = upper ? &dev->all_adj_list.upper :
+ &dev->all_adj_list.lower;
+
+ list_for_each_entry_rcu(adj, adj_list, list) {
+ if (adj->dev == adj_dev)
+ return adj;
+ }
+ return NULL;
+}
+
+static struct netdev_adjacent *__netdev_lower_find_rcu(struct net_device *dev,
+ struct net_device *ldev)
+{
+ return __netdev_find_adj_rcu(dev, ldev, false, true);
+}
+
static struct netdev_adjacent *__netdev_find_adj(struct net_device *dev,
struct net_device *adj_dev,
bool upper, bool neighbour)
--
1.8.4
next prev parent reply other threads:[~2013-09-17 0:46 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-17 0:46 [PATCH v3 net-next 00/27] bonding: use neighbours instead of own lists Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 01/27] net: add adj_list to save only neighbours Veaceslav Falico
2013-09-17 0:46 ` Veaceslav Falico [this message]
2013-09-17 1:23 ` [PATCH v3 net-next 02/27] net: add RCU variant to search for netdev_adjacent link Ben Hutchings
2013-09-17 7:34 ` Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 03/27] net: uninline netdev neighbour functions Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 04/27] net: add netdev_adjacent->private and allow to use it Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 05/27] bonding: populate neighbour's private on enslave Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 06/27] bonding: modify bond_get_slave_by_dev() to use neighbours Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 07/27] net: add for_each iterators through neighbour lower link's private Veaceslav Falico
2013-09-17 1:26 ` Ben Hutchings
2013-09-17 7:36 ` Veaceslav Falico
2013-09-17 11:43 ` Eric Dumazet
2013-09-17 12:29 ` Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 08/27] bonding: remove bond_for_each_slave_continue_reverse() Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 09/27] bonding: make bond_for_each_slave() use lower neighbour's private Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 10/27] bonding: use bond_for_each_slave() in bond_uninit() Veaceslav Falico
2013-09-18 9:53 ` Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 11/27] bonding: rework bond_3ad_xmit_xor() to use bond_for_each_slave() only Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 12/27] bonding: rework rlb_next_rx_slave() to use bond_for_each_slave() Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 13/27] bonding: rework bond_find_best_slave() " Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 14/27] bonding: rework bond_ab_arp_probe() " Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 15/27] bonding: remove unused bond_for_each_slave_from() Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 16/27] bonding: add bond_has_slaves() and use it Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 17/27] bonding: convert bond_has_slaves() to use the neighbour list Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 18/27] net: add a possibility to get private from netdev_adjacent->list Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 19/27] bonding: convert first/last slave logic to use neighbours Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 20/27] bonding: remove bond_prev_slave() Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 21/27] net: add a function to get the next private Veaceslav Falico
2013-09-17 1:50 ` Ben Hutchings
2013-09-17 13:55 ` Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 22/27] bonding: use neighbours for bond_next_slave() Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 23/27] bonding: remove slave lists Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 24/27] vlan: link the upper neighbour only after registering Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 25/27] vlan: unlink the upper neighbour before unregistering Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 26/27] net: expose the master link to sysfs, and remove it from bond Veaceslav Falico
2013-09-17 0:46 ` [PATCH v3 net-next 27/27] net: create sysfs symlinks for neighbour devices Veaceslav Falico
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1379378812-18346-3-git-send-email-vfalico@redhat.com \
--to=vfalico@redhat.com \
--cc=alexander.h.duyck@intel.com \
--cc=amwang@redhat.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jiri@resnulli.us \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).