lkml.org 
[lkml]   [2017]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 120/172] aio: fix lock dep warning
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Shaohua Li <shli@fb.com>


    [ Upstream commit a12f1ae61c489076a9aeb90bddca7722bf330df3 ]

    lockdep reports a warnning. file_start_write/file_end_write only
    acquire/release the lock for regular files. So checking the files in aio
    side too.

    [ 453.532141] ------------[ cut here ]------------
    [ 453.533011] WARNING: CPU: 1 PID: 1298 at ../kernel/locking/lockdep.c:3514 lock_release+0x434/0x670
    [ 453.533011] DEBUG_LOCKS_WARN_ON(depth <= 0)
    [ 453.533011] Modules linked in:
    [ 453.533011] CPU: 1 PID: 1298 Comm: fio Not tainted 4.9.0+ #964
    [ 453.533011] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.0-1.fc24 04/01/2014
    [ 453.533011] ffff8803a24b7a70 ffffffff8196cffb ffff8803a24b7ae8 0000000000000000
    [ 453.533011] ffff8803a24b7ab8 ffffffff81091ee1 ffff8803a5dba700 00000dba00000008
    [ 453.533011] ffffed0074496f59 ffff8803a5dbaf54 ffff8803ae0f8488 fffffffffffffdef
    [ 453.533011] Call Trace:
    [ 453.533011] [<ffffffff8196cffb>] dump_stack+0x67/0x9c
    [ 453.533011] [<ffffffff81091ee1>] __warn+0x111/0x130
    [ 453.533011] [<ffffffff81091f97>] warn_slowpath_fmt+0x97/0xb0
    [ 453.533011] [<ffffffff81091f00>] ? __warn+0x130/0x130
    [ 453.533011] [<ffffffff8191b789>] ? blk_finish_plug+0x29/0x60
    [ 453.533011] [<ffffffff811205d4>] lock_release+0x434/0x670
    [ 453.533011] [<ffffffff8198af94>] ? import_single_range+0xd4/0x110
    [ 453.533011] [<ffffffff81322195>] ? rw_verify_area+0x65/0x140
    [ 453.533011] [<ffffffff813aa696>] ? aio_write+0x1f6/0x280
    [ 453.533011] [<ffffffff813aa6c9>] aio_write+0x229/0x280
    [ 453.533011] [<ffffffff813aa4a0>] ? aio_complete+0x640/0x640
    [ 453.533011] [<ffffffff8111df20>] ? debug_check_no_locks_freed+0x1a0/0x1a0
    [ 453.533011] [<ffffffff8114793a>] ? debug_lockdep_rcu_enabled.part.2+0x1a/0x30
    [ 453.533011] [<ffffffff81147985>] ? debug_lockdep_rcu_enabled+0x35/0x40
    [ 453.533011] [<ffffffff812a92be>] ? __might_fault+0x7e/0xf0
    [ 453.533011] [<ffffffff813ac9bc>] do_io_submit+0x94c/0xb10
    [ 453.533011] [<ffffffff813ac2ae>] ? do_io_submit+0x23e/0xb10
    [ 453.533011] [<ffffffff813ac070>] ? SyS_io_destroy+0x270/0x270
    [ 453.533011] [<ffffffff8111d7b3>] ? mark_held_locks+0x23/0xc0
    [ 453.533011] [<ffffffff8100201a>] ? trace_hardirqs_on_thunk+0x1a/0x1c
    [ 453.533011] [<ffffffff813acb90>] SyS_io_submit+0x10/0x20
    [ 453.533011] [<ffffffff824f96aa>] entry_SYSCALL_64_fastpath+0x18/0xad
    [ 453.533011] [<ffffffff81119190>] ? trace_hardirqs_off_caller+0xc0/0x110
    [ 453.533011] ---[ end trace b2fbe664d1cc0082 ]---

    Cc: Dmitry Monakhov <dmonakhov@openvz.org>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Shaohua Li <shli@fb.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/aio.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    --- a/fs/aio.c
    +++ b/fs/aio.c
    @@ -1085,7 +1085,8 @@ static void aio_complete(struct kiocb *k
    * Tell lockdep we inherited freeze protection from submission
    * thread.
    */
    - __sb_writers_acquired(file_inode(file)->i_sb, SB_FREEZE_WRITE);
    + if (S_ISREG(file_inode(file)->i_mode))
    + __sb_writers_acquired(file_inode(file)->i_sb, SB_FREEZE_WRITE);
    file_end_write(file);
    }

    @@ -1492,7 +1493,8 @@ static ssize_t aio_write(struct kiocb *r
    * by telling it the lock got released so that it doesn't
    * complain about held lock when we return to userspace.
    */
    - __sb_writers_release(file_inode(file)->i_sb, SB_FREEZE_WRITE);
    + if (S_ISREG(file_inode(file)->i_mode))
    + __sb_writers_release(file_inode(file)->i_sb, SB_FREEZE_WRITE);
    }
    kfree(iovec);
    return ret;

    \
     
     \ /
      Last update: 2017-07-03 16:21    [W:4.038 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site