lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 177/593] block_dump: remove block_dump feature in mark_inode_dirty()
    Date
    From: zhangyi (F) <yi.zhang@huawei.com>

    [ Upstream commit 12e0613715e1cf305fffafaf0e89d810d9a85cc0 ]

    block_dump is an old debugging interface, one of it's functions is used
    to print the information about who write which file on disk. If we
    enable block_dump through /proc/sys/vm/block_dump and turn on debug log
    level, we can gather information about write process name, target file
    name and disk from kernel message. This feature is realized in
    block_dump___mark_inode_dirty(), it print above information into kernel
    message directly when marking inode dirty, so it is noisy and can easily
    trigger log storm. At the same time, get the dentry refcount is also not
    safe, we found it will lead to deadlock on ext4 file system with
    data=journal mode.

    After tracepoints has been introduced into the kernel, we got a
    tracepoint in __mark_inode_dirty(), which is a better replacement of
    block_dump___mark_inode_dirty(). The only downside is that it only trace
    the inode number and not a file name, but it probably doesn't matter
    because the original printed file name in block_dump is not accurate in
    some cases, and we can still find it through the inode number and device
    id. So this patch delete the dirting inode part of block_dump feature.

    Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20210313030146.2882027-2-yi.zhang@huawei.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/fs-writeback.c | 25 -------------------------
    1 file changed, 25 deletions(-)

    diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
    index 90dddb507e4a..0d0f014b09ec 100644
    --- a/fs/fs-writeback.c
    +++ b/fs/fs-writeback.c
    @@ -2196,28 +2196,6 @@ int dirtytime_interval_handler(struct ctl_table *table, int write,
    return ret;
    }

    -static noinline void block_dump___mark_inode_dirty(struct inode *inode)
    -{
    - if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) {
    - struct dentry *dentry;
    - const char *name = "?";
    -
    - dentry = d_find_alias(inode);
    - if (dentry) {
    - spin_lock(&dentry->d_lock);
    - name = (const char *) dentry->d_name.name;
    - }
    - printk(KERN_DEBUG
    - "%s(%d): dirtied inode %lu (%s) on %s\n",
    - current->comm, task_pid_nr(current), inode->i_ino,
    - name, inode->i_sb->s_id);
    - if (dentry) {
    - spin_unlock(&dentry->d_lock);
    - dput(dentry);
    - }
    - }
    -}
    -
    /**
    * __mark_inode_dirty - internal function
    *
    @@ -2277,9 +2255,6 @@ void __mark_inode_dirty(struct inode *inode, int flags)
    (dirtytime && (inode->i_state & I_DIRTY_INODE)))
    return;

    - if (unlikely(block_dump))
    - block_dump___mark_inode_dirty(inode);
    -
    spin_lock(&inode->i_lock);
    if (dirtytime && (inode->i_state & I_DIRTY_INODE))
    goto out_unlock_inode;
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 08:51    [W:4.291 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site