All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jay Vosburgh <fubar@us.ibm.com>
To: Krzysztof Oledzki <olel@ans.pl>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	davem@davemloft.net, jeff@garzik.org,
	shemminger@linux-foundation.org, netdev@vger.kernel.org,
	Andy Gospodarek <andy@greyhouse.net>
Subject: Re: [patch for 2.6.24? 1/1] bonding: locking fix
Date: Thu, 17 Jan 2008 17:45:33 -0800	[thread overview]
Message-ID: <27063.1200620733@death> (raw)
In-Reply-To: <Pine.LNX.4.64.0801180154570.4570@bizon.gios.gov.pl>

Krzysztof Oledzki <olel@ans.pl> wrote:

>> Andrew Morton <akpm@linux-foundation.org> wrote:
>> [...]
>>> Can we get this bug fixed please?  Today?  It has been known about for more
>>> than two months.
>>
>> 	I just reposted the complete fix; it's #1 of the series of 7.
>
>Bad news. :( 2.6.24-rc7 + patch #1 (bonding: fix locking in sysfs
>primary/active selection):
[...]
>=========================================================
>[ INFO: possible irq lock inversion dependency detected ]
>2.6.24-rc7 #1
>---------------------------------------------------------
>events/0/9 just changed the state of lock:
> (&mc->mca_lock){-+..}, at: [<c041255a>] mld_ifc_timer_expire+0x130/0x1fb
>but this lock took another, soft-read-irq-unsafe lock in the past:
> (&bond->lock){-.--}

	None of the seven patches I posted just a bit ago will fix this
lockdep warning (which is a different thing that the bug Andrew inquired
about); I'm still working on that one.

	For that one, I had posted this work in progress patch:

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 77d004d..6906dbc 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3937,8 +3937,6 @@ static void bond_set_multicast_list(struct net_device *bond_dev)
 	struct bonding *bond = bond_dev->priv;
 	struct dev_mc_list *dmi;
 
-	write_lock_bh(&bond->lock);
-
 	/*
 	 * Do promisc before checking multicast_mode
 	 */
@@ -3959,6 +3957,8 @@ static void bond_set_multicast_list(struct net_device *bond_dev)
 		bond_set_allmulti(bond, -1);
 	}
 
+	read_lock(&bond->lock);
+
 	bond->flags = bond_dev->flags;
 
 	/* looking for addresses to add to slaves' mc list */
@@ -3979,7 +3979,7 @@ static void bond_set_multicast_list(struct net_device *bond_dev)
 	bond_mc_list_destroy(bond);
 	bond_mc_list_copy(bond_dev->mc_list, bond, GFP_ATOMIC);
 
-	write_unlock_bh(&bond->lock);
+	read_unlock(&bond->lock);
 }
 
 /*

	which makes the warning go away, but Herbert Xu pointed out that
there is a potential problem with bond_enslave accessing the mc_lists
without sufficient locking.  It's not the only offender, either, and the
bond->mc_list references really need to be protected by the bond_lock,
and the whole thing probably ought to use dev_mc_sync/unsync instead of
what it does now.

	Since the bond_enslave, et al, business isn't a new problem, and
I've never heard of it being hit, I'm thinking now to just leave the
bond_enslave part for 2.6.25, and fix the lockdep warning for 2.6.24.

	But I wanted to make sure dropping the write lock to a read lock
wasn't going to make something worse.

	-J

---
	-Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com

  reply	other threads:[~2008-01-18  1:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200801140904.m0E94vJd020425@imap1.linux-foundation.org>
     [not found] ` <Pine.LNX.4.64.0801142313350.26034@bizon.gios.gov.pl>
2008-01-14 22:47   ` [patch for 2.6.24? 1/1] bonding: locking fix Andrew Morton
2008-01-14 23:01     ` Jay Vosburgh
2008-01-17 23:42       ` Andrew Morton
2008-01-18  0:26         ` Jay Vosburgh
2008-01-18  0:58           ` Krzysztof Oledzki
2008-01-18  1:45             ` Jay Vosburgh [this message]
2008-01-18  8:34               ` Krzysztof Oledzki
2008-01-18 17:32                 ` Jay Vosburgh
2008-01-21  0:57         ` David Miller

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=27063.1200620733@death \
    --to=fubar@us.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=jeff@garzik.org \
    --cc=netdev@vger.kernel.org \
    --cc=olel@ans.pl \
    --cc=shemminger@linux-foundation.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.