lkml.org 
[lkml]   [2019]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 83/96] fs: ratelimit __find_get_block_slow() failure message.
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    [ Upstream commit 43636c804df0126da669c261fc820fb22f62bfc2 ]

    When something let __find_get_block_slow() hit all_mapped path, it calls
    printk() for 100+ times per a second. But there is no need to print same
    message with such high frequency; it is just asking for stall warning, or
    at least bloating log files.

    [ 399.866302][T15342] __find_get_block_slow() failed. block=1, b_blocknr=8
    [ 399.873324][T15342] b_state=0x00000029, b_size=512
    [ 399.878403][T15342] device loop0 blocksize: 4096
    [ 399.883296][T15342] __find_get_block_slow() failed. block=1, b_blocknr=8
    [ 399.890400][T15342] b_state=0x00000029, b_size=512
    [ 399.895595][T15342] device loop0 blocksize: 4096
    [ 399.900556][T15342] __find_get_block_slow() failed. block=1, b_blocknr=8
    [ 399.907471][T15342] b_state=0x00000029, b_size=512
    [ 399.912506][T15342] device loop0 blocksize: 4096

    This patch reduces frequency to up to once per a second, in addition to
    concatenating three lines into one.

    [ 399.866302][T15342] __find_get_block_slow() failed. block=1, b_blocknr=8, b_state=0x00000029, b_size=512, device loop0 blocksize: 4096

    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/buffer.c | 19 ++++++++++---------
    1 file changed, 10 insertions(+), 9 deletions(-)

    diff --git a/fs/buffer.c b/fs/buffer.c
    index 5d8f496d624e..e0d46d47e358 100644
    --- a/fs/buffer.c
    +++ b/fs/buffer.c
    @@ -207,6 +207,7 @@ __find_get_block_slow(struct block_device *bdev, sector_t block)
    struct buffer_head *head;
    struct page *page;
    int all_mapped = 1;
    + static DEFINE_RATELIMIT_STATE(last_warned, HZ, 1);

    index = block >> (PAGE_SHIFT - bd_inode->i_blkbits);
    page = find_get_page_flags(bd_mapping, index, FGP_ACCESSED);
    @@ -234,15 +235,15 @@ __find_get_block_slow(struct block_device *bdev, sector_t block)
    * file io on the block device and getblk. It gets dealt with
    * elsewhere, don't buffer_error if we had some unmapped buffers
    */
    - if (all_mapped) {
    - printk("__find_get_block_slow() failed. "
    - "block=%llu, b_blocknr=%llu\n",
    - (unsigned long long)block,
    - (unsigned long long)bh->b_blocknr);
    - printk("b_state=0x%08lx, b_size=%zu\n",
    - bh->b_state, bh->b_size);
    - printk("device %pg blocksize: %d\n", bdev,
    - 1 << bd_inode->i_blkbits);
    + ratelimit_set_flags(&last_warned, RATELIMIT_MSG_ON_RELEASE);
    + if (all_mapped && __ratelimit(&last_warned)) {
    + printk("__find_get_block_slow() failed. block=%llu, "
    + "b_blocknr=%llu, b_state=0x%08lx, b_size=%zu, "
    + "device %pg blocksize: %d\n",
    + (unsigned long long)block,
    + (unsigned long long)bh->b_blocknr,
    + bh->b_state, bh->b_size, bdev,
    + 1 << bd_inode->i_blkbits);
    }
    out_unlock:
    spin_unlock(&bd_mapping->private_lock);
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-03-12 18:19    [W:4.039 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site