wext: allow returning NULL stats
authorJohannes Berg <johannes@sipsolutions.net>
Wed, 1 Jul 2009 19:26:42 +0000 (21:26 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 10 Jul 2009 19:01:48 +0000 (15:01 -0400)
Currently, wext drivers cannot return NULL for stats even though
that would make the ioctl return -EOPNOTSUPP because that would
mean they are no longer listed in /proc/net/wireless. This patch
changes the wext core's behaviour to list them if they have any
wireless_handlers, but only show their stats when available, so
that drivers can start returning NULL if stats are currently not
available, reducing confusion for e.g. IBSS.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/wext.c

index 252c2010c2e2c05b46c260d380f658c2913ea531..5da07e079c207047742e67c44bc4381a6ddda99f 100644 (file)
@@ -610,6 +610,11 @@ static void wireless_seq_printf_stats(struct seq_file *seq,
 {
        /* Get stats from the driver */
        struct iw_statistics *stats = get_wireless_stats(dev);
+       static struct iw_statistics nullstats = {};
+
+       /* show device if it's wireless regardless of current stats */
+       if (!stats && dev->wireless_handlers)
+               stats = &nullstats;
 
        if (stats) {
                seq_printf(seq, "%6s: %04x  %3d%c  %3d%c  %3d%c  %6d %6d %6d "
@@ -628,7 +633,9 @@ static void wireless_seq_printf_stats(struct seq_file *seq,
                           stats->discard.nwid, stats->discard.code,
                           stats->discard.fragment, stats->discard.retries,
                           stats->discard.misc, stats->miss.beacon);
-               stats->qual.updated &= ~IW_QUAL_ALL_UPDATED;
+
+               if (stats != &nullstats)
+                       stats->qual.updated &= ~IW_QUAL_ALL_UPDATED;
        }
 }