Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1522462 > unrolled thread

list/count mismatch warning in rcu_do_batch (possibly triggered by a btrfs bug).

Started byNikolay Borisov <kernel@kyup.com>
First post2016-11-15 10:00 +0100
Last post2016-11-15 15:20 +0100
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  list/count mismatch warning in rcu_do_batch (possibly triggered by a  btrfs bug). Nikolay Borisov <kernel@kyup.com> - 2016-11-15 10:00 +0100
    Re: list/count mismatch warning in rcu_do_batch (possibly triggered  by a btrfs bug). "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-11-15 15:20 +0100

#1522462 — list/count mismatch warning in rcu_do_batch (possibly triggered by a btrfs bug).

FromNikolay Borisov <kernel@kyup.com>
Date2016-11-15 10:00 +0100
Subjectlist/count mismatch warning in rcu_do_batch (possibly triggered by a btrfs bug).
Message-ID<sDHKV-2Fe-19@gated-at.bofh.it>
Hello Paul, 

I'm currently going through a crashdump which seems to indicate some 
memory corruption, possibly triggered by btrfs.  I have several 
entries such as : 

[1626691.276310] BUG: Bad page state in process fstrim  pfn:230ee7
[1626691.276488] page:ffffea0008c3b9c0 count:0 mapcount:0 mapping:ffff8801106439c8 index:0x22d3
[1626691.276774] flags: 0x2fffc000000000c(referenced|uptodate)
[1626691.277084] page dumped because: non-NULL mapping
[1626691.280607] CPU: 8 PID: 303 Comm: fstrim Tainted: P        W  O    4.4.26-clouder1 #3
[1626691.280885] Hardware name: Supermicro X9DRD-iF/LF/X9DRD-iF, BIOS 3.0b 12/05/2013
[1626691.281163]  0000000000000000 ffff8803b1b97a10 ffffffff812f4b79 ffffea0008c3b9c0
[1626691.281623]  ffffffff81a0b20e ffff8803b1b97a38 ffffffff8112dcc0 0000000000000000
[1626691.282085]  0000000000000001 ffff88047fffa000 ffff8803b1b97a88 ffffffff8112e7b6
[1626691.282554] Call Trace:
[1626691.282727]  [<ffffffff812f4b79>] dump_stack+0x67/0x9e
[1626691.282899]  [<ffffffff8112dcc0>] bad_page.part.64+0xb0/0x100
[1626691.283071]  [<ffffffff8112e7b6>] free_pages_prepare+0x2f6/0x310
[1626691.283244]  [<ffffffff81130755>] free_hot_cold_page+0x35/0x1f0
[1626691.283416]  [<ffffffff81191ea9>] ? mem_cgroup_uncharge+0x29/0x30
[1626691.283588]  [<ffffffff811387b8>] ? __page_cache_release+0x28/0x150
[1626691.283760]  [<ffffffff81138fc0>] put_page+0x40/0x50
[1626691.283956]  [<ffffffffa0732d8b>] btrfs_release_extent_buffer_page+0x6b/0x100 [btrfs]
[1626691.284259]  [<ffffffffa0732e6d>] release_extent_buffer+0x4d/0xc0 [btrfs]
[1626691.284444]  [<ffffffffa073332b>] free_extent_buffer+0x4b/0x90 [btrfs]
[1626691.284626]  [<ffffffffa06e5d57>] btrfs_release_path+0x27/0x90 [btrfs]
[1626691.284814]  [<ffffffffa0752732>] __lookup_free_space_inode+0xc2/0x150 [btrfs]
[1626691.285113]  [<ffffffffa07542cd>] lookup_free_space_inode+0x5d/0xd0 [btrfs]
[1626691.285302]  [<ffffffffa0755871>] load_free_space_cache+0x81/0x1c0 [btrfs]
[1626691.285486]  [<ffffffffa06f18d8>] cache_block_group+0x1b8/0x3b0 [btrfs]
[1626691.285660]  [<ffffffff81094580>] ? wait_woken+0xb0/0xb0
[1626691.285842]  [<ffffffffa070062b>] btrfs_trim_fs+0xdb/0x3d0 [btrfs]
[1626691.286017]  [<ffffffff811a358d>] ? terminate_walk+0x6d/0xe0
[1626691.286189]  [<ffffffff810777a2>] ? __might_sleep+0x52/0xb0
[1626691.286375]  [<ffffffffa0741d50>] btrfs_ioctl_fitrim+0x130/0x180 [btrfs]
[1626691.286561]  [<ffffffffa0749126>] btrfs_ioctl+0x1276/0x2710 [btrfs]
[1626691.286734]  [<ffffffff811a94e2>] ? do_filp_open+0x92/0xe0
[1626691.286905]  [<ffffffff810777a2>] ? __might_sleep+0x52/0xb0
[1626691.287078]  [<ffffffff811ac6bf>] do_vfs_ioctl+0x30f/0x560
[1626691.287248]  [<ffffffff811a8633>] ? putname+0x53/0x60
[1626691.287420]  [<ffffffff811ac989>] SyS_ioctl+0x79/0x90
[1626691.287591]  [<ffffffff8161531b>] entry_SYSCALL_64_fastpath+0x16/0x6e

