From: Johannes Berg <johannes@sipsolutions.net>
To: John Linville <linville@tuxdriver.com>
Cc: linux-wireless@vger.kernel.org, Robin Holt <holt@sgi.com>
Subject: [PATCH 1/8] mac80211: fix debugfs lockup
Date: Tue, 07 Oct 2008 12:04:29 +0200 [thread overview]
Message-ID: <20081007100437.357527000@sipsolutions.net> (raw)
In-Reply-To: 20081007100428.868688000@sipsolutions.net
When debugfs_create_dir fails, sta_info_debugfs_add_work will not
terminate because it will find the same station again and again.
This is possible whenever debugfs fails for whatever reason; one
reason is a race condition in mac80211, unfortunately we cannot
do much about it, so just document it, it just means some station
may be missing from debugfs.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Cc: Robin Holt <holt@sgi.com>
---
net/mac80211/debugfs_sta.c | 11 +++++++++++
net/mac80211/sta_info.c | 7 ++++++-
net/mac80211/sta_info.h | 1 +
3 files changed, 18 insertions(+), 1 deletion(-)
--- everything.orig/net/mac80211/debugfs_sta.c 2008-10-07 11:26:52.000000000 +0200
+++ everything/net/mac80211/debugfs_sta.c 2008-10-07 11:26:58.000000000 +0200
@@ -249,11 +249,22 @@ void ieee80211_sta_debugfs_add(struct st
DECLARE_MAC_BUF(mbuf);
u8 *mac;
+ sta->debugfs.add_has_run = true;
+
if (!stations_dir)
return;
mac = print_mac(mbuf, sta->sta.addr);
+ /*
+ * This might fail due to a race condition:
+ * When mac80211 unlinks a station, the debugfs entries
+ * remain, but it is already possible to link a new
+ * station with the same address which triggers adding
+ * it to debugfs; therefore, if the old station isn't
+ * destroyed quickly enough the old station's debugfs
+ * dir might still be around.
+ */
sta->debugfs.dir = debugfs_create_dir(mac, stations_dir);
if (!sta->debugfs.dir)
return;
--- everything.orig/net/mac80211/sta_info.c 2008-10-07 11:26:52.000000000 +0200
+++ everything/net/mac80211/sta_info.c 2008-10-07 11:26:58.000000000 +0200
@@ -635,7 +635,12 @@ static void sta_info_debugfs_add_work(st
spin_lock_irqsave(&local->sta_lock, flags);
list_for_each_entry(tmp, &local->sta_list, list) {
- if (!tmp->debugfs.dir) {
+ /*
+ * debugfs.add_has_run will be set by
+ * ieee80211_sta_debugfs_add regardless
+ * of what else it does.
+ */
+ if (!tmp->debugfs.add_has_run) {
sta = tmp;
__sta_info_pin(sta);
break;
--- everything.orig/net/mac80211/sta_info.h 2008-10-07 11:26:52.000000000 +0200
+++ everything/net/mac80211/sta_info.h 2008-10-07 11:26:58.000000000 +0200
@@ -300,6 +300,7 @@ struct sta_info {
struct dentry *inactive_ms;
struct dentry *last_seq_ctrl;
struct dentry *agg_status;
+ bool add_has_run;
} debugfs;
#endif
--
next prev parent reply other threads:[~2008-10-07 16:58 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-07 10:04 [PATCH 0/8] mac80211 fixes/cleanups/updates Johannes Berg
2008-10-07 10:04 ` Johannes Berg [this message]
2008-10-07 10:04 ` [PATCH 2/8] mac80211: remove aggregation status write support from debugfs Johannes Berg
2008-10-07 21:24 ` Tomas Winkler
2008-10-08 7:59 ` Johannes Berg
2008-10-10 18:22 ` Luis R. Rodriguez
2008-10-10 18:37 ` Johannes Berg
2008-10-10 18:39 ` Andrey Yurovsky
2008-10-10 18:42 ` Johannes Berg
2008-10-07 10:04 ` [PATCH 3/8] mac80211: remove writable debugs mesh parameters Johannes Berg
2008-10-07 17:45 ` Javier Cardona
2008-10-07 10:04 ` [PATCH 4/8] mac80211: minor code cleanups Johannes Berg
2008-10-07 10:04 ` [PATCH 5/8] mac80211: remove wiphy_to_hw Johannes Berg
2008-10-07 10:04 ` [PATCH 6/8] mac80211: clean up ieee80211_hw_config errors Johannes Berg
2008-10-07 10:04 ` [PATCH 7/8] mac80211: remove max_antenna_gain config Johannes Berg
2008-10-07 10:04 ` [PATCH 8/8] mac80211: fix short slot handling Johannes Berg
2008-10-08 8:55 ` [PATCH 8/8 v2] " Johannes Berg
2008-10-08 8:59 ` [PATCH 8/8 v3] " Johannes Berg
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=20081007100437.357527000@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=holt@sgi.com \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).