From: "Love, Robert W" <robert.w.love@intel.com>
To: "bvanassche@acm.org" <bvanassche@acm.org>,
"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>
Cc: "devel@open-fcoe.org" <devel@open-fcoe.org>,
"Zou, Yi" <yi.zou@intel.com>
Subject: Re: [PATCH] fcoe: Don't hold rtnl_mutex in fcoe_update_src_mac
Date: Wed, 14 Mar 2012 00:42:05 +0000 [thread overview]
Message-ID: <4F5FE95D.8040408@intel.com> (raw)
In-Reply-To: <20120313225254.5473.92174.stgit@localhost6.localdomain6>
On 03/13/2012 03:52 PM, Robert Love wrote:
> The rtnl_mutex was held to protect calls to dev_uc_add
> and dev_uc_del. Holding rtnl is not required as those
> functions make use of the netif_addr_lock* API to
> protect the MAC changing.
>
> This change fixes the following regression by removing
> the rtnl usage when fcoe_update_src_mac is called.
>
> https://bugzilla.kernel.org/show_bug.cgi?id=42918
>
> the existing dependency chain (in reverse order) is:
>
> -> #1 (&fip->ctlr_mutex){+.+...}:
> [<c1091f70>] lock_acquire+0x80/0x1b0
> [<c147655d>] mutex_lock_nested+0x6d/0x340
> [<f8970c32>] fcoe_ctlr_link_up+0x22/0x180 [libfcoe]
> [<f894620e>] fcoe_create+0x47e/0x6e0 [fcoe]
> [<f8973dd3>] fcoe_transport_create+0x143/0x250 [libfcoe]
> [<c10527e0>] param_attr_store+0x30/0x60
> [<c1052696>] module_attr_store+0x26/0x40
> [<c11a201e>] sysfs_write_file+0xae/0x100
> [<c11449df>] vfs_write+0x8f/0x160
> [<c1144cbd>] sys_write+0x3d/0x70
> [<c147a0c4>] syscall_call+0x7/0xb
>
> -> #0 (rtnl_mutex){+.+.+.}:
> [<c109164b>] __lock_acquire+0x140b/0x1720
> [<c1091f70>] lock_acquire+0x80/0x1b0
> [<c147655d>] mutex_lock_nested+0x6d/0x340
> [<c13a10c4>] rtnl_lock+0x14/0x20
> [<f89445ac>] fcoe_update_src_mac+0x2c/0xb0 [fcoe]
> [<f8971712>] fcoe_ctlr_timer_work+0x712/0xb60 [libfcoe]
> [<c104fb69>] process_one_work+0x179/0x5d0
> [<c10502f1>] worker_thread+0x121/0x2d0
> [<c10550ed>] kthread+0x7d/0x90
> [<c1481a82>] kernel_thread_helper+0x6/0x10
>
> other info that might help us debug this:
>
> Possible unsafe locking scenario:
>
> CPU0 CPU1
> ---- ----
> lock(&fip->ctlr_mutex);
> lock(rtnl_mutex);
> lock(&fip->ctlr_mutex);
> lock(rtnl_mutex);
>
> *** DEADLOCK ***
>
> Signed-off-by: Robert Love<robert.w.love@intel.com>
> ---
> drivers/scsi/fcoe/fcoe.c | 2 --
> 1 files changed, 0 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
> index e959960..85b8203 100644
> --- a/drivers/scsi/fcoe/fcoe.c
> +++ b/drivers/scsi/fcoe/fcoe.c
> @@ -539,13 +539,11 @@ static void fcoe_update_src_mac(struct fc_lport *lport, u8 *addr)
> struct fcoe_port *port = lport_priv(lport);
> struct fcoe_interface *fcoe = port->priv;
>
> - rtnl_lock();
> if (!is_zero_ether_addr(port->data_src_addr))
> dev_uc_del(fcoe->netdev, port->data_src_addr);
> if (!is_zero_ether_addr(addr))
> dev_uc_add(fcoe->netdev, addr);
> memcpy(port->data_src_addr, addr, ETH_ALEN);
> - rtnl_unlock();
> }
>
> /**
>
This isn't going to work. We do need rtnl_lock when calling
dev_uc_add/del to ensure the driver isn't removed while making the
change. I have an alternative patch that I'll post as soon as I clean it
up a bit.
Nacked-by: Robert Love <robert.w.love@intel.com>
next prev parent reply other threads:[~2012-03-14 0:45 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <bug-42918-11613@https.bugzilla.kernel.org>
2012-03-13 22:52 ` [PATCH] fcoe: Don't hold rtnl_mutex in fcoe_update_src_mac Robert Love
2012-03-14 0:42 ` Love, Robert W [this message]
2012-03-14 2:14 ` [Open-FCoE] " John Fastabend
[not found] ` <4F5FFF19.1060601-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2012-03-14 16:18 ` Zou, Yi
2012-03-15 8:40 ` Bart Van Assche
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=4F5FE95D.8040408@intel.com \
--to=robert.w.love@intel.com \
--cc=bvanassche@acm.org \
--cc=devel@open-fcoe.org \
--cc=linux-scsi@vger.kernel.org \
--cc=yi.zou@intel.com \
/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.