From: Jarek Poplawski <jarkao2@gmail.com>
To: Makito SHIOKAWA <mshiokawa@miraclelinux.com>
Cc: netdev@vger.kernel.org
Subject: Re: [PATCH 4/4] bonding: Fix some RTNL taking
Date: Wed, 16 Jan 2008 13:44:50 +0100 [thread overview]
Message-ID: <20080116124450.GD2307@ff.dom.local> (raw)
In-Reply-To: <20080115063650.236883000@miraclelinux.com>
On 15-01-2008 07:36, Makito SHIOKAWA wrote:
> Fix some RTNL lock taking:
>
> * RTNL (mutex; may sleep) must not be taken under read_lock (spinlock; must be
> atomic). However, RTNL is taken under read_lock in bond_loadbalance_arp_mon()
> and bond_activebackup_arp_mon(). So change code to take RTNL outside of read_lock.
>
> * rtnl_unlock() calls netdev_run_todo() which takes net_todo_run_mutex, and
> rtnl_unlock() is called under read_lock in bond_mii_monitor(). So for the same
> reason as above, change code to call rtnl_unlock() outside of read_lock.
>
> Signed-off-by: Makito SHIOKAWA <mshiokawa@miraclelinux.com>
> ---
> drivers/net/bonding/bond_main.c | 24 ++++++++++--------------
> 1 file changed, 10 insertions(+), 14 deletions(-)
>
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -2372,6 +2372,7 @@ void bond_mii_monitor(struct work_struct
> struct bonding *bond = container_of(work, struct bonding,
> mii_work.work);
> unsigned long delay;
> + int need_unlock = 0;
>
> read_lock(&bond->lock);
> if (bond->kill_timers) {
> @@ -2383,13 +2384,16 @@ void bond_mii_monitor(struct work_struct
> rtnl_lock();
> read_lock(&bond->lock);
> __bond_mii_monitor(bond, 1);
> - rtnl_unlock();
> + need_unlock = 1;
Maybe I'm wrong, but since this read_lock() is given and taken anyway,
it seems this looks a bit better to me (why hold this rtnl longer
than needed?):
read_unlock(&bond->lock);
rtnl_unlock();
read_lock(&bond->lock);
On the other hand, probably 'if (bond->kill_timers)' could be repeated
after this read_lock() retaking.
> }
>
> delay = ((bond->params.miimon * HZ) / 1000) ? : 1;
> - read_unlock(&bond->lock);
> if (bond->params.miimon)
> queue_delayed_work(bond->wq, &bond->mii_work, delay);
If this if () is really necessary here, then this should be better
before "delay = ..." with a block.
> + read_unlock(&bond->lock);
> + /* rtnl_unlock() may sleep, so call it after read_unlock() */
> + if (need_unlock)
> + rtnl_unlock();
> }
Regards,
Jarek P.
next prev parent reply other threads:[~2008-01-16 12:38 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-15 6:36 [PATCH 0/4] bonding: Fix workqueue manipulation and lock taking Makito SHIOKAWA
2008-01-15 6:36 ` [PATCH 1/4] bonding: Fix work initing and cancelling Makito SHIOKAWA
2008-01-15 10:56 ` Jarek Poplawski
2008-01-16 5:17 ` Makito SHIOKAWA
2008-01-15 6:36 ` [PATCH 2/4] bonding: Add destroy_workqueue() to bond device destroying process Makito SHIOKAWA
2008-01-15 6:36 ` [PATCH 3/4] bonding: Fix work rearming Makito SHIOKAWA
2008-01-15 9:05 ` Jarek Poplawski
2008-01-16 3:19 ` Makito SHIOKAWA
2008-01-16 13:36 ` Jarek Poplawski
2008-01-17 5:30 ` Makito SHIOKAWA
2008-01-17 11:18 ` Jarek Poplawski
2008-01-18 13:43 ` Makito SHIOKAWA
2008-01-18 22:27 ` Jarek Poplawski
2008-01-18 22:43 ` Jarek Poplawski
2008-01-21 4:04 ` Makito SHIOKAWA
2008-01-21 13:33 ` Jarek Poplawski
2008-01-22 3:35 ` Makito SHIOKAWA
2008-01-16 3:28 ` Makito SHIOKAWA
2008-01-15 6:36 ` [PATCH 4/4] bonding: Fix some RTNL taking Makito SHIOKAWA
2008-01-16 12:44 ` Jarek Poplawski [this message]
2008-01-17 5:30 ` Makito SHIOKAWA
2008-01-17 11:46 ` Jarek Poplawski
2008-01-18 9:06 ` Makito SHIOKAWA
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=20080116124450.GD2307@ff.dom.local \
--to=jarkao2@gmail.com \
--cc=mshiokawa@miraclelinux.com \
--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.