[Devel] [PATCH RHEL7 COMMIT] fs/locks: add more info for unexpected lock

Konstantin Khorenko khorenko at virtuozzo.com
Wed May 30 14:46:48 MSK 2018


The commit is pushed to "branch-rh7-3.10.0-693.21.1.vz7.50.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-693.21.1.vz7.50.3
------>
commit 9a93d40c6626a68de37d6301b813609354e49578
Author: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
Date:   Wed May 30 14:46:48 2018 +0300

    fs/locks: add more info for unexpected lock
    
    [Wed May 16 11:22:02 2018] nfs: server 172.16.50.211 not responding, timed out
    [Wed May 16 11:45:18 2018] ------------[ cut here ]------------
    [Wed May 16 11:45:18 2018] WARNING: CPU: 8 PID: 14959 at fs/locks.c:2431 locks_remove_flock+0x1ea/0x200
    [Wed May 16 11:45:18 2018] leftover lock: dev=0:44 ino=671023203 type=1 flags=0x1 start=9223372036854775805 end=9223372036854775805
    ...
    [Thu May 17 13:40:10 2018] Tainting kernel with flag 0x9
    [Thu May 17 13:40:10 2018] CPU: 0 PID: 47323 Comm: co_io ve: 0 Tainted: G        W      ------------   3.10.0-693.17.1.vz7.43.10 #1 43.10
    [Thu May 17 13:40:10 2018] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006  05/23/2012
    [Thu May 17 13:40:10 2018] Call Trace:
    [Thu May 17 13:40:10 2018]  [<ffffffff816d5d81>] dump_stack+0x19/0x1b
    [Thu May 17 13:40:10 2018]  [<ffffffff8108a402>] add_taint+0x32/0x70
    [Thu May 17 13:40:10 2018]  [<ffffffff8108a8aa>] __warn+0xaa/0x100
    [Thu May 17 13:40:10 2018]  [<ffffffff8108a95f>] warn_slowpath_fmt+0x5f/0x80
    [Thu May 17 13:40:10 2018]  [<ffffffffc059c3ff>] ? nfs_flock+0x8f/0x110 [nfs]
    [Thu May 17 13:40:10 2018]  [<ffffffff8127ae1a>] locks_remove_flock+0x1ea/0x200
    [Thu May 17 13:40:10 2018]  [<ffffffff81220f6e>] __fput+0xce/0x2d0
    [Thu May 17 13:40:10 2018]  [<ffffffff8122125e>] ____fput+0xe/0x10
    [Thu May 17 13:40:10 2018]  [<ffffffff810b192f>] __task_work_run+0x8f/0xd0
    [Thu May 17 13:40:10 2018]  [<ffffffff810a2045>] get_signal_to_deliver+0x545/0x5e0
    [Thu May 17 13:40:10 2018]  [<ffffffffc059c2a5>] ? nfs_lock+0xd5/0x1a0 [nfs]
    [Thu May 17 13:40:10 2018]  [<ffffffff812797a2>] ? vfs_lock_file+0x32/0x50
    [Thu May 17 13:40:10 2018]  [<ffffffff81279849>] ? locks_remove_posix.part.27+0x89/0xc0
    [Thu May 17 13:40:10 2018]  [<ffffffffc059bf6e>] ? nfs_file_fsync_commit+0x5e/0xd0 [nfs]
    [Thu May 17 13:40:10 2018]  [<ffffffff8102a387>] do_signal+0x57/0x6b0
    [Thu May 17 13:40:10 2018]  [<ffffffff81253313>] ? vfs_fsync_range+0x93/0x180
    [Thu May 17 13:40:10 2018]  [<ffffffff810b1821>] ? task_work_add+0x51/0x60
    [Thu May 17 13:40:10 2018]  [<ffffffff81220e48>] ? fput+0x58/0xb0
    [Thu May 17 13:40:10 2018]  [<ffffffff8121c52b>] ? filp_close+0x5b/0x80
    [Thu May 17 13:40:10 2018]  [<ffffffff8102aa3f>] do_notify_resume+0x5f/0xb0
    [Thu May 17 13:40:10 2018]  [<ffffffff816e8db7>] int_signal+0x12/0x17
    
    FL_POSIX lock is unexpectedly left locked, it was created for the struct
    file we do __fput. It should've been already removed in
    locks_remove_posix. Might be connected with nfs-server disconnect but
    that does not reproduce manually. Need more info to investigate it.
    
    https://pmc.acronis.com/browse/TTASK-23738
    
    Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
 fs/locks.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/fs/locks.c b/fs/locks.c
index b1667f364a9e..54c1d0ce979f 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -2424,11 +2424,15 @@ void locks_remove_flock(struct file *filp)
 			 * the list.
 			 */
 			WARN(!IS_FLOCK(fl),
-				"leftover lock: dev=%u:%u ino=%lu type=%hhd flags=0x%x start=%lld end=%lld\n",
+				"leftover lock: dev=%u:%u ino=%lu type=%hhd flags=0x%x start=%lld end=%lld "
+				"owner=%p counter=%d pid=%u ops=%p lmops=%p blocked=%d\n",
 				MAJOR(inode->i_sb->s_dev),
 				MINOR(inode->i_sb->s_dev), inode->i_ino,
 				fl->fl_type, fl->fl_flags,
-				fl->fl_start, fl->fl_end);
+				fl->fl_start, fl->fl_end,
+				fl->fl_owner, fl->fl_owner ? fl->fl_owner->count.counter : 0,
+				fl->fl_pid, fl->fl_ops, fl->fl_lmops,
+				!list_empty(&fl->fl_block));
 
 			locks_delete_lock(before, &dispose);
 			continue;


More information about the Devel mailing list