http://lkml.org/lkml/2008/7/16/39

Subject Re: [PATCH 05/10] block: always use __{disk|part|all}_stat_*() and kill non-underbarred versions
From Peter Zijlstra <>
Date Wed, 16 Jul 2008 08:19:05 +0200

On Mon, 2008-07-14 at 16:12 +0900, Tejun Heo wrote:
> There are two variants of stat functions - ones prefixed with double
> underbars which don't care about preemption and ones without which
> disable preemption before manipulating per-cpu counters.  It's unclear
> whether the underbarred ones assume that preemtion is disabled on
> entry as some callers don't do that.  In any case, stats are not
> critical data and errors don't lead to critical failures.
> 
> However, consistently using the underbarred version and ensuring that
> they are called with preemption disabled doesn't incur noticeable
> overhead or even reduces overhead in some cases.
> 
> * part stat manipulations need disk_map_sector_rcu() which involves
>   read locking RCU anyway.  Using rcu_read_lock_preempt() instead
>   solves the problem nicely.  On rcuclassic, this means no extra
>   overhead.
> 
> * Calls to the non-underbarred versions are converted to explicit
>   preemtion disable and calls to respective underbarrded versions.  As
>   all such users had more than one consecutive stat ops, this reduces
>   extra preemption disable/enables.
> 
> * In drivers/md/dm.c::end_io_acct(), __disk_stat_add() call is moved
>   into neighboring preemption disabled block.
> 
> The conversion makes the stats usage more consistent and IMHO the
> added few preemption calls are well justified for that.
> 
> As this change makes non-underbarred versions useless, non-underbarred
> stat functions and macros are killed.  The next patch will drop
> underbars from the underbarred versions as it's superflous now.  This
> is done as a separate step so that compile fails between this and the
> next patch if someone's left behind.


Aah, found what you use it for...

See, you need the preempt-off for something different than the RCU
usage, hence it doesn't make sense to mix that in. Use the regular
get_cpu/put_cpu stuff to fiddle with the percpu counters already.

So NAK on this one too.



Reply via email to