vpsfreecz / vpsadminos

Host for Linux system containers based on NixOS, ZFS and LXC
https://vpsadminos.org
MIT License
155 stars 26 forks source link

Possible circular locking dependency in ZFS #37

Closed snajpa closed 1 year ago

snajpa commented 4 years ago
[   43.166794] ======================================================
[   43.166794] WARNING: possible circular locking dependency detected
[   43.166796] 5.7.8 #1-NixOS Tainted: G           OE    
[   43.166796] ------------------------------------------------------
[   43.166798] init/1211 is trying to acquire lock:
[   43.166799] ffff8e85b4b728b8 (&zp->z_lock){+.+.}-{3:3}, at: zfs_dirty_inode+0x12d/0x3a0 [zfs]
[   43.166918] 
[   43.166918] but task is already holding lock:
[   43.166919] ffff8e859a5a22f8 (&mm->mmap_sem#2){++++}-{3:3}, at: vm_mmap_pgoff+0xad/0x120
[   43.166925] 
[   43.166925] which lock already depends on the new lock.
[   43.166925] 
[   43.166925] 
[   43.166925] the existing dependency chain (in reverse order) is:
[   43.166926] 
[   43.166926] -> #8 (&mm->mmap_sem#2){++++}-{3:3}:
[   43.166931]        down_write+0x40/0x110
[   43.166933]        mpol_rebind_mm+0x1e/0x50
[   43.166935]        cpuset_attach+0x17f/0x230
[   43.166937]        cgroup_migrate_execute+0x404/0x4c0
[   43.166939]        cgroup_attach_task+0x238/0x3f0
[   43.166941]        __cgroup1_procs_write.constprop.0+0x109/0x150
[   43.166943]        cgroup_file_write+0x95/0x220
[   43.166945]        kernfs_fop_write+0xcf/0x1c0
[   43.166949]        vfs_write+0xde/0x1d0
[   43.166950]        ksys_write+0x68/0xe0
[   43.166954]        do_syscall_64+0x56/0x200
[   43.166957]        entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.166958] 
[   43.166958] -> #7 (&cpuset_rwsem){++++}-{0:0}:
[   43.166962]        percpu_down_write+0x44/0x130
[   43.166963]        cpuset_css_online+0x2b/0x3a0
[   43.166965]        online_css+0x29/0x90
[   43.166967]        cgroup_apply_control_enable+0x267/0x5c0
[   43.166969]        cgroup_mkdir+0x30d/0x520
[   43.166971]        kernfs_iop_mkdir+0x5a/0x80
[   43.166974]        vfs_mkdir+0x10d/0x1e0
[   43.166976]        do_mkdirat+0xec/0x120
[   43.166978]        do_syscall_64+0x56/0x200
[   43.166980]        entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.166981] 
[   43.166981] -> #6 (cpu_hotplug_lock){++++}-{0:0}:
[   43.166985]        cpus_read_lock+0x39/0xd0
[   43.166987]        kmem_cache_create_usercopy+0x28/0x220
[   43.166988]        kmem_cache_create+0x12/0x20
[   43.166991]        bioset_init+0x161/0x2c0
[   43.166995]        init_bio+0xa4/0xcd
[   43.166996]        do_one_initcall+0x5d/0x330
[   43.167000]        kernel_init_freeable+0x208/0x268
[   43.167003]        kernel_init+0xa/0x101
[   43.167005]        ret_from_fork+0x3a/0x50
[   43.167006] 
[   43.167006] -> #5 (bio_slab_lock){+.+.}-{3:3}:
[   43.167009]        __mutex_lock+0xaa/0x9c0
[   43.167010]        bioset_init+0xbc/0x2c0
[   43.167012]        __blk_alloc_queue+0x74/0x310
[   43.167015]        blk_mq_init_queue_data+0x1b/0x60
[   43.167019]        loop_add+0xfb/0x2a0 [loop]
[   43.167023]        HUF_fillDTableX4Level2+0x12f/0x130 [zstd_decompress]
[   43.167025]        do_one_initcall+0x5d/0x330
[   43.167027]        do_init_module+0x5c/0x230
[   43.167029]        load_module+0x2659/0x2890
[   43.167030]        __do_sys_init_module+0x164/0x190
[   43.167032]        do_syscall_64+0x56/0x200
[   43.167034]        entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.167035] 
[   43.167035] -> #4 (loop_ctl_mutex){+.+.}-{3:3}:
[   43.167042]        __mutex_lock+0xaa/0x9c0
[   43.167044]        lo_open+0x19/0x60 [loop]
[   43.167047]        __blkdev_get+0xed/0x580
[   43.167049]        blkdev_get+0x38/0x150
[   43.167051]        do_dentry_open+0x14c/0x3c0
[   43.167052]        path_openat+0x766/0xa50
[   43.167053]        do_filp_open+0x91/0x100
[   43.167055]        do_sys_openat2+0x215/0x2d0
[   43.167056]        do_sys_open+0x44/0x80
[   43.167058]        do_syscall_64+0x56/0x200
[   43.167060]        entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.167061] 
[   43.167061] -> #3 (&bdev->bd_mutex){+.+.}-{3:3}:
[   43.167064]        __mutex_lock+0xaa/0x9c0
[   43.167065]        __blkdev_get+0x7a/0x580
[   43.167067]        blkdev_get+0x85/0x150
[   43.167069]        blkdev_get_by_path+0x46/0x80
[   43.167110]        vdev_disk_open+0x209/0x5d0 [zfs]
[   43.167190]        vdev_open+0xa5/0x6d0 [zfs]
[   43.167269]        vdev_open_child+0x1e/0x40 [zfs]
[   43.167313]        taskq_thread+0x313/0x6d0 [spl]
[   43.167318]        kthread+0x130/0x170
[   43.167320]        ret_from_fork+0x3a/0x50
[   43.167322] 
[   43.167322] -> #2 (&vd->vd_lock){++++}-{3:3}:
[   43.167324]        down_read+0x41/0x200
[   43.167365]        vdev_disk_io_start+0x6b/0xb00 [zfs]
[   43.167448]        zio_vdev_io_start+0xed/0x2e0 [zfs]
[   43.167536]        zio_nowait+0xb2/0x170 [zfs]
[   43.167615]        vdev_mirror_io_start+0x90/0x180 [zfs]
[   43.167695]        zio_vdev_io_start+0x264/0x2e0 [zfs]
[   43.167775]        zio_nowait+0xb2/0x170 [zfs]
[   43.167841]        arc_read+0xcb1/0x1b50 [zfs]
[   43.167895]        dbuf_read_impl.constprop.0+0x467/0x9c0 [zfs]
[   43.167950]        dbuf_read+0x10a/0x750 [zfs]
[   43.168006]        dmu_buf_hold_by_dnode+0xd8/0x1b0 [zfs]
[   43.168075]        zap_get_leaf_byblk.isra.0+0x64/0x3c0 [zfs]
[   43.168154]        zap_deref_leaf+0xa1/0xf0 [zfs]
[   43.168233]        fzap_lookup+0x6f/0x140 [zfs]
[   43.168311]        zap_lookup_impl+0x5a/0x1c0 [zfs]
[   43.168390]        zap_lookup_norm+0x83/0xd0 [zfs]
[   43.168483]        zap_lookup+0x12/0x20 [zfs]
[   43.168583]        spa_dir_prop+0x37/0x80 [zfs]
[   43.168681]        spa_ld_trusted_config+0x4a/0x740 [zfs]
[   43.168771]        spa_ld_mos_with_trusted_config+0x2d/0x80 [zfs]
[   43.168864]        spa_load+0x82/0x13c0 [zfs]
[   43.168953]        spa_tryimport+0x145/0x5e0 [zfs]
[   43.169031]        zfs_ioc_pool_tryimport+0x63/0xc0 [zfs]
[   43.169111]        zfsdev_ioctl_common+0x6a0/0x830 [zfs]
[   43.169190]        zfsdev_ioctl+0x53/0xe0 [zfs]
[   43.169230]        ksys_ioctl+0x87/0xc0
[   43.169232]        __x64_sys_ioctl+0x16/0x20
[   43.169234]        do_syscall_64+0x56/0x200
[   43.169236]        entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.169237] 
[   43.169237] -> #1 (&zap->zap_rwlock){++++}-{3:3}:
[   43.169241]        down_write+0x40/0x110
[   43.169281]        zap_lockdir_impl+0x297/0x830 [zfs]
[   43.169359]        zap_lockdir+0x8c/0xb0 [zfs]
[   43.169438]        zap_add+0x51/0xa0 [zfs]
[   43.169524]        zfs_link_create+0x175/0x680 [zfs]
[   43.169603]        zfs_create+0x6fb/0x9d0 [zfs]
[   43.169682]        zpl_create+0xb4/0x180 [zfs]
[   43.169723]        lookup_open+0x53f/0x6b0
[   43.169724]        path_openat+0x2c1/0xa50
[   43.169726]        do_filp_open+0x91/0x100
[   43.169727]        do_sys_openat2+0x215/0x2d0
[   43.169728]        do_sys_open+0x44/0x80
[   43.169730]        do_syscall_64+0x56/0x200
[   43.169732]        entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.169734] 
[   43.169734] -> #0 (&zp->z_lock){+.+.}-{3:3}:
[   43.169737]        __lock_acquire+0x12c3/0x24f0
[   43.169738]        lock_acquire+0xad/0x390
[   43.169740]        __mutex_lock+0xaa/0x9c0
[   43.169780]        zfs_dirty_inode+0x12d/0x3a0 [zfs]
[   43.169858]        zpl_dirty_inode+0x25/0x40 [zfs]
[   43.169899]        __mark_inode_dirty+0x2c3/0x5d0
[   43.169900]        generic_update_time+0x9d/0xc0
[   43.169902]        touch_atime+0xa1/0xd0
[   43.169904]        generic_file_mmap+0x3f/0x60
[   43.169944]        zpl_mmap+0x7e/0x160 [zfs]
[   43.169985]        mmap_region+0x3f6/0x640
[   43.169986]        do_mmap+0x36d/0x570
[   43.169988]        vm_mmap_pgoff+0xd7/0x120
[   43.169990]        elf_map+0x8a/0x120
[   43.169992]        load_elf_binary+0x5e5/0x16c0
[   43.169995]        search_binary_handler+0x71/0x240
[   43.169997]        __do_execve_file.isra.0+0x615/0xab0
[   43.169998]        __x64_sys_execve+0x35/0x40
[   43.170000]        do_syscall_64+0x56/0x200
[   43.170003]        entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.170004] 
[   43.170004] other info that might help us debug this:
[   43.170004] 
[   43.170005] Chain exists of:
[   43.170005]   &zp->z_lock --> &cpuset_rwsem --> &mm->mmap_sem#2
[   43.170005] 
[   43.170017]  Possible unsafe locking scenario:
[   43.170017] 
[   43.170018]        CPU0                    CPU1
[   43.170018]        ----                    ----
[   43.170019]   lock(&mm->mmap_sem#2);
[   43.170020]                                lock(&cpuset_rwsem);
[   43.170021]                                lock(&mm->mmap_sem#2);
[   43.170023]   lock(&zp->z_lock);
[   43.170024] 
[   43.170024]  *** DEADLOCK ***
[   43.170024] 
[   43.170025] 2 locks held by init/1211:
[   43.170025]  #0: ffff8e859a5a22f8 (&mm->mmap_sem#2){++++}-{3:3}, at: vm_mmap_pgoff+0xad/0x120
[   43.170029]  #1: ffff8e859797d480 (sb_writers#12){.+.+}-{0:0}, at: touch_atime+0x60/0xd0
[   43.170033] 
[   43.170033] stack backtrace:
[   43.170035] CPU: 0 PID: 1 Comm: init Tainted: G           OE     5.7.8 #1-NixOS
[   43.170037] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
[   43.170038] Call Trace:
[   43.170043]  dump_stack+0x8f/0xd0
[   43.170046]  check_noncircular+0x169/0x180
[   43.170050]  __lock_acquire+0x12c3/0x24f0
[   43.170052]  ? __lock_acquire+0x156b/0x24f0
[   43.170055]  lock_acquire+0xad/0x390
[   43.170095]  ? zfs_dirty_inode+0x12d/0x3a0 [zfs]
[   43.170138]  __mutex_lock+0xaa/0x9c0
[   43.170178]  ? zfs_dirty_inode+0x12d/0x3a0 [zfs]
[   43.170257]  ? zfs_dirty_inode+0x12d/0x3a0 [zfs]
[   43.170297]  ? _raw_spin_unlock+0x29/0x40
[   43.170329]  ? dmu_tx_assign+0x37d/0x5f0 [zfs]
[   43.170401]  ? zfs_dirty_inode+0x12d/0x3a0 [zfs]
[   43.170479]  zfs_dirty_inode+0x12d/0x3a0 [zfs]
[   43.170526]  ? lock_acquire+0xad/0x390
[   43.170529]  ? kvm_clock_read+0x14/0x30
[   43.170531]  ? kvm_sched_clock_read+0x5/0x10
[   43.170534]  ? sched_clock+0x5/0x10
[   43.170537]  ? sched_clock_cpu+0x10/0xd0
[   43.170578]  zpl_dirty_inode+0x25/0x40 [zfs]
[   43.170619]  __mark_inode_dirty+0x2c3/0x5d0
[   43.170621]  generic_update_time+0x9d/0xc0
[   43.170623]  touch_atime+0xa1/0xd0
[   43.170625]  generic_file_mmap+0x3f/0x60
[   43.170665]  zpl_mmap+0x7e/0x160 [zfs]
[   43.170706]  mmap_region+0x3f6/0x640
[   43.170709]  do_mmap+0x36d/0x570
[   43.170712]  vm_mmap_pgoff+0xd7/0x120
[   43.170716]  elf_map+0x8a/0x120
[   43.170719]  load_elf_binary+0x5e5/0x16c0
[   43.170722]  ? cyc2ns_read_end+0x1/0x10
[   43.170726]  search_binary_handler+0x71/0x240
[   43.170728]  __do_execve_file.isra.0+0x615/0xab0
[   43.170732]  __x64_sys_execve+0x35/0x40
[   43.170734]  do_syscall_64+0x56/0x200
[   43.170737]  entry_SYSCALL_64_after_hwframe+0x49/0xb3
[   43.170740] RIP: 0033:0x7fa8102c5ea7
[   43.170746] Code: Bad RIP value.
[   43.170747] RSP: 002b:00007ffe7c6199e8 EFLAGS: 00000202 ORIG_RAX: 000000000000003b
[   43.170749] RAX: ffffffffffffffda RBX: 0000000000bd0b40 RCX: 00007fa8102c5ea7
[   43.170750] RDX: 0000000000bd8790 RSI: 0000000000bd0b20 RDI: 0000000000bd0b40
[   43.170751] RBP: 00007ffe7c619a40 R08: 0000000000000000 R09: 0000000000000000
[   43.170752] R10: 0000000000bdc200 R11: 0000000000000202 R12: 0000000000bd0b20
[   43.170753] R13: 0000000000bd8790 R14: 0000000000000001 R15: 0000000000bcdb50