* [PATCH 00/27] Convert seq_<foo> output calls to return void
@ 2015-02-22 2:53 Joe Perches
2015-02-22 2:53 ` [PATCH 06/27] power: wakeup: Remove use of seq_printf return value Joe Perches
0 siblings, 1 reply; 5+ messages in thread
From: Joe Perches @ 2015-02-22 2:53 UTC (permalink / raw)
To: Andrew Morton, linux-arm-kernel, linux-s390, linux-pm,
openipmi-developer, linux-parisc, linux-kernel, rtc-linux,
linux-tegra, linux-watchdog, cgroups, drbd-user
Cc: linux-cris-kernel, nios2-dev, linux, devel, HPDD-discuss,
linux-usb
As Al Viro said:
we are getting well-meaning folks who try to check that return value,
again and again, getting it wrong every time. Typical idiocies:
* return some kind of error out of ->show() on overflows. Pointless
*and* wrong - only hard errors (== fail read(2) with that) should be
reported that way; the caller does detect overflow and retires with bigger
buffer just fine.
* keep checking it after every sodding call of seq_...(), screwing
the cleanups up more often than not. Pointless, unless you are doing some
seriously expensive calculations to produce something you are going to print.
seq_...() are no-ops in case when overflow has already happened.
seq_has_overflowed() is only for situations when you really want to skip
a serious amount of work generating the data that would end up being
discarded and recalculated again when the caller grabs a bigger buffer and
calls you again. And more often than not it's an indication of ->show()
trying to do the work of iterator - e.g. when you have single_open() with
->show() printing the entire hash table of some sort all in one record.
Most of the time checking return value of seq_...() is better replaced with
not doing that. And "must check return value and Do Something(tm)" is too
strong habit for enough people to cause recurring trouble.
Joe Perches (27):
staging: lustre: Convert "return seq_printf(...)" uses
staging: lustre: Convert seq_ hash functions to return void
staging: lustre: Convert uses of "int rc = seq_printf(...)"
staging: lustre: Convert remaining uses of "= seq_printf(...)"
x86: mtrr: if: Remove use of seq_printf return value
power: wakeup: Remove use of seq_printf return value
ipmi: Remove use of seq_printf return value
rtc: Remove use of seq_printf return value
ipc: Remove use of seq_printf return value
pxa27x_udc: Remove use of seq_printf return value
microblaze: mb: Remove use of seq_printf return value
nios2: cpuinfo: Remove use of seq_printf return value
ARM: plat-pxa: Remove use of seq_printf return value
openrisc: Remove use of seq_printf return value
cris: Remove use of seq_printf return value
mfd: ab8500-debugfs: Remove use of seq_printf return value
staging: i2o: Remove use of seq_printf return value
staging: rtl8192x: Remove use of seq_printf return value
s390: Remove use of seq_printf return value
i8k: Remove use of seq_printf return value
watchdog: bcm281xx: Remove use of seq_printf return value
proc: Remove use of seq_printf return value
cgroup: Remove use of seq_printf return value
tracing: Remove use of seq_printf return value
lru_cache: Remove use of seq_printf return value
parisc: Remove use of seq_printf return value
regulator: dbx500: Remove use of seq_puts/seq_printf return value
arch/arm/plat-pxa/dma.c | 111 ++++++------
arch/cris/arch-v10/kernel/setup.c | 58 +++---
arch/cris/arch-v32/kernel/setup.c | 62 +++----
arch/microblaze/kernel/cpu/mb.c | 149 ++++++++--------
arch/nios2/kernel/cpuinfo.c | 77 ++++----
arch/openrisc/kernel/setup.c | 50 +++---
arch/s390/pci/pci_debug.c | 6 +-
arch/x86/kernel/cpu/mtrr/if.c | 12 +-
drivers/base/power/wakeup.c | 16 +-
drivers/char/i8k.c | 16 +-
drivers/char/ipmi/ipmi_msghandler.c | 12 +-
drivers/char/ipmi/ipmi_si_intf.c | 26 +--
drivers/char/ipmi/ipmi_ssif.c | 4 +-
drivers/mfd/ab8500-debugfs.c | 196 +++++++++++++--------
drivers/parisc/ccio-dma.c | 54 +++---
drivers/parisc/sba_iommu.c | 86 +++++----
drivers/regulator/dbx500-prcmu.c | 32 +---
drivers/rtc/rtc-cmos.c | 36 ++--
drivers/rtc/rtc-ds1305.c | 6 +-
drivers/rtc/rtc-mrst.c | 16 +-
drivers/rtc/rtc-tegra.c | 4 +-
drivers/s390/cio/blacklist.c | 12 +-
drivers/staging/i2o/i2o_proc.c | 18 +-
.../lustre/include/linux/libcfs/libcfs_hash.h | 4 +-
drivers/staging/lustre/lustre/fid/lproc_fid.c | 23 ++-
drivers/staging/lustre/lustre/libcfs/hash.c | 13 +-
drivers/staging/lustre/lustre/llite/lproc_llite.c | 117 ++++++------
drivers/staging/lustre/lustre/lmv/lproc_lmv.c | 18 +-
drivers/staging/lustre/lustre/lov/lproc_lov.c | 30 ++--
drivers/staging/lustre/lustre/mdc/lproc_mdc.c | 6 +-
.../lustre/lustre/obdclass/linux/linux-module.c | 38 ++--
.../lustre/lustre/obdclass/lprocfs_status.c | 108 ++++++------
drivers/staging/lustre/lustre/obdclass/lu_object.c | 25 +--
drivers/staging/lustre/lustre/osc/lproc_osc.c | 67 +++----
.../staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c | 25 +--
drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c | 82 +++++----
drivers/staging/rtl8192e/rtllib_module.c | 4 +-
.../staging/rtl8192u/ieee80211/ieee80211_module.c | 4 +-
drivers/usb/gadget/udc/pxa27x_udc.c | 132 +++++++-------
drivers/watchdog/bcm_kona_wdt.c | 27 +--
fs/proc/array.c | 4 +-
fs/proc/base.c | 82 +++++----
ipc/msg.c | 34 ++--
ipc/sem.c | 26 +--
ipc/shm.c | 42 ++---
ipc/util.c | 6 +-
kernel/cgroup.c | 4 +-
kernel/trace/trace_stack.c | 4 +-
lib/lru_cache.c | 9 +-
49 files changed, 1050 insertions(+), 943 deletions(-)
--
2.1.2
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 06/27] power: wakeup: Remove use of seq_printf return value 2015-02-22 2:53 [PATCH 00/27] Convert seq_<foo> output calls to return void Joe Perches @ 2015-02-22 2:53 ` Joe Perches 2015-02-22 21:38 ` Pavel Machek 0 siblings, 1 reply; 5+ messages in thread From: Joe Perches @ 2015-02-22 2:53 UTC (permalink / raw) To: Andrew Morton, Rafael J. Wysocki, Pavel Machek, Len Brown Cc: Greg Kroah-Hartman, linux-pm, linux-kernel The seq_printf return value, because it's frequently misused, will eventually be converted to void. See: commit 1f33c41c03da ("seq_file: Rename seq_overflow() to seq_has_overflowed() and make public") Signed-off-by: Joe Perches <joe@perches.com> --- drivers/base/power/wakeup.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index c2744b3..23fe220 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -842,7 +842,6 @@ static int print_wakeup_source_stats(struct seq_file *m, unsigned long active_count; ktime_t active_time; ktime_t prevent_sleep_time; - int ret; spin_lock_irqsave(&ws->lock, flags); @@ -865,17 +864,16 @@ static int print_wakeup_source_stats(struct seq_file *m, active_time = ktime_set(0, 0); } - ret = seq_printf(m, "%-12s\t%lu\t\t%lu\t\t%lu\t\t%lu\t\t" - "%lld\t\t%lld\t\t%lld\t\t%lld\t\t%lld\n", - ws->name, active_count, ws->event_count, - ws->wakeup_count, ws->expire_count, - ktime_to_ms(active_time), ktime_to_ms(total_time), - ktime_to_ms(max_time), ktime_to_ms(ws->last_time), - ktime_to_ms(prevent_sleep_time)); + seq_printf(m, "%-12s\t%lu\t\t%lu\t\t%lu\t\t%lu\t\t%lld\t\t%lld\t\t%lld\t\t%lld\t\t%lld\n", + ws->name, active_count, ws->event_count, + ws->wakeup_count, ws->expire_count, + ktime_to_ms(active_time), ktime_to_ms(total_time), + ktime_to_ms(max_time), ktime_to_ms(ws->last_time), + ktime_to_ms(prevent_sleep_time)); spin_unlock_irqrestore(&ws->lock, flags); - return ret; + return 0; } /** -- 2.1.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 06/27] power: wakeup: Remove use of seq_printf return value 2015-02-22 2:53 ` [PATCH 06/27] power: wakeup: Remove use of seq_printf return value Joe Perches @ 2015-02-22 21:38 ` Pavel Machek 2015-02-22 21:52 ` Joe Perches 0 siblings, 1 reply; 5+ messages in thread From: Pavel Machek @ 2015-02-22 21:38 UTC (permalink / raw) To: Joe Perches Cc: Andrew Morton, Rafael J. Wysocki, Len Brown, Greg Kroah-Hartman, linux-pm, linux-kernel On Sat 2015-02-21 18:53:33, Joe Perches wrote: > The seq_printf return value, because it's frequently misused, > will eventually be converted to void. > > See: commit 1f33c41c03da ("seq_file: Rename seq_overflow() to > seq_has_overflowed() and make public") You've just removed overflow handling from print_wakeup_source_stats. Can you explain why that is good idea? Pavel > --- a/drivers/base/power/wakeup.c > +++ b/drivers/base/power/wakeup.c > @@ -842,7 +842,6 @@ static int print_wakeup_source_stats(struct seq_file *m, > unsigned long active_count; > ktime_t active_time; > ktime_t prevent_sleep_time; > - int ret; > > spin_lock_irqsave(&ws->lock, flags); > > @@ -865,17 +864,16 @@ static int print_wakeup_source_stats(struct seq_file *m, > active_time = ktime_set(0, 0); > } > > - ret = seq_printf(m, "%-12s\t%lu\t\t%lu\t\t%lu\t\t%lu\t\t" > - "%lld\t\t%lld\t\t%lld\t\t%lld\t\t%lld\n", > - ws->name, active_count, ws->event_count, > - ws->wakeup_count, ws->expire_count, > - ktime_to_ms(active_time), ktime_to_ms(total_time), > - ktime_to_ms(max_time), ktime_to_ms(ws->last_time), > - ktime_to_ms(prevent_sleep_time)); > + seq_printf(m, "%-12s\t%lu\t\t%lu\t\t%lu\t\t%lu\t\t%lld\t\t%lld\t\t%lld\t\t%lld\t\t%lld\n", > + ws->name, active_count, ws->event_count, > + ws->wakeup_count, ws->expire_count, > + ktime_to_ms(active_time), ktime_to_ms(total_time), > + ktime_to_ms(max_time), ktime_to_ms(ws->last_time), > + ktime_to_ms(prevent_sleep_time)); > > spin_unlock_irqrestore(&ws->lock, flags); > > - return ret; > + return 0; -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 06/27] power: wakeup: Remove use of seq_printf return value 2015-02-22 21:38 ` Pavel Machek @ 2015-02-22 21:52 ` Joe Perches 2015-02-23 11:54 ` Pavel Machek 0 siblings, 1 reply; 5+ messages in thread From: Joe Perches @ 2015-02-22 21:52 UTC (permalink / raw) To: Pavel Machek Cc: Andrew Morton, Rafael J. Wysocki, Len Brown, Greg Kroah-Hartman, linux-pm, linux-kernel On Sun, 2015-02-22 at 22:38 +0100, Pavel Machek wrote: > On Sat 2015-02-21 18:53:33, Joe Perches wrote: > > The seq_printf return value, because it's frequently misused, > > will eventually be converted to void. > > > > See: commit 1f33c41c03da ("seq_file: Rename seq_overflow() to > > seq_has_overflowed() and make public") > > You've just removed overflow handling from > print_wakeup_source_stats. > > Can you explain why that is good idea? If overflow occurs, the seq_file subsystem allocates a bigger buffer and calls the show function again. See Al's comment in the 0/n patch and here: https://lkml.org/lkml/2015/2/17/642 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 06/27] power: wakeup: Remove use of seq_printf return value 2015-02-22 21:52 ` Joe Perches @ 2015-02-23 11:54 ` Pavel Machek 0 siblings, 0 replies; 5+ messages in thread From: Pavel Machek @ 2015-02-23 11:54 UTC (permalink / raw) To: Joe Perches Cc: Andrew Morton, Rafael J. Wysocki, Len Brown, Greg Kroah-Hartman, linux-pm, linux-kernel On Sun 2015-02-22 13:52:58, Joe Perches wrote: > On Sun, 2015-02-22 at 22:38 +0100, Pavel Machek wrote: > > On Sat 2015-02-21 18:53:33, Joe Perches wrote: > > > The seq_printf return value, because it's frequently misused, > > > will eventually be converted to void. > > > > > > See: commit 1f33c41c03da ("seq_file: Rename seq_overflow() to > > > seq_has_overflowed() and make public") > > > > You've just removed overflow handling from > > print_wakeup_source_stats. > > > > Can you explain why that is good idea? > > If overflow occurs, the seq_file subsystem allocates > a bigger buffer and calls the show function again. > > See Al's comment in the 0/n patch and here: > https://lkml.org/lkml/2015/2/17/642 You may want to explain while this is good idea in the changelog. >From your explanation it looks like error is somehow handled on higher-level retry, but... -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-02-23 11:54 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-02-22 2:53 [PATCH 00/27] Convert seq_<foo> output calls to return void Joe Perches 2015-02-22 2:53 ` [PATCH 06/27] power: wakeup: Remove use of seq_printf return value Joe Perches 2015-02-22 21:38 ` Pavel Machek 2015-02-22 21:52 ` Joe Perches 2015-02-23 11:54 ` Pavel Machek
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).