From: Veaceslav Falico <vfalico@redhat.com>
To: netdev@vger.kernel.org
Cc: jiri@resnulli.us, Jay Vosburgh <fubar@us.ibm.com>,
Andy Gospodarek <andy@greyhouse.net>
Subject: Re: [PATCH v3 net-next 10/27] bonding: use bond_for_each_slave() in bond_uninit()
Date: Wed, 18 Sep 2013 11:53:45 +0200 [thread overview]
Message-ID: <20130918095345.GA4077@redhat.com> (raw)
In-Reply-To: <1379378812-18346-11-git-send-email-vfalico@redhat.com>
On Tue, Sep 17, 2013 at 02:46:35AM +0200, Veaceslav Falico wrote:
>We're safe agains removal there, cause we use neighbours primitives.
>
>CC: Jay Vosburgh <fubar@us.ibm.com>
>CC: Andy Gospodarek <andy@greyhouse.net>
>Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
>---
>
>Notes:
> v2 -> v3:
> No change.
>
> v1 -> v2:
> No changes.
>
> RFC -> v1:
> Move the patch rigth after we start using neighbour lists for
> bond_for_each_slave().
>
> drivers/net/bonding/bond_main.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
>index cdd5c5f..2075321 100644
>--- a/drivers/net/bonding/bond_main.c
>+++ b/drivers/net/bonding/bond_main.c
>@@ -4090,12 +4090,13 @@ static void bond_setup(struct net_device *bond_dev)
> static void bond_uninit(struct net_device *bond_dev)
> {
> struct bonding *bond = netdev_priv(bond_dev);
>- struct slave *slave, *tmp_slave;
>+ struct list_head *iter;
>+ struct slave *slave;
>
> bond_netpoll_cleanup(bond_dev);
>
> /* Release the bonded slaves */
>- list_for_each_entry_safe(slave, tmp_slave, &bond->slave_list, list)
>+ bond_for_each_slave(bond, slave, iter)
> __bond_release_one(bond_dev, slave->dev, true);
Seems like we're not really safe here, however it's easily fixable if the
*iter in netdev_for_each_lower_private() will contain the ->next pointer,
just as in list_for_each_entry_safe().
I'll fix it in the next version, something like that:
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index b487302..e101f5a 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2839,7 +2839,7 @@ extern void *netdev_lower_get_next_private_rcu(struct net_device *dev,
struct list_head **iter);
#define netdev_for_each_lower_private(dev, priv, iter) \
- for (iter = &(dev)->adj_list.lower, \
+ for (iter = (dev)->adj_list.lower.next, \
priv = netdev_lower_get_next_private(dev, &(iter)); \
priv; \
priv = netdev_lower_get_next_private(dev, &(iter)))
diff --git a/net/core/dev.c b/net/core/dev.c
index 5fe2dd0..8bd0c43 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4563,7 +4563,7 @@ void *netdev_lower_get_next_private(struct net_device *dev,
struct netdev_adjacent *lower;
if (iter)
- lower = list_entry((*iter)->next, struct netdev_adjacent,
+ lower = list_entry(*iter, struct netdev_adjacent,
list);
else
lower = list_entry(dev->adj_list.lower.next,
@@ -4573,7 +4573,7 @@ void *netdev_lower_get_next_private(struct net_device *dev,
return NULL;
if (iter)
- *iter = &lower->list;
+ *iter = lower->list.next;
return lower->private;
}
> pr_info("%s: released all slaves\n", bond_dev->name);
>
>--
>1.8.4
>
next prev parent reply other threads:[~2013-09-18 9:55 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 ` [PATCH v3 net-next 02/27] net: add RCU variant to search for netdev_adjacent link Veaceslav Falico
2013-09-17 1:23 ` 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 [this message]
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=20130918095345.GA4077@redhat.com \
--to=vfalico@redhat.com \
--cc=andy@greyhouse.net \
--cc=fubar@us.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.