mac80211: warn only once in check_sdata_in_driver() at each caller
authorJohannes Berg <johannes.berg@intel.com>
Thu, 30 Jul 2020 13:52:13 +0000 (15:52 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 31 Jul 2020 07:27:02 +0000 (09:27 +0200)
Ben Greear has repeatedly reported in the past (for a few years
probably) that this triggers repeatedly in certain scenarios.

Make this a macro so that each callsite can trigger the warning
only once - that will still give us an idea of what's going on
and what paths can reach it, but avoids being too noisy.

Link: https://lore.kernel.org/r/20200730155212.06fd3a95dbfb.I0b16829aabfaf5f642bce401502a29d16e2dd444@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/driver-ops.h

index de69fc9..41d495d 100644 (file)
 #include "ieee80211_i.h"
 #include "trace.h"
 
-static inline bool check_sdata_in_driver(struct ieee80211_sub_if_data *sdata)
-{
-       return !WARN(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER),
-                    "%s:  Failed check-sdata-in-driver check, flags: 0x%x\n",
-                    sdata->dev ? sdata->dev->name : sdata->name, sdata->flags);
-}
+#define check_sdata_in_driver(sdata)   ({                                      \
+       !WARN_ONCE(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER),                 \
+                  "%s: Failed check-sdata-in-driver check, flags: 0x%x\n",     \
+                  sdata->dev ? sdata->dev->name : sdata->name, sdata->flags);  \
+})
 
 static inline struct ieee80211_sub_if_data *
 get_bss_sdata(struct ieee80211_sub_if_data *sdata)