But eventually the following warning is triggered: 

[1626691.326167] ------------[ cut here ]------------
[1626691.326344] WARNING: CPU: 1 PID: 17122 at kernel/rcu/tree.c:2733 rcu_process_callbacks+0x5e2/0x620()
[1626691.329962] CPU: 1 PID: 17122 Comm: btrfs-transacti Tainted: P    B   W  O    4.4.26-clouder1 #3
[1626691.330255] Hardware name: Supermicro X9DRD-iF/LF/X9DRD-iF, BIOS 3.0b 12/05/2013
[1626691.330546]  0000000000000000 ffff88047fc23e68 ffffffff812f4b79 0000000000000000
[1626691.331023]  ffffffff81a04a61 ffff88047fc23ea0 ffffffff81052bd6 ffffffff81c40280
[1626691.331504]  ffff88047fc35d38 0000000000000000 0000000000000005 ffff88047fc35d00
[1626691.331978] Call Trace:
[1626691.332146]  <IRQ>  [<ffffffff812f4b79>] dump_stack+0x67/0x9e
[1626691.332373]  [<ffffffff81052bd6>] warn_slowpath_common+0x86/0xc0
[1626691.332548]  [<ffffffff81052cca>] warn_slowpath_null+0x1a/0x20
[1626691.332723]  [<ffffffff810ad752>] rcu_process_callbacks+0x5e2/0x620
[1626691.332898]  [<ffffffff81057447>] __do_softirq+0x147/0x310
[1626691.333072]  [<ffffffff8105775f>] irq_exit+0x5f/0x70
[1626691.333246]  [<ffffffff81617902>] smp_apic_timer_interrupt+0x42/0x50
[1626691.333422]  [<ffffffff81616069>] apic_timer_interrupt+0x89/0x90
[1626691.333591]  <EOI>  [<ffffffff81311585>] ? __crc32c_le+0x65/0x110
[1626691.333814]  [<ffffffff812c0877>] chksum_update+0x17/0x20
[1626691.333986]  [<ffffffff812b24f6>] crypto_shash_update+0x36/0x100
[1626691.334186]  [<ffffffffa0785375>] btrfs_crc32c+0x55/0x70 [btrfs]
[1626691.334374]  [<ffffffffa073b94e>] ? __btrfs_map_block+0x61e/0x10f0 [btrfs]
[1626691.334560]  [<ffffffffa070806b>] csum_tree_block+0x6b/0x180 [btrfs]
[1626691.334735]  [<ffffffff8112bc1f>] ? mempool_alloc+0x5f/0x150
[1626691.334906]  [<ffffffff8112bb45>] ? mempool_alloc_slab+0x15/0x20
[1626691.335091]  [<ffffffffa0708481>] btree_csum_one_bio.isra.41+0xc1/0xd0 [btrfs]
[1626691.335389]  [<ffffffffa070876d>] btree_submit_bio_hook+0x4d/0x110 [btrfs]
[1626691.335577]  [<ffffffffa072c2ee>] submit_one_bio+0x6e/0xa0 [btrfs]
[1626691.335762]  [<ffffffffa072ff00>] submit_extent_page+0xa0/0x230 [btrfs]
[1626691.335949]  [<ffffffffa0730205>] write_one_eb.isra.36+0x175/0x200 [btrfs]
[1626691.336137]  [<ffffffffa072c350>] ? end_extent_buffer_writeback+0x30/0x30 [btrfs]
[1626691.336438]  [<ffffffffa0733682>] btree_write_cache_pages+0x312/0x400 [btrfs]
[1626691.336738]  [<ffffffffa070752d>] btree_writepages+0x5d/0x70 [btrfs]
[1626691.336912]  [<ffffffff8113735e>] do_writepages+0x1e/0x30
[1626691.337082]  [<ffffffff8112a66a>] __filemap_fdatawrite_range+0xaa/0xf0
[1626691.337255]  [<ffffffff8112a773>] filemap_fdatawrite_range+0x13/0x20
[1626691.337440]  [<ffffffffa070fbbc>] btrfs_write_marked_extents+0x10c/0x130 [btrfs]
[1626691.337733]  [<ffffffffa0786150>] btrfs_write_and_wait_transaction.isra.22+0x49/0x90 [btrfs]
[1626691.338025]  [<ffffffffa07107eb>] btrfs_commit_transaction+0x7db/0xa60 [btrfs]
[1626691.338313]  [<ffffffffa07107eb>] ? btrfs_commit_transaction+0x7db/0xa60 [btrfs]
[1626691.338600]  [<ffffffffa0710b0a>] ? start_transaction+0x9a/0x4e0 [btrfs]
[1626691.338780]  [<ffffffffa070b6d8>] transaction_kthread+0x218/0x280 [btrfs]
[1626691.338958]  [<ffffffffa070b4c0>] ? btrfs_cleanup_transaction+0x590/0x590 [btrfs]
[1626691.339242]  [<ffffffff810717bf>] kthread+0xef/0x110
[1626691.339412]  [<ffffffff810716d0>] ? kthread_park+0x60/0x60
[1626691.339585]  [<ffffffff816156bf>] ret_from_fork+0x3f/0x70
[1626691.339755]  [<ffffffff810716d0>] ? kthread_park+0x60/0x60
[1626691.339924] ---[ end trace dacbbac64b357f79 ]---

