* lockdep splat with v4.11 and generic/386 @ 2017-05-04 19:38 Ross Zwisler 2017-05-05 7:59 ` Jan Kara 0 siblings, 1 reply; 5+ messages in thread From: Ross Zwisler @ 2017-05-04 19:38 UTC (permalink / raw) To: linux-ext4, Theodore Ts'o, Jan Kara I hit the following lockdep splat during some regression testing today, and was able to reproduce it on vanilla v4.11 without DAX. My test setup is big memmap PMEM device in a QEMU virtual machine, but I don't think that the block device is important. I was able to reproduce this easily by running generic/386 in a loop. Here's the failure: FSTYP -- ext4 PLATFORM -- Linux/x86_64 lorwyn 4.11.0 MKFS_OPTIONS -- /dev/pmem0p2 MOUNT_OPTIONS -- -o acl,user_xattr -o context=system_u:object_r:root_t:s0 /dev/pmem0p2 /mnt/xfstests_scratch generic/386 1s ... 1s _check_dmesg: something found in dmesg (see /root/xfstests/results//generic/386.dmesg) Ran: generic/386 Failures: generic/386 Failed 1 of 1 tests Here's the lockdep splat, passed through kasan_symbolize.py: run fstests generic/386 at 2017-05-04 13:36:35 EXT4-fs (pmem0p2): mounted filesystem with ordered data mode. Opts: acl,user_xattr,quota ====================================================== [ INFO: possible circular locking dependency detected ] 4.11.0 #1 Not tainted ------------------------------------------------------- mkdir/8458 is trying to acquire lock: (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff8133a8bb>] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 but task is already holding lock: (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #1 (&ei->i_data_sem/2){++++..}: [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 [< none >] down_read+0x43/0xa0 kernel/locking/rwsem.c:23 [< none >] ext4_map_blocks+0x2b4/0x5e0 fs/ext4/inode.c:540 [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 [< none >] ext4_quota_read+0xce/0x110 fs/ext4/super.c:5470 [< none >] read_blk+0x4c/0x60 fs/quota/quota_tree.c:63 [< none >] find_tree_dqentry+0x44/0x230 fs/quota/quota_tree.c:579 [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 [< inline >] find_dqentry fs/quota/quota_tree.c:602 [< none >] qtree_read_dquot+0x12e/0x260 fs/quota/quota_tree.c:622 [< none >] v2_read_dquot+0x2e/0x30 fs/quota/quota_v2.c:288 [< none >] dquot_acquire+0xe3/0x120 fs/quota/dquot.c:411 [< none >] ext4_acquire_dquot+0x68/0xa0 fs/ext4/super.c:5227 [< none >] dqget+0x305/0x470 fs/quota/dquot.c:891 [< none >] __dquot_initialize+0x151/0x290 fs/quota/dquot.c:1460 [< none >] dquot_initialize+0x13/0x20 fs/quota/dquot.c:1511 [< none >] ext4_mkdir+0x66/0x470 fs/ext4/namei.c:2645 [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 [< inline >] SYSC_mkdirat fs/namei.c:3792 [< inline >] SyS_mkdirat fs/namei.c:3776 [< inline >] SYSC_mkdir fs/namei.c:3803 [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 -> #0 (&s->s_dquot.dqio_mutex){+.+...}: [< inline >] check_prev_add kernel/locking/lockdep.c:1830 [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 [< inline >] validate_chain kernel/locking/lockdep.c:2267 [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 [< inline >] SYSC_mkdirat fs/namei.c:3792 [< inline >] SyS_mkdirat fs/namei.c:3776 [< inline >] SYSC_mkdir fs/namei.c:3803 [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 other info that might help us debug this: Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&ei->i_data_sem/2); lock(&s->s_dquot.dqio_mutex); lock(&ei->i_data_sem/2); lock(&s->s_dquot.dqio_mutex); *** DEADLOCK *** 5 locks held by mkdir/8458: #0: (sb_writers#14){.+.+.+}, at: [< inline >] sb_start_write ./include/linux/fs.h:1504 #0: (sb_writers#14){.+.+.+}, at: [<ffffffff812e1e24>] mnt_want_write+0x24/0x50 fs/namespace.c:388 #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [< inline >] inode_lock_nested ./include/linux/fs.h:731 #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [<ffffffff812cb5e3>] filename_create+0x83/0x160 fs/namei.c:3594 #2: (jbd2_handle){++++..}, at: [<ffffffff813d31b2>] start_this_handle+0x112/0x450 fs/jbd2/transaction.c:361 #3: (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 #4: (dquot_srcu){......}, at: [< inline >] srcu_read_lock ./include/linux/srcu.h:237 #4: (dquot_srcu){......}, at: [<ffffffff8133c44b>] __dquot_alloc_space+0xbb/0x2b0 fs/quota/dquot.c:1668 stack backtrace: CPU: 3 PID: 8458 Comm: mkdir Not tainted 4.11.0 #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 Call Trace: [< inline >] __dump_stack lib/dump_stack.c:16 [< none >] dump_stack+0x86/0xc3 lib/dump_stack.c:52 [< none >] print_circular_bug+0x1be/0x210 kernel/locking/lockdep.c:1204 [< inline >] check_prev_add kernel/locking/lockdep.c:1830 [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 [< inline >] validate_chain kernel/locking/lockdep.c:2267 [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 ?[< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 ?[< inline >] spin_unlock ./include/linux/spinlock.h:339 ?[< none >] dquot_mark_dquot_dirty+0x57/0xc0 fs/quota/dquot.c:355 ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 ?[< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 ?[< none >] __this_cpu_preempt_check+0x13/0x20 lib/smp_processor_id.c:62 ?[< none >] __percpu_counter_add+0x85/0xb0 lib/percpu_counter.c:90 [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 ?[< inline >] lock_is_held ./include/linux/lockdep.h:348 ?[< none >] rcu_read_lock_sched_held+0x4a/0x80 kernel/rcu/update.c:114 ?[< inline >] trace_kmalloc ./include/trace/events/kmem.h:45 ?[< none >] __kmalloc+0x2ce/0x300 mm/slub.c:3743 ?[< inline >] kmalloc ./include/linux/slab.h:495 ?[< inline >] kzalloc ./include/linux/slab.h:663 ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 ?[< inline >] kmalloc ./include/linux/slab.h:495 ?[< inline >] kzalloc ./include/linux/slab.h:663 ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 [< inline >] SYSC_mkdirat fs/namei.c:3792 [< inline >] SyS_mkdirat fs/namei.c:3776 [< inline >] SYSC_mkdir fs/namei.c:3803 [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 RIP: 0033:0x7fb614c15947 RSP: 002b:00007fff31be4938 EFLAGS: 00000216 ORIG_RAX: 0000000000000053 RAX: ffffffffffffffda RBX: 00007fff31be4c48 RCX: 00007fb614c15947 RDX: 0000000000000000 RSI: 00000000000001ff RDI: 00007fff31be6aa5 RBP: 0000000000000003 R08: 00000000000001ff R09: 0000564258eadac0 R10: 000056425b0a4060 R11: 0000000000000216 R12: 0000000000000000 R13: 0000564258eadb00 R14: 0000000000000000 R15: 0000000000000000 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: lockdep splat with v4.11 and generic/386 2017-05-04 19:38 lockdep splat with v4.11 and generic/386 Ross Zwisler @ 2017-05-05 7:59 ` Jan Kara 2017-05-05 8:49 ` Jan Kara 0 siblings, 1 reply; 5+ messages in thread From: Jan Kara @ 2017-05-05 7:59 UTC (permalink / raw) To: Ross Zwisler; +Cc: linux-ext4, Theodore Ts'o, Jan Kara On Thu 04-05-17 13:38:38, Ross Zwisler wrote: > I hit the following lockdep splat during some regression testing today, and > was able to reproduce it on vanilla v4.11 without DAX. My test setup is big > memmap PMEM device in a QEMU virtual machine, but I don't think that the block > device is important. I was able to reproduce this easily by running > generic/386 in a loop. Here's the failure: Thanks for report! This is false positive caused by a bug in our lockdep annotation - locks on quota files (i_data_sem in this case) rank differently than locks on normal files - specifically the lock ordering is i_data_sem (normal file, directory, ...) -> dqio_mutex -> i_data_sem (quota file). Now we do take care to tell lockdep about this by calling lockdep_set_quota_inode() in fs/ext4/super.c for quota files. However we don't return i_data_sem back to the normal locking class on freeing inode and when quota file inode gets reused for something else, it has a wrong locking class set which confuses lockdep. I'll send a fix. Honza > > FSTYP -- ext4 > PLATFORM -- Linux/x86_64 lorwyn 4.11.0 > MKFS_OPTIONS -- /dev/pmem0p2 > MOUNT_OPTIONS -- -o acl,user_xattr -o context=system_u:object_r:root_t:s0 /dev/pmem0p2 /mnt/xfstests_scratch > > generic/386 1s ... 1s > _check_dmesg: something found in dmesg (see /root/xfstests/results//generic/386.dmesg) > Ran: generic/386 > Failures: generic/386 > Failed 1 of 1 tests > > Here's the lockdep splat, passed through kasan_symbolize.py: > > run fstests generic/386 at 2017-05-04 13:36:35 > EXT4-fs (pmem0p2): mounted filesystem with ordered data mode. Opts: acl,user_xattr,quota > > ====================================================== > [ INFO: possible circular locking dependency detected ] > 4.11.0 #1 Not tainted > ------------------------------------------------------- > mkdir/8458 is trying to acquire lock: > (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff8133a8bb>] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > but task is already holding lock: > (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > > which lock already depends on the new lock. > > > the existing dependency chain (in reverse order) is: > > -> #1 (&ei->i_data_sem/2){++++..}: > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > [< none >] down_read+0x43/0xa0 kernel/locking/rwsem.c:23 > [< none >] ext4_map_blocks+0x2b4/0x5e0 fs/ext4/inode.c:540 > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > [< none >] ext4_quota_read+0xce/0x110 fs/ext4/super.c:5470 > [< none >] read_blk+0x4c/0x60 fs/quota/quota_tree.c:63 > [< none >] find_tree_dqentry+0x44/0x230 fs/quota/quota_tree.c:579 > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > [< inline >] find_dqentry fs/quota/quota_tree.c:602 > [< none >] qtree_read_dquot+0x12e/0x260 fs/quota/quota_tree.c:622 > [< none >] v2_read_dquot+0x2e/0x30 fs/quota/quota_v2.c:288 > [< none >] dquot_acquire+0xe3/0x120 fs/quota/dquot.c:411 > [< none >] ext4_acquire_dquot+0x68/0xa0 fs/ext4/super.c:5227 > [< none >] dqget+0x305/0x470 fs/quota/dquot.c:891 > [< none >] __dquot_initialize+0x151/0x290 fs/quota/dquot.c:1460 > [< none >] dquot_initialize+0x13/0x20 fs/quota/dquot.c:1511 > [< none >] ext4_mkdir+0x66/0x470 fs/ext4/namei.c:2645 > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > [< inline >] SYSC_mkdirat fs/namei.c:3792 > [< inline >] SyS_mkdirat fs/namei.c:3776 > [< inline >] SYSC_mkdir fs/namei.c:3803 > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > -> #0 (&s->s_dquot.dqio_mutex){+.+...}: > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > [< inline >] SYSC_mkdirat fs/namei.c:3792 > [< inline >] SyS_mkdirat fs/namei.c:3776 > [< inline >] SYSC_mkdir fs/namei.c:3803 > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > other info that might help us debug this: > > Possible unsafe locking scenario: > > CPU0 CPU1 > ---- ---- > lock(&ei->i_data_sem/2); > lock(&s->s_dquot.dqio_mutex); > lock(&ei->i_data_sem/2); > lock(&s->s_dquot.dqio_mutex); > > *** DEADLOCK *** > > 5 locks held by mkdir/8458: > #0: (sb_writers#14){.+.+.+}, at: [< inline >] sb_start_write ./include/linux/fs.h:1504 > #0: (sb_writers#14){.+.+.+}, at: [<ffffffff812e1e24>] mnt_want_write+0x24/0x50 fs/namespace.c:388 > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [< inline >] inode_lock_nested ./include/linux/fs.h:731 > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [<ffffffff812cb5e3>] filename_create+0x83/0x160 fs/namei.c:3594 > #2: (jbd2_handle){++++..}, at: [<ffffffff813d31b2>] start_this_handle+0x112/0x450 fs/jbd2/transaction.c:361 > #3: (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > #4: (dquot_srcu){......}, at: [< inline >] srcu_read_lock ./include/linux/srcu.h:237 > #4: (dquot_srcu){......}, at: [<ffffffff8133c44b>] __dquot_alloc_space+0xbb/0x2b0 fs/quota/dquot.c:1668 > > stack backtrace: > CPU: 3 PID: 8458 Comm: mkdir Not tainted 4.11.0 #1 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 > Call Trace: > [< inline >] __dump_stack lib/dump_stack.c:16 > [< none >] dump_stack+0x86/0xc3 lib/dump_stack.c:52 > [< none >] print_circular_bug+0x1be/0x210 kernel/locking/lockdep.c:1204 > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > ?[< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > ?[< inline >] spin_unlock ./include/linux/spinlock.h:339 > ?[< none >] dquot_mark_dquot_dirty+0x57/0xc0 fs/quota/dquot.c:355 > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > ?[< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > ?[< none >] __this_cpu_preempt_check+0x13/0x20 lib/smp_processor_id.c:62 > ?[< none >] __percpu_counter_add+0x85/0xb0 lib/percpu_counter.c:90 > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > ?[< inline >] lock_is_held ./include/linux/lockdep.h:348 > ?[< none >] rcu_read_lock_sched_held+0x4a/0x80 kernel/rcu/update.c:114 > ?[< inline >] trace_kmalloc ./include/trace/events/kmem.h:45 > ?[< none >] __kmalloc+0x2ce/0x300 mm/slub.c:3743 > ?[< inline >] kmalloc ./include/linux/slab.h:495 > ?[< inline >] kzalloc ./include/linux/slab.h:663 > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > ?[< inline >] kmalloc ./include/linux/slab.h:495 > ?[< inline >] kzalloc ./include/linux/slab.h:663 > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > [< inline >] SYSC_mkdirat fs/namei.c:3792 > [< inline >] SyS_mkdirat fs/namei.c:3776 > [< inline >] SYSC_mkdir fs/namei.c:3803 > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > RIP: 0033:0x7fb614c15947 > RSP: 002b:00007fff31be4938 EFLAGS: 00000216 ORIG_RAX: 0000000000000053 > RAX: ffffffffffffffda RBX: 00007fff31be4c48 RCX: 00007fb614c15947 > RDX: 0000000000000000 RSI: 00000000000001ff RDI: 00007fff31be6aa5 > RBP: 0000000000000003 R08: 00000000000001ff R09: 0000564258eadac0 > R10: 000056425b0a4060 R11: 0000000000000216 R12: 0000000000000000 > R13: 0000564258eadb00 R14: 0000000000000000 R15: 0000000000000000 -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: lockdep splat with v4.11 and generic/386 2017-05-05 7:59 ` Jan Kara @ 2017-05-05 8:49 ` Jan Kara 2017-05-05 16:50 ` Darrick J. Wong 0 siblings, 1 reply; 5+ messages in thread From: Jan Kara @ 2017-05-05 8:49 UTC (permalink / raw) To: Ross Zwisler; +Cc: linux-ext4, Theodore Ts'o, Jan Kara On Fri 05-05-17 09:59:23, Jan Kara wrote: > On Thu 04-05-17 13:38:38, Ross Zwisler wrote: > > I hit the following lockdep splat during some regression testing today, and > > was able to reproduce it on vanilla v4.11 without DAX. My test setup is big > > memmap PMEM device in a QEMU virtual machine, but I don't think that the block > > device is important. I was able to reproduce this easily by running > > generic/386 in a loop. Here's the failure: > > Thanks for report! This is false positive caused by a bug in our lockdep > annotation - locks on quota files (i_data_sem in this case) rank > differently than locks on normal files - specifically the lock ordering is > i_data_sem (normal file, directory, ...) -> dqio_mutex -> i_data_sem (quota > file). Now we do take care to tell lockdep about this by calling > lockdep_set_quota_inode() in fs/ext4/super.c for quota files. However we > don't return i_data_sem back to the normal locking class on freeing inode > and when quota file inode gets reused for something else, it has a wrong > locking class set which confuses lockdep. I'll send a fix. Hum, I have the fix implemented but how did you make that test work for ext4? For me it is not run because: xfs_quota binary does not support foreign filesystems and looking at xfs_quota source in the latest git, -f still is not supported... Honza > > FSTYP -- ext4 > > PLATFORM -- Linux/x86_64 lorwyn 4.11.0 > > MKFS_OPTIONS -- /dev/pmem0p2 > > MOUNT_OPTIONS -- -o acl,user_xattr -o context=system_u:object_r:root_t:s0 /dev/pmem0p2 /mnt/xfstests_scratch > > > > generic/386 1s ... 1s > > _check_dmesg: something found in dmesg (see /root/xfstests/results//generic/386.dmesg) > > Ran: generic/386 > > Failures: generic/386 > > Failed 1 of 1 tests > > > > Here's the lockdep splat, passed through kasan_symbolize.py: > > > > run fstests generic/386 at 2017-05-04 13:36:35 > > EXT4-fs (pmem0p2): mounted filesystem with ordered data mode. Opts: acl,user_xattr,quota > > > > ====================================================== > > [ INFO: possible circular locking dependency detected ] > > 4.11.0 #1 Not tainted > > ------------------------------------------------------- > > mkdir/8458 is trying to acquire lock: > > (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff8133a8bb>] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > but task is already holding lock: > > (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > > > > which lock already depends on the new lock. > > > > > > the existing dependency chain (in reverse order) is: > > > > -> #1 (&ei->i_data_sem/2){++++..}: > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > [< none >] down_read+0x43/0xa0 kernel/locking/rwsem.c:23 > > [< none >] ext4_map_blocks+0x2b4/0x5e0 fs/ext4/inode.c:540 > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > [< none >] ext4_quota_read+0xce/0x110 fs/ext4/super.c:5470 > > [< none >] read_blk+0x4c/0x60 fs/quota/quota_tree.c:63 > > [< none >] find_tree_dqentry+0x44/0x230 fs/quota/quota_tree.c:579 > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > [< inline >] find_dqentry fs/quota/quota_tree.c:602 > > [< none >] qtree_read_dquot+0x12e/0x260 fs/quota/quota_tree.c:622 > > [< none >] v2_read_dquot+0x2e/0x30 fs/quota/quota_v2.c:288 > > [< none >] dquot_acquire+0xe3/0x120 fs/quota/dquot.c:411 > > [< none >] ext4_acquire_dquot+0x68/0xa0 fs/ext4/super.c:5227 > > [< none >] dqget+0x305/0x470 fs/quota/dquot.c:891 > > [< none >] __dquot_initialize+0x151/0x290 fs/quota/dquot.c:1460 > > [< none >] dquot_initialize+0x13/0x20 fs/quota/dquot.c:1511 > > [< none >] ext4_mkdir+0x66/0x470 fs/ext4/namei.c:2645 > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > > -> #0 (&s->s_dquot.dqio_mutex){+.+...}: > > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > > other info that might help us debug this: > > > > Possible unsafe locking scenario: > > > > CPU0 CPU1 > > ---- ---- > > lock(&ei->i_data_sem/2); > > lock(&s->s_dquot.dqio_mutex); > > lock(&ei->i_data_sem/2); > > lock(&s->s_dquot.dqio_mutex); > > > > *** DEADLOCK *** > > > > 5 locks held by mkdir/8458: > > #0: (sb_writers#14){.+.+.+}, at: [< inline >] sb_start_write ./include/linux/fs.h:1504 > > #0: (sb_writers#14){.+.+.+}, at: [<ffffffff812e1e24>] mnt_want_write+0x24/0x50 fs/namespace.c:388 > > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [< inline >] inode_lock_nested ./include/linux/fs.h:731 > > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [<ffffffff812cb5e3>] filename_create+0x83/0x160 fs/namei.c:3594 > > #2: (jbd2_handle){++++..}, at: [<ffffffff813d31b2>] start_this_handle+0x112/0x450 fs/jbd2/transaction.c:361 > > #3: (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > > #4: (dquot_srcu){......}, at: [< inline >] srcu_read_lock ./include/linux/srcu.h:237 > > #4: (dquot_srcu){......}, at: [<ffffffff8133c44b>] __dquot_alloc_space+0xbb/0x2b0 fs/quota/dquot.c:1668 > > > > stack backtrace: > > CPU: 3 PID: 8458 Comm: mkdir Not tainted 4.11.0 #1 > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 > > Call Trace: > > [< inline >] __dump_stack lib/dump_stack.c:16 > > [< none >] dump_stack+0x86/0xc3 lib/dump_stack.c:52 > > [< none >] print_circular_bug+0x1be/0x210 kernel/locking/lockdep.c:1204 > > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > ?[< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > ?[< inline >] spin_unlock ./include/linux/spinlock.h:339 > > ?[< none >] dquot_mark_dquot_dirty+0x57/0xc0 fs/quota/dquot.c:355 > > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > ?[< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > > ?[< none >] __this_cpu_preempt_check+0x13/0x20 lib/smp_processor_id.c:62 > > ?[< none >] __percpu_counter_add+0x85/0xb0 lib/percpu_counter.c:90 > > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > > ?[< inline >] lock_is_held ./include/linux/lockdep.h:348 > > ?[< none >] rcu_read_lock_sched_held+0x4a/0x80 kernel/rcu/update.c:114 > > ?[< inline >] trace_kmalloc ./include/trace/events/kmem.h:45 > > ?[< none >] __kmalloc+0x2ce/0x300 mm/slub.c:3743 > > ?[< inline >] kmalloc ./include/linux/slab.h:495 > > ?[< inline >] kzalloc ./include/linux/slab.h:663 > > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > > ?[< inline >] kmalloc ./include/linux/slab.h:495 > > ?[< inline >] kzalloc ./include/linux/slab.h:663 > > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > RIP: 0033:0x7fb614c15947 > > RSP: 002b:00007fff31be4938 EFLAGS: 00000216 ORIG_RAX: 0000000000000053 > > RAX: ffffffffffffffda RBX: 00007fff31be4c48 RCX: 00007fb614c15947 > > RDX: 0000000000000000 RSI: 00000000000001ff RDI: 00007fff31be6aa5 > > RBP: 0000000000000003 R08: 00000000000001ff R09: 0000564258eadac0 > > R10: 000056425b0a4060 R11: 0000000000000216 R12: 0000000000000000 > > R13: 0000564258eadb00 R14: 0000000000000000 R15: 0000000000000000 > -- > Jan Kara <jack@suse.com> > SUSE Labs, CR -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: lockdep splat with v4.11 and generic/386 2017-05-05 8:49 ` Jan Kara @ 2017-05-05 16:50 ` Darrick J. Wong 2017-05-09 8:17 ` Jan Kara 0 siblings, 1 reply; 5+ messages in thread From: Darrick J. Wong @ 2017-05-05 16:50 UTC (permalink / raw) To: Jan Kara; +Cc: Ross Zwisler, linux-ext4, Theodore Ts'o On Fri, May 05, 2017 at 10:49:50AM +0200, Jan Kara wrote: > On Fri 05-05-17 09:59:23, Jan Kara wrote: > > On Thu 04-05-17 13:38:38, Ross Zwisler wrote: > > > I hit the following lockdep splat during some regression testing today, and > > > was able to reproduce it on vanilla v4.11 without DAX. My test setup is big > > > memmap PMEM device in a QEMU virtual machine, but I don't think that the block > > > device is important. I was able to reproduce this easily by running > > > generic/386 in a loop. Here's the failure: > > > > Thanks for report! This is false positive caused by a bug in our lockdep > > annotation - locks on quota files (i_data_sem in this case) rank > > differently than locks on normal files - specifically the lock ordering is > > i_data_sem (normal file, directory, ...) -> dqio_mutex -> i_data_sem (quota > > file). Now we do take care to tell lockdep about this by calling > > lockdep_set_quota_inode() in fs/ext4/super.c for quota files. However we > > don't return i_data_sem back to the normal locking class on freeing inode > > and when quota file inode gets reused for something else, it has a wrong > > locking class set which confuses lockdep. I'll send a fix. > > Hum, I have the fix implemented but how did you make that test work for > ext4? For me it is not run because: > > xfs_quota binary does not support foreign filesystems > > and looking at xfs_quota source in the latest git, -f still is not > supported... What git repo are you using? xfs_quota has had -f since xfsprogs 4.8. xfsprogs upstream lives at: git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git (XFS moved off SGI infrastructure last October.) --D > > Honza > > > > FSTYP -- ext4 > > > PLATFORM -- Linux/x86_64 lorwyn 4.11.0 > > > MKFS_OPTIONS -- /dev/pmem0p2 > > > MOUNT_OPTIONS -- -o acl,user_xattr -o context=system_u:object_r:root_t:s0 /dev/pmem0p2 /mnt/xfstests_scratch > > > > > > generic/386 1s ... 1s > > > _check_dmesg: something found in dmesg (see /root/xfstests/results//generic/386.dmesg) > > > Ran: generic/386 > > > Failures: generic/386 > > > Failed 1 of 1 tests > > > > > > Here's the lockdep splat, passed through kasan_symbolize.py: > > > > > > run fstests generic/386 at 2017-05-04 13:36:35 > > > EXT4-fs (pmem0p2): mounted filesystem with ordered data mode. Opts: acl,user_xattr,quota > > > > > > ====================================================== > > > [ INFO: possible circular locking dependency detected ] > > > 4.11.0 #1 Not tainted > > > ------------------------------------------------------- > > > mkdir/8458 is trying to acquire lock: > > > (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff8133a8bb>] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > > > but task is already holding lock: > > > (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > > > > > > which lock already depends on the new lock. > > > > > > > > > the existing dependency chain (in reverse order) is: > > > > > > -> #1 (&ei->i_data_sem/2){++++..}: > > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > [< none >] down_read+0x43/0xa0 kernel/locking/rwsem.c:23 > > > [< none >] ext4_map_blocks+0x2b4/0x5e0 fs/ext4/inode.c:540 > > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > > [< none >] ext4_quota_read+0xce/0x110 fs/ext4/super.c:5470 > > > [< none >] read_blk+0x4c/0x60 fs/quota/quota_tree.c:63 > > > [< none >] find_tree_dqentry+0x44/0x230 fs/quota/quota_tree.c:579 > > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > > [< inline >] find_dqentry fs/quota/quota_tree.c:602 > > > [< none >] qtree_read_dquot+0x12e/0x260 fs/quota/quota_tree.c:622 > > > [< none >] v2_read_dquot+0x2e/0x30 fs/quota/quota_v2.c:288 > > > [< none >] dquot_acquire+0xe3/0x120 fs/quota/dquot.c:411 > > > [< none >] ext4_acquire_dquot+0x68/0xa0 fs/ext4/super.c:5227 > > > [< none >] dqget+0x305/0x470 fs/quota/dquot.c:891 > > > [< none >] __dquot_initialize+0x151/0x290 fs/quota/dquot.c:1460 > > > [< none >] dquot_initialize+0x13/0x20 fs/quota/dquot.c:1511 > > > [< none >] ext4_mkdir+0x66/0x470 fs/ext4/namei.c:2645 > > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > > > > -> #0 (&s->s_dquot.dqio_mutex){+.+...}: > > > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > > > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > > > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > > > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > > > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > > > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > > > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > > > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > > > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > > > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > > > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > > > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > > > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > > > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > > > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > > > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > > > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > > > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > > > > other info that might help us debug this: > > > > > > Possible unsafe locking scenario: > > > > > > CPU0 CPU1 > > > ---- ---- > > > lock(&ei->i_data_sem/2); > > > lock(&s->s_dquot.dqio_mutex); > > > lock(&ei->i_data_sem/2); > > > lock(&s->s_dquot.dqio_mutex); > > > > > > *** DEADLOCK *** > > > > > > 5 locks held by mkdir/8458: > > > #0: (sb_writers#14){.+.+.+}, at: [< inline >] sb_start_write ./include/linux/fs.h:1504 > > > #0: (sb_writers#14){.+.+.+}, at: [<ffffffff812e1e24>] mnt_want_write+0x24/0x50 fs/namespace.c:388 > > > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [< inline >] inode_lock_nested ./include/linux/fs.h:731 > > > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [<ffffffff812cb5e3>] filename_create+0x83/0x160 fs/namei.c:3594 > > > #2: (jbd2_handle){++++..}, at: [<ffffffff813d31b2>] start_this_handle+0x112/0x450 fs/jbd2/transaction.c:361 > > > #3: (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > > > #4: (dquot_srcu){......}, at: [< inline >] srcu_read_lock ./include/linux/srcu.h:237 > > > #4: (dquot_srcu){......}, at: [<ffffffff8133c44b>] __dquot_alloc_space+0xbb/0x2b0 fs/quota/dquot.c:1668 > > > > > > stack backtrace: > > > CPU: 3 PID: 8458 Comm: mkdir Not tainted 4.11.0 #1 > > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 > > > Call Trace: > > > [< inline >] __dump_stack lib/dump_stack.c:16 > > > [< none >] dump_stack+0x86/0xc3 lib/dump_stack.c:52 > > > [< none >] print_circular_bug+0x1be/0x210 kernel/locking/lockdep.c:1204 > > > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > > > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > > > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > > > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > ?[< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > > > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > ?[< inline >] spin_unlock ./include/linux/spinlock.h:339 > > > ?[< none >] dquot_mark_dquot_dirty+0x57/0xc0 fs/quota/dquot.c:355 > > > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > > > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > > > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > > > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > > > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > > ?[< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > > > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > > > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > > > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > > > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > > > ?[< none >] __this_cpu_preempt_check+0x13/0x20 lib/smp_processor_id.c:62 > > > ?[< none >] __percpu_counter_add+0x85/0xb0 lib/percpu_counter.c:90 > > > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > > > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > > > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > > > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > > > ?[< inline >] lock_is_held ./include/linux/lockdep.h:348 > > > ?[< none >] rcu_read_lock_sched_held+0x4a/0x80 kernel/rcu/update.c:114 > > > ?[< inline >] trace_kmalloc ./include/trace/events/kmem.h:45 > > > ?[< none >] __kmalloc+0x2ce/0x300 mm/slub.c:3743 > > > ?[< inline >] kmalloc ./include/linux/slab.h:495 > > > ?[< inline >] kzalloc ./include/linux/slab.h:663 > > > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > > > ?[< inline >] kmalloc ./include/linux/slab.h:495 > > > ?[< inline >] kzalloc ./include/linux/slab.h:663 > > > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > > > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > > > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > > > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > > > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > > > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > > > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > RIP: 0033:0x7fb614c15947 > > > RSP: 002b:00007fff31be4938 EFLAGS: 00000216 ORIG_RAX: 0000000000000053 > > > RAX: ffffffffffffffda RBX: 00007fff31be4c48 RCX: 00007fb614c15947 > > > RDX: 0000000000000000 RSI: 00000000000001ff RDI: 00007fff31be6aa5 > > > RBP: 0000000000000003 R08: 00000000000001ff R09: 0000564258eadac0 > > > R10: 000056425b0a4060 R11: 0000000000000216 R12: 0000000000000000 > > > R13: 0000564258eadb00 R14: 0000000000000000 R15: 0000000000000000 > > -- > > Jan Kara <jack@suse.com> > > SUSE Labs, CR > -- > Jan Kara <jack@suse.com> > SUSE Labs, CR ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: lockdep splat with v4.11 and generic/386 2017-05-05 16:50 ` Darrick J. Wong @ 2017-05-09 8:17 ` Jan Kara 0 siblings, 0 replies; 5+ messages in thread From: Jan Kara @ 2017-05-09 8:17 UTC (permalink / raw) To: Darrick J. Wong; +Cc: Jan Kara, Ross Zwisler, linux-ext4, Theodore Ts'o On Fri 05-05-17 09:50:35, Darrick J. Wong wrote: > On Fri, May 05, 2017 at 10:49:50AM +0200, Jan Kara wrote: > > On Fri 05-05-17 09:59:23, Jan Kara wrote: > > > On Thu 04-05-17 13:38:38, Ross Zwisler wrote: > > > > I hit the following lockdep splat during some regression testing today, and > > > > was able to reproduce it on vanilla v4.11 without DAX. My test setup is big > > > > memmap PMEM device in a QEMU virtual machine, but I don't think that the block > > > > device is important. I was able to reproduce this easily by running > > > > generic/386 in a loop. Here's the failure: > > > > > > Thanks for report! This is false positive caused by a bug in our lockdep > > > annotation - locks on quota files (i_data_sem in this case) rank > > > differently than locks on normal files - specifically the lock ordering is > > > i_data_sem (normal file, directory, ...) -> dqio_mutex -> i_data_sem (quota > > > file). Now we do take care to tell lockdep about this by calling > > > lockdep_set_quota_inode() in fs/ext4/super.c for quota files. However we > > > don't return i_data_sem back to the normal locking class on freeing inode > > > and when quota file inode gets reused for something else, it has a wrong > > > locking class set which confuses lockdep. I'll send a fix. > > > > Hum, I have the fix implemented but how did you make that test work for > > ext4? For me it is not run because: > > > > xfs_quota binary does not support foreign filesystems > > > > and looking at xfs_quota source in the latest git, -f still is not > > supported... > > What git repo are you using? xfs_quota has had -f since xfsprogs 4.8. > > xfsprogs upstream lives at: > git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git > > (XFS moved off SGI infrastructure last October.) Ha! Good point. My git repo still points to SGI. I know the repo moved but didn't realize it could be the problem when looking at this :) Thanks! Honza > > > > FSTYP -- ext4 > > > > PLATFORM -- Linux/x86_64 lorwyn 4.11.0 > > > > MKFS_OPTIONS -- /dev/pmem0p2 > > > > MOUNT_OPTIONS -- -o acl,user_xattr -o context=system_u:object_r:root_t:s0 /dev/pmem0p2 /mnt/xfstests_scratch > > > > > > > > generic/386 1s ... 1s > > > > _check_dmesg: something found in dmesg (see /root/xfstests/results//generic/386.dmesg) > > > > Ran: generic/386 > > > > Failures: generic/386 > > > > Failed 1 of 1 tests > > > > > > > > Here's the lockdep splat, passed through kasan_symbolize.py: > > > > > > > > run fstests generic/386 at 2017-05-04 13:36:35 > > > > EXT4-fs (pmem0p2): mounted filesystem with ordered data mode. Opts: acl,user_xattr,quota > > > > > > > > ====================================================== > > > > [ INFO: possible circular locking dependency detected ] > > > > 4.11.0 #1 Not tainted > > > > ------------------------------------------------------- > > > > mkdir/8458 is trying to acquire lock: > > > > (&s->s_dquot.dqio_mutex){+.+...}, at: [<ffffffff8133a8bb>] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > > > > > but task is already holding lock: > > > > (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > > > > > > > > which lock already depends on the new lock. > > > > > > > > > > > > the existing dependency chain (in reverse order) is: > > > > > > > > -> #1 (&ei->i_data_sem/2){++++..}: > > > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > > [< none >] down_read+0x43/0xa0 kernel/locking/rwsem.c:23 > > > > [< none >] ext4_map_blocks+0x2b4/0x5e0 fs/ext4/inode.c:540 > > > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > > > [< none >] ext4_quota_read+0xce/0x110 fs/ext4/super.c:5470 > > > > [< none >] read_blk+0x4c/0x60 fs/quota/quota_tree.c:63 > > > > [< none >] find_tree_dqentry+0x44/0x230 fs/quota/quota_tree.c:579 > > > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > > > [< none >] find_tree_dqentry+0x1ad/0x230 fs/quota/quota_tree.c:590 > > > > [< inline >] find_dqentry fs/quota/quota_tree.c:602 > > > > [< none >] qtree_read_dquot+0x12e/0x260 fs/quota/quota_tree.c:622 > > > > [< none >] v2_read_dquot+0x2e/0x30 fs/quota/quota_v2.c:288 > > > > [< none >] dquot_acquire+0xe3/0x120 fs/quota/dquot.c:411 > > > > [< none >] ext4_acquire_dquot+0x68/0xa0 fs/ext4/super.c:5227 > > > > [< none >] dqget+0x305/0x470 fs/quota/dquot.c:891 > > > > [< none >] __dquot_initialize+0x151/0x290 fs/quota/dquot.c:1460 > > > > [< none >] dquot_initialize+0x13/0x20 fs/quota/dquot.c:1511 > > > > [< none >] ext4_mkdir+0x66/0x470 fs/ext4/namei.c:2645 > > > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > > > > > > -> #0 (&s->s_dquot.dqio_mutex){+.+...}: > > > > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > > > > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > > > > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > > > > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > > > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > > > > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > > > > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > > > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > > > > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > > > > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > > > > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > > > > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > > > > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > > > > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > > > > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > > > > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > > > > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > > > > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > > > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > > > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > > > > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > > > > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > > > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > > > > > > other info that might help us debug this: > > > > > > > > Possible unsafe locking scenario: > > > > > > > > CPU0 CPU1 > > > > ---- ---- > > > > lock(&ei->i_data_sem/2); > > > > lock(&s->s_dquot.dqio_mutex); > > > > lock(&ei->i_data_sem/2); > > > > lock(&s->s_dquot.dqio_mutex); > > > > > > > > *** DEADLOCK *** > > > > > > > > 5 locks held by mkdir/8458: > > > > #0: (sb_writers#14){.+.+.+}, at: [< inline >] sb_start_write ./include/linux/fs.h:1504 > > > > #0: (sb_writers#14){.+.+.+}, at: [<ffffffff812e1e24>] mnt_want_write+0x24/0x50 fs/namespace.c:388 > > > > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [< inline >] inode_lock_nested ./include/linux/fs.h:731 > > > > #1: (&type->i_mutex_dir_key#5/1){+.+.+.}, at: [<ffffffff812cb5e3>] filename_create+0x83/0x160 fs/namei.c:3594 > > > > #2: (jbd2_handle){++++..}, at: [<ffffffff813d31b2>] start_this_handle+0x112/0x450 fs/jbd2/transaction.c:361 > > > > #3: (&ei->i_data_sem/2){++++..}, at: [<ffffffff81371ba1>] ext4_map_blocks+0x151/0x5e0 fs/ext4/inode.c:612 > > > > #4: (dquot_srcu){......}, at: [< inline >] srcu_read_lock ./include/linux/srcu.h:237 > > > > #4: (dquot_srcu){......}, at: [<ffffffff8133c44b>] __dquot_alloc_space+0xbb/0x2b0 fs/quota/dquot.c:1668 > > > > > > > > stack backtrace: > > > > CPU: 3 PID: 8458 Comm: mkdir Not tainted 4.11.0 #1 > > > > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 > > > > Call Trace: > > > > [< inline >] __dump_stack lib/dump_stack.c:16 > > > > [< none >] dump_stack+0x86/0xc3 lib/dump_stack.c:52 > > > > [< none >] print_circular_bug+0x1be/0x210 kernel/locking/lockdep.c:1204 > > > > [< inline >] check_prev_add kernel/locking/lockdep.c:1830 > > > > [< inline >] check_prevs_add kernel/locking/lockdep.c:1940 > > > > [< inline >] validate_chain kernel/locking/lockdep.c:2267 > > > > [< none >] __lock_acquire+0x12c2/0x1450 kernel/locking/lockdep.c:3347 > > > > [< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > > ?[< none >] lock_acquire+0xea/0x1f0 kernel/locking/lockdep.c:3762 > > > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > [< inline >] __mutex_lock_common kernel/locking/mutex.c:756 > > > > [< none >] __mutex_lock+0x8d/0xa80 kernel/locking/mutex.c:893 > > > > ?[< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > ?[< inline >] spin_unlock ./include/linux/spinlock.h:339 > > > > ?[< none >] dquot_mark_dquot_dirty+0x57/0xc0 fs/quota/dquot.c:355 > > > > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > > > > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > > > > ?[< inline >] __ext4_journal_start fs/ext4/ext4_jbd2.h:318 > > > > ?[< none >] ext4_write_dquot+0x5c/0xa0 fs/ext4/super.c:5207 > > > > [< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > > > ?[< none >] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:908 > > > > [< none >] dquot_commit+0x2b/0xd0 fs/quota/dquot.c:453 > > > > [< none >] ext4_write_dquot+0x6f/0xa0 fs/ext4/super.c:5211 > > > > [< none >] ext4_mark_dquot_dirty+0x3f/0x60 fs/ext4/super.c:5262 > > > > [< inline >] mark_dquot_dirty fs/quota/dquot.c:337 > > > > [< inline >] mark_all_dquot_dirty fs/quota/dquot.c:369 > > > > [< none >] __dquot_alloc_space+0x275/0x2b0 fs/quota/dquot.c:1693 > > > > ?[< none >] __this_cpu_preempt_check+0x13/0x20 lib/smp_processor_id.c:62 > > > > ?[< none >] __percpu_counter_add+0x85/0xb0 lib/percpu_counter.c:90 > > > > [< inline >] dquot_alloc_space_nodirty ./include/linux/quotaops.h:284 > > > > [< inline >] dquot_alloc_space ./include/linux/quotaops.h:297 > > > > [< inline >] dquot_alloc_block ./include/linux/quotaops.h:321 > > > > [< none >] ext4_mb_new_blocks+0x113/0x1110 fs/ext4/mballoc.c:4487 > > > > ?[< inline >] lock_is_held ./include/linux/lockdep.h:348 > > > > ?[< none >] rcu_read_lock_sched_held+0x4a/0x80 kernel/rcu/update.c:114 > > > > ?[< inline >] trace_kmalloc ./include/trace/events/kmem.h:45 > > > > ?[< none >] __kmalloc+0x2ce/0x300 mm/slub.c:3743 > > > > ?[< inline >] kmalloc ./include/linux/slab.h:495 > > > > ?[< inline >] kzalloc ./include/linux/slab.h:663 > > > > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > > > > ?[< inline >] kmalloc ./include/linux/slab.h:495 > > > > ?[< inline >] kzalloc ./include/linux/slab.h:663 > > > > ?[< none >] ext4_find_extent+0x295/0x2d0 fs/ext4/extents.c:894 > > > > [< none >] ext4_ext_map_blocks+0xe2f/0x20d0 fs/ext4/extents.c:4478 > > > > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > > > > ?[< none >] ext4_map_blocks+0x331/0x5e0 fs/ext4/inode.c:571 > > > > [< none >] ext4_map_blocks+0x175/0x5e0 fs/ext4/inode.c:619 > > > > [< none >] ext4_getblk+0x51/0x1a0 fs/ext4/inode.c:949 > > > > [< none >] ext4_bread+0x22/0xc0 fs/ext4/inode.c:999 > > > > [< none >] ext4_append+0x4d/0xe0 fs/ext4/namei.c:64 > > > > [< inline >] ext4_init_new_dir fs/ext4/namei.c:2615 > > > > [< none >] ext4_mkdir+0x266/0x470 fs/ext4/namei.c:2662 > > > > [< none >] vfs_mkdir+0x119/0x1c0 fs/namei.c:3769 > > > > [< inline >] SYSC_mkdirat fs/namei.c:3792 > > > > [< inline >] SyS_mkdirat fs/namei.c:3776 > > > > [< inline >] SYSC_mkdir fs/namei.c:3803 > > > > [< none >] SyS_mkdir+0x7a/0xf0 fs/namei.c:3801 > > > > [< none >] entry_SYSCALL_64_fastpath+0x1f/0xc2 arch/x86/entry/entry_64.S:204 > > > > RIP: 0033:0x7fb614c15947 > > > > RSP: 002b:00007fff31be4938 EFLAGS: 00000216 ORIG_RAX: 0000000000000053 > > > > RAX: ffffffffffffffda RBX: 00007fff31be4c48 RCX: 00007fb614c15947 > > > > RDX: 0000000000000000 RSI: 00000000000001ff RDI: 00007fff31be6aa5 > > > > RBP: 0000000000000003 R08: 00000000000001ff R09: 0000564258eadac0 > > > > R10: 000056425b0a4060 R11: 0000000000000216 R12: 0000000000000000 > > > > R13: 0000564258eadb00 R14: 0000000000000000 R15: 0000000000000000 > > > -- > > > Jan Kara <jack@suse.com> > > > SUSE Labs, CR > > -- > > Jan Kara <jack@suse.com> > > SUSE Labs, CR -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-05-09 8:25 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-05-04 19:38 lockdep splat with v4.11 and generic/386 Ross Zwisler 2017-05-05 7:59 ` Jan Kara 2017-05-05 8:49 ` Jan Kara 2017-05-05 16:50 ` Darrick J. Wong 2017-05-09 8:17 ` Jan Kara
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).