[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1426152880.11398.151.camel@edumazet-glaptop2.roam.corp.google.com>
Date: Thu, 12 Mar 2015 02:34:40 -0700
From: Eric Dumazet <eric.dumazet@...il.com>
To: Mahesh Bandewar <maheshb@...gle.com>
Cc: Jay Vosburgh <j.vosburgh@...il.com>,
Andy Gospodarek <andy@...yhouse.net>,
Veaceslav Falico <vfalico@...il.com>,
Nikolay Aleksandrov <nikolay@...hat.com>,
David Miller <davem@...emloft.net>,
Maciej Zenczykowski <maze@...gle.com>,
netdev <netdev@...r.kernel.org>,
Eric Dumazet <edumazet@...gle.com>
Subject: Re: [PATCH net-next 2/4] bonding: Do not ignore notifications for
miimon-work-queue
On Wed, 2015-03-11 at 22:54 -0700, Mahesh Bandewar wrote:
> This patch adds code to reschedule the mii-work (aggressively)
> just to handle the notification before resuming the regular
> cycle.
>
> Signed-off-by: Mahesh Bandewar <maheshb@...gle.com>
> ---
> drivers/net/bonding/bond_main.c | 24 +++++++++++++++---------
> 1 file changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
> index 19eabea2d7d9..54ecb7a22bae 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -2143,10 +2143,13 @@ static void bond_mii_monitor(struct work_struct *work)
> if (!bond_has_slaves(bond))
> goto re_arm;
>
> - rcu_read_lock();
> -
> + if (bond_get_notif_pending(bond, BOND_MII_NOTIF)) {
> + should_notify_peers = true;
> + goto re_arm;
> + }
> should_notify_peers = bond_should_notify_peers(bond);
>
> + rcu_read_lock();
> if (bond_miimon_inspect(bond)) {
> rcu_read_unlock();
>
> @@ -2164,15 +2167,18 @@ static void bond_mii_monitor(struct work_struct *work)
> rcu_read_unlock();
>
> re_arm:
> - if (bond->params.miimon)
> - queue_delayed_work(bond->wq, &bond->mii_work, delay);
> -
> if (should_notify_peers) {
> - if (!rtnl_trylock())
> - return;
> - call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, bond->dev);
> - rtnl_unlock();
> + if (!rtnl_trylock()) {
> + delay = 1;
> + bond_set_notif_pending(bond, BOND_MII_NOTIF, 1);
> + } else {
> + call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, bond->dev);
> + rtnl_unlock();
> + bond_set_notif_pending(bond, BOND_MII_NOTIF, 0);
You probably should clear notif bit before releasing rtnl
(same remark for patches 3 & 4)
> + }
> }
> + if (bond->params.miimon)
> + queue_delayed_work(bond->wq, &bond->mii_work, delay);
> }
>
> static bool bond_has_this_ip(struct bonding *bond, __be32 ip)
--
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