That warning is this code in rcu_do_batch: 

WARN_ON_ONCE((rdp->nxtlist == NULL) != (rdp->qlen == 0));

Eventually the machines crashes in kmem_cache_alloc: 

[1626694.130460] BUG: unable to handle kernel paging request at 00000000039ac000
[1626694.130731] IP: [<ffffffff8117e3d7>] kmem_cache_alloc+0x77/0x220
[1626694.130954] PGD 29b86b067 PUD 38d8bd067 PMD 0 
[1626694.131260] Oops: 0000 [#1] SMP 
[1626694.134847] CPU: 1 PID: 731 Comm: rsync Tainted: P    B   W  O    4.4.26-clouder1 #3
[1626694.135135] Hardware name: Supermicro X9DRD-iF/LF/X9DRD-iF, BIOS 3.0b 12/05/2013
[1626694.135422] task: ffff88027bdb9b80 ti: ffff8801de078000 task.ti: ffff8801de078000
[1626694.135706] RIP: 0010:[<ffffffff8117e3d7>]  [<ffffffff8117e3d7>] kmem_cache_alloc+0x77/0x220
[1626694.136041] RSP: 0018:ffff8801de07b900  EFLAGS: 00010282
[1626694.136210] RAX: 0000000000000000 RBX: 0000000002408840 RCX: 000000000089da3e
[1626694.136499] RDX: 000000000089da3d RSI: 0000000000000507 RDI: ffffffff81a0ce11
[1626694.136787] RBP: ffff8801de07b930 R08: 000060fb80008b60 R09: 00000000039ac000
[1626694.137071] R10: ffff8803d1ec3520 R11: 0000000000000000 R12: 0000000002408840
[1626694.139976] R13: ffffffffa072c73a R14: ffff8803eb6d1900 R15: ffff8803eb6d1900
[1626694.140263] FS:  00007fd7a4a38700(0000) GS:ffff88047fc20000(0000) knlGS:0000000000000000
[1626694.140562] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[1626694.140736] CR2: 00000000039ac000 CR3: 000000039aec6000 CR4: 00000000000406e0
[1626694.141027] Stack:
[1626694.141193]  ffff8801de07b900 ffff8801e5ffc000 0000000000004000 ffff8801e5ffc000
[1626694.141670]  0000000003990000 0000000000004000 ffff8801de07b960 ffffffffa072c73a
[1626694.142139]  ffff8801e5ffc000 0000000000000000 0000000003990000 ffff8801f7bdd908
[1626694.142608] Call Trace:
[1626694.142799]  [<ffffffffa072c73a>] __alloc_extent_buffer+0x2a/0xe0 [btrfs]
[1626694.142988]  [<ffffffffa0732fe7>] alloc_extent_buffer+0x67/0x360 [btrfs]
[1626694.143175]  [<ffffffffa0708a00>] read_tree_block+0x20/0x70 [btrfs]
[1626694.143357]  [<ffffffffa06e8899>] read_block_for_search.isra.32+0x129/0x340 [btrfs]
[1626694.143657]  [<ffffffffa06eaa01>] btrfs_search_slot+0x3e1/0x9d0 [btrfs]
[1626694.143830]  [<ffffffff811b2da5>] ? inode_init_always+0x105/0x1b0
[1626694.144014]  [<ffffffffa07057bf>] btrfs_lookup_inode+0x2f/0xa0 [btrfs]
[1626694.144202]  [<ffffffffa071cb07>] btrfs_iget+0xd7/0x6a0 [btrfs]
[1626694.144385]  [<ffffffffa071d894>] btrfs_lookup_dentry+0x3e4/0x530 [btrfs]
[1626694.144570]  [<ffffffffa071d9f2>] btrfs_lookup+0x12/0x40 [btrfs]
[1626694.144743]  [<ffffffff811a2e6d>] lookup_real+0x1d/0x60
[1626694.144912]  [<ffffffff811a31e3>] __lookup_hash+0x33/0x40
[1626694.145084]  [<ffffffff811a5b72>] walk_component+0x212/0x4e0
[1626694.145255]  [<ffffffff811a649d>] path_lookupat+0x5d/0x110
[1626694.145427]  [<ffffffff811a89ba>] filename_lookup+0x9a/0x110
[1626694.145614]  [<ffffffffa0765bcd>] ? btrfs_delayed_update_inode+0x14d/0x4e0 [btrfs]
[1626694.145902]  [<ffffffff811a8677>] ? getname_flags+0x37/0x1a0
[1626694.146073]  [<ffffffff8117e51a>] ? kmem_cache_alloc+0x1ba/0x220
[1626694.146245]  [<ffffffff811a8677>] ? getname_flags+0x37/0x1a0
[1626694.146416]  [<ffffffff811a8ae6>] user_path_at_empty+0x36/0x40
[1626694.146588]  [<ffffffff8119e0e3>] vfs_fstatat+0x53/0xa0
[1626694.146758]  [<ffffffff8119e5d2>] SYSC_newlstat+0x22/0x40
[1626694.146930]  [<ffffffff8119e7ee>] SyS_newlstat+0xe/0x10
[1626694.147102]  [<ffffffff8161531b>] entry_SYSCALL_64_fastpath+0x16/0x6e

I know most of this is out of your area of expertise but what I'm hoping is that the 
rcu corruption at least point in the right direction as to the root cause. Under what 
conditions is it "expected" to have list/count mismatch when running the rcu callbacks?
Is it plausible that a memory corruption, induced by btrfs can have such an effect on 
core RCU data structures? So what exactly does the warning mean? 

Regards, 
Nikolay 

[toc] | [next] | [standalone]


#1522761 — Re: list/count mismatch warning in rcu_do_batch (possibly triggered by a btrfs bug).

From"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Date2016-11-15 15:20 +0100
SubjectRe: list/count mismatch warning in rcu_do_batch (possibly triggered by a btrfs bug).
Message-ID<sDMKC-621-11@gated-at.bofh.it>
In reply to#1522462
On Tue, Nov 15, 2016 at 10:53:15AM +0200, Nikolay Borisov wrote:
> Hello Paul, 
> 
> I'm currently going through a crashdump which seems to indicate some 
> memory corruption, possibly triggered by btrfs.  I have several 
> entries such as : 
> 
> [1626691.276310] BUG: Bad page state in process fstrim  pfn:230ee7
> [1626691.276488] page:ffffea0008c3b9c0 count:0 mapcount:0 mapping:ffff8801106439c8 index:0x22d3
> [1626691.276774] flags: 0x2fffc000000000c(referenced|uptodate)
> [1626691.277084] page dumped because: non-NULL mapping
> [1626691.280607] CPU: 8 PID: 303 Comm: fstrim Tainted: P        W  O    4.4.26-clouder1 #3
> [1626691.280885] Hardware name: Supermicro X9DRD-iF/LF/X9DRD-iF, BIOS 3.0b 12/05/2013
> [1626691.281163]  0000000000000000 ffff8803b1b97a10 ffffffff812f4b79 ffffea0008c3b9c0
> [1626691.281623]  ffffffff81a0b20e ffff8803b1b97a38 ffffffff8112dcc0 0000000000000000
> [1626691.282085]  0000000000000001 ffff88047fffa000 ffff8803b1b97a88 ffffffff8112e7b6
> [1626691.282554] Call Trace:
> [1626691.282727]  [<ffffffff812f4b79>] dump_stack+0x67/0x9e
> [1626691.282899]  [<ffffffff8112dcc0>] bad_page.part.64+0xb0/0x100
> [1626691.283071]  [<ffffffff8112e7b6>] free_pages_prepare+0x2f6/0x310
> [1626691.283244]  [<ffffffff81130755>] free_hot_cold_page+0x35/0x1f0
> [1626691.283416]  [<ffffffff81191ea9>] ? mem_cgroup_uncharge+0x29/0x30
> [1626691.283588]  [<ffffffff811387b8>] ? __page_cache_release+0x28/0x150
> [1626691.283760]  [<ffffffff81138fc0>] put_page+0x40/0x50
> [1626691.283956]  [<ffffffffa0732d8b>] btrfs_release_extent_buffer_page+0x6b/0x100 [btrfs]
> [1626691.284259]  [<ffffffffa0732e6d>] release_extent_buffer+0x4d/0xc0 [btrfs]
> [1626691.284444]  [<ffffffffa073332b>] free_extent_buffer+0x4b/0x90 [btrfs]
> [1626691.284626]  [<ffffffffa06e5d57>] btrfs_release_path+0x27/0x90 [btrfs]
> [1626691.284814]  [<ffffffffa0752732>] __lookup_free_space_inode+0xc2/0x150 [btrfs]
> [1626691.285113]  [<ffffffffa07542cd>] lookup_free_space_inode+0x5d/0xd0 [btrfs]
> [1626691.285302]  [<ffffffffa0755871>] load_free_space_cache+0x81/0x1c0 [btrfs]
> [1626691.285486]  [<ffffffffa06f18d8>] cache_block_group+0x1b8/0x3b0 [btrfs]
> [1626691.285660]  [<ffffffff81094580>] ? wait_woken+0xb0/0xb0
> [1626691.285842]  [<ffffffffa070062b>] btrfs_trim_fs+0xdb/0x3d0 [btrfs]
> [1626691.286017]  [<ffffffff811a358d>] ? terminate_walk+0x6d/0xe0
> [1626691.286189]  [<ffffffff810777a2>] ? __might_sleep+0x52/0xb0
> [1626691.286375]  [<ffffffffa0741d50>] btrfs_ioctl_fitrim+0x130/0x180 [btrfs]
> [1626691.286561]  [<ffffffffa0749126>] btrfs_ioctl+0x1276/0x2710 [btrfs]
> [1626691.286734]  [<ffffffff811a94e2>] ? do_filp_open+0x92/0xe0
> [1626691.286905]  [<ffffffff810777a2>] ? __might_sleep+0x52/0xb0
> [1626691.287078]  [<ffffffff811ac6bf>] do_vfs_ioctl+0x30f/0x560
> [1626691.287248]  [<ffffffff811a8633>] ? putname+0x53/0x60
> [1626691.287420]  [<ffffffff811ac989>] SyS_ioctl+0x79/0x90
> [1626691.287591]  [<ffffffff8161531b>] entry_SYSCALL_64_fastpath+0x16/0x6e
> 
> But eventually the following warning is triggered: 
> 
> [1626691.326167] ------------[ cut here ]------------
> [1626691.326344] WARNING: CPU: 1 PID: 17122 at kernel/rcu/tree.c:2733 rcu_process_callbacks+0x5e2/0x620()
> [1626691.329962] CPU: 1 PID: 17122 Comm: btrfs-transacti Tainted: P    B   W  O    4.4.26-clouder1 #3
> [1626691.330255] Hardware name: Supermicro X9DRD-iF/LF/X9DRD-iF, BIOS 3.0b 12/05/2013
> [1626691.330546]  0000000000000000 ffff88047fc23e68 ffffffff812f4b79 0000000000000000
> [1626691.331023]  ffffffff81a04a61 ffff88047fc23ea0 ffffffff81052bd6 ffffffff81c40280
> [1626691.331504]  ffff88047fc35d38 0000000000000000 0000000000000005 ffff88047fc35d00
> [1626691.331978] Call Trace:
> [1626691.332146]  <IRQ>  [<ffffffff812f4b79>] dump_stack+0x67/0x9e
> [1626691.332373]  [<ffffffff81052bd6>] warn_slowpath_common+0x86/0xc0
> [1626691.332548]  [<ffffffff81052cca>] warn_slowpath_null+0x1a/0x20
> [1626691.332723]  [<ffffffff810ad752>] rcu_process_callbacks+0x5e2/0x620
> [1626691.332898]  [<ffffffff81057447>] __do_softirq+0x147/0x310
> [1626691.333072]  [<ffffffff8105775f>] irq_exit+0x5f/0x70
> [1626691.333246]  [<ffffffff81617902>] smp_apic_timer_interrupt+0x42/0x50
> [1626691.333422]  [<ffffffff81616069>] apic_timer_interrupt+0x89/0x90
> [1626691.333591]  <EOI>  [<ffffffff81311585>] ? __crc32c_le+0x65/0x110
> [1626691.333814]  [<ffffffff812c0877>] chksum_update+0x17/0x20
> [1626691.333986]  [<ffffffff812b24f6>] crypto_shash_update+0x36/0x100
> [1626691.334186]  [<ffffffffa0785375>] btrfs_crc32c+0x55/0x70 [btrfs]
> [1626691.334374]  [<ffffffffa073b94e>] ? __btrfs_map_block+0x61e/0x10f0 [btrfs]
> [1626691.334560]  [<ffffffffa070806b>] csum_tree_block+0x6b/0x180 [btrfs]
> [1626691.334735]  [<ffffffff8112bc1f>] ? mempool_alloc+0x5f/0x150
> [1626691.334906]  [<ffffffff8112bb45>] ? mempool_alloc_slab+0x15/0x20
> [1626691.335091]  [<ffffffffa0708481>] btree_csum_one_bio.isra.41+0xc1/0xd0 [btrfs]
> [1626691.335389]  [<ffffffffa070876d>] btree_submit_bio_hook+0x4d/0x110 [btrfs]
> [1626691.335577]  [<ffffffffa072c2ee>] submit_one_bio+0x6e/0xa0 [btrfs]
> [1626691.335762]  [<ffffffffa072ff00>] submit_extent_page+0xa0/0x230 [btrfs]
> [1626691.335949]  [<ffffffffa0730205>] write_one_eb.isra.36+0x175/0x200 [btrfs]
> [1626691.336137]  [<ffffffffa072c350>] ? end_extent_buffer_writeback+0x30/0x30 [btrfs]
> [1626691.336438]  [<ffffffffa0733682>] btree_write_cache_pages+0x312/0x400 [btrfs]
> [1626691.336738]  [<ffffffffa070752d>] btree_writepages+0x5d/0x70 [btrfs]
> [1626691.336912]  [<ffffffff8113735e>] do_writepages+0x1e/0x30
> [1626691.337082]  [<ffffffff8112a66a>] __filemap_fdatawrite_range+0xaa/0xf0
> [1626691.337255]  [<ffffffff8112a773>] filemap_fdatawrite_range+0x13/0x20
> [1626691.337440]  [<ffffffffa070fbbc>] btrfs_write_marked_extents+0x10c/0x130 [btrfs]
> [1626691.337733]  [<ffffffffa0786150>] btrfs_write_and_wait_transaction.isra.22+0x49/0x90 [btrfs]
> [1626691.338025]  [<ffffffffa07107eb>] btrfs_commit_transaction+0x7db/0xa60 [btrfs]
> [1626691.338313]  [<ffffffffa07107eb>] ? btrfs_commit_transaction+0x7db/0xa60 [btrfs]
> [1626691.338600]  [<ffffffffa0710b0a>] ? start_transaction+0x9a/0x4e0 [btrfs]
> [1626691.338780]  [<ffffffffa070b6d8>] transaction_kthread+0x218/0x280 [btrfs]
> [1626691.338958]  [<ffffffffa070b4c0>] ? btrfs_cleanup_transaction+0x590/0x590 [btrfs]
> [1626691.339242]  [<ffffffff810717bf>] kthread+0xef/0x110
> [1626691.339412]  [<ffffffff810716d0>] ? kthread_park+0x60/0x60
> [1626691.339585]  [<ffffffff816156bf>] ret_from_fork+0x3f/0x70
> [1626691.339755]  [<ffffffff810716d0>] ? kthread_park+0x60/0x60
> [1626691.339924] ---[ end trace dacbbac64b357f79 ]---
> 
> That warning is this code in rcu_do_batch: 
> 
> WARN_ON_ONCE((rdp->nxtlist == NULL) != (rdp->qlen == 0));

This could be caused by memory corruption or by a double-free bug
involving one of the call_rcu() functions.

CONFIG_DEBUG_OBJECTS_RCU_HEAD=y would check for a call_rcu() double-free
bug.

> Eventually the machines crashes in kmem_cache_alloc: 
> 
> [1626694.130460] BUG: unable to handle kernel paging request at 00000000039ac000
> [1626694.130731] IP: [<ffffffff8117e3d7>] kmem_cache_alloc+0x77/0x220
> [1626694.130954] PGD 29b86b067 PUD 38d8bd067 PMD 0 
> [1626694.131260] Oops: 0000 [#1] SMP 
> [1626694.134847] CPU: 1 PID: 731 Comm: rsync Tainted: P    B   W  O    4.4.26-clouder1 #3
> [1626694.135135] Hardware name: Supermicro X9DRD-iF/LF/X9DRD-iF, BIOS 3.0b 12/05/2013
> [1626694.135422] task: ffff88027bdb9b80 ti: ffff8801de078000 task.ti: ffff8801de078000
> [1626694.135706] RIP: 0010:[<ffffffff8117e3d7>]  [<ffffffff8117e3d7>] kmem_cache_alloc+0x77/0x220
> [1626694.136041] RSP: 0018:ffff8801de07b900  EFLAGS: 00010282
> [1626694.136210] RAX: 0000000000000000 RBX: 0000000002408840 RCX: 000000000089da3e
> [1626694.136499] RDX: 000000000089da3d RSI: 0000000000000507 RDI: ffffffff81a0ce11
> [1626694.136787] RBP: ffff8801de07b930 R08: 000060fb80008b60 R09: 00000000039ac000
> [1626694.137071] R10: ffff8803d1ec3520 R11: 0000000000000000 R12: 0000000002408840
> [1626694.139976] R13: ffffffffa072c73a R14: ffff8803eb6d1900 R15: ffff8803eb6d1900
> [1626694.140263] FS:  00007fd7a4a38700(0000) GS:ffff88047fc20000(0000) knlGS:0000000000000000
> [1626694.140562] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [1626694.140736] CR2: 00000000039ac000 CR3: 000000039aec6000 CR4: 00000000000406e0
> [1626694.141027] Stack:
> [1626694.141193]  ffff8801de07b900 ffff8801e5ffc000 0000000000004000 ffff8801e5ffc000
> [1626694.141670]  0000000003990000 0000000000004000 ffff8801de07b960 ffffffffa072c73a
> [1626694.142139]  ffff8801e5ffc000 0000000000000000 0000000003990000 ffff8801f7bdd908
> [1626694.142608] Call Trace:
> [1626694.142799]  [<ffffffffa072c73a>] __alloc_extent_buffer+0x2a/0xe0 [btrfs]
> [1626694.142988]  [<ffffffffa0732fe7>] alloc_extent_buffer+0x67/0x360 [btrfs]
> [1626694.143175]  [<ffffffffa0708a00>] read_tree_block+0x20/0x70 [btrfs]
> [1626694.143357]  [<ffffffffa06e8899>] read_block_for_search.isra.32+0x129/0x340 [btrfs]
> [1626694.143657]  [<ffffffffa06eaa01>] btrfs_search_slot+0x3e1/0x9d0 [btrfs]
> [1626694.143830]  [<ffffffff811b2da5>] ? inode_init_always+0x105/0x1b0
> [1626694.144014]  [<ffffffffa07057bf>] btrfs_lookup_inode+0x2f/0xa0 [btrfs]
> [1626694.144202]  [<ffffffffa071cb07>] btrfs_iget+0xd7/0x6a0 [btrfs]
> [1626694.144385]  [<ffffffffa071d894>] btrfs_lookup_dentry+0x3e4/0x530 [btrfs]
> [1626694.144570]  [<ffffffffa071d9f2>] btrfs_lookup+0x12/0x40 [btrfs]
> [1626694.144743]  [<ffffffff811a2e6d>] lookup_real+0x1d/0x60
> [1626694.144912]  [<ffffffff811a31e3>] __lookup_hash+0x33/0x40
> [1626694.145084]  [<ffffffff811a5b72>] walk_component+0x212/0x4e0
> [1626694.145255]  [<ffffffff811a649d>] path_lookupat+0x5d/0x110
> [1626694.145427]  [<ffffffff811a89ba>] filename_lookup+0x9a/0x110
> [1626694.145614]  [<ffffffffa0765bcd>] ? btrfs_delayed_update_inode+0x14d/0x4e0 [btrfs]
> [1626694.145902]  [<ffffffff811a8677>] ? getname_flags+0x37/0x1a0
> [1626694.146073]  [<ffffffff8117e51a>] ? kmem_cache_alloc+0x1ba/0x220
> [1626694.146245]  [<ffffffff811a8677>] ? getname_flags+0x37/0x1a0
> [1626694.146416]  [<ffffffff811a8ae6>] user_path_at_empty+0x36/0x40
> [1626694.146588]  [<ffffffff8119e0e3>] vfs_fstatat+0x53/0xa0
> [1626694.146758]  [<ffffffff8119e5d2>] SYSC_newlstat+0x22/0x40
> [1626694.146930]  [<ffffffff8119e7ee>] SyS_newlstat+0xe/0x10
> [1626694.147102]  [<ffffffff8161531b>] entry_SYSCALL_64_fastpath+0x16/0x6e
> 
> I know most of this is out of your area of expertise but what I'm hoping is that the 
> rcu corruption at least point in the right direction as to the root cause. Under what 
> conditions is it "expected" to have list/count mismatch when running the rcu callbacks?
> Is it plausible that a memory corruption, induced by btrfs can have such an effect on 
> core RCU data structures? So what exactly does the warning mean? 

It might well.  Memory corruption can cause all sorts of knock-on problems.
But list/count mismatches are never expected behvavior.

If the problem is reproducible, bisection would be very helpful.

Otherwise, it might be helpful to get the btrfs guys involved.

							Thanx, Paul

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web