lkml.org 
[lkml]   [2013]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 31/52] Update of blkg_stat and blkg_rwstat may happen in bh context. While u64_stats_fetch_retry is only preempt_disable on 32bit UP system. This is not enough to avoid preemption by bh and may read strange 64 bit value.
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Hong Zhiguo <zhiguohong@tencent.com>

    commit 2c575026fae6e63771bd2a4c1d407214a8096a89 upstream.

    Signed-off-by: Hong Zhiguo <zhiguohong@tencent.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    block/blk-cgroup.h | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/block/blk-cgroup.h
    +++ b/block/blk-cgroup.h
    @@ -399,9 +399,9 @@ static inline uint64_t blkg_stat_read(st
    uint64_t v;

    do {
    - start = u64_stats_fetch_begin(&stat->syncp);
    + start = u64_stats_fetch_begin_bh(&stat->syncp);
    v = stat->cnt;
    - } while (u64_stats_fetch_retry(&stat->syncp, start));
    + } while (u64_stats_fetch_retry_bh(&stat->syncp, start));

    return v;
    }
    @@ -467,9 +467,9 @@ static inline struct blkg_rwstat blkg_rw
    struct blkg_rwstat tmp;

    do {
    - start = u64_stats_fetch_begin(&rwstat->syncp);
    + start = u64_stats_fetch_begin_bh(&rwstat->syncp);
    tmp = *rwstat;
    - } while (u64_stats_fetch_retry(&rwstat->syncp, start));
    + } while (u64_stats_fetch_retry_bh(&rwstat->syncp, start));

    return tmp;
    }



    \
     
     \ /
      Last update: 2013-12-10 12:21    [W:2.611 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site