lkml.org 
[lkml]   [2021]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.12 43/43] block: fix the problem of io_ticks becoming smaller
    Date
    From: Chunguang Xu <brookxu@tencent.com>

    [ Upstream commit d80c228d44640f0b47b57a2ca4afa26ef87e16b0 ]

    On the IO submission path, blk_account_io_start() may interrupt
    the system interruption. When the interruption returns, the value
    of part->stamp may have been updated by other cores, so the time
    value collected before the interruption may be less than part->
    stamp. So when this happens, we should do nothing to make io_ticks
    more accurate? For kernels less than 5.0, this may cause io_ticks
    to become smaller, which in turn may cause abnormal ioutil values.

    Signed-off-by: Chunguang Xu <brookxu@tencent.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/1625521646-1069-1-git-send-email-brookxu.cn@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    block/blk-core.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/block/blk-core.c b/block/blk-core.c
    index fc60ff208497..e34dfa13b7bc 100644
    --- a/block/blk-core.c
    +++ b/block/blk-core.c
    @@ -1255,7 +1255,7 @@ static void update_io_ticks(struct block_device *part, unsigned long now,
    unsigned long stamp;
    again:
    stamp = READ_ONCE(part->bd_stamp);
    - if (unlikely(stamp != now)) {
    + if (unlikely(time_after(now, stamp))) {
    if (likely(cmpxchg(&part->bd_stamp, stamp, now) == stamp))
    __part_stat_add(part, io_ticks, end ? now - stamp : 1);
    }
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-07-11 01:52    [W:5.894 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site