* btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. @ 2016-09-09 21:37 Hans van Kranenburg 2016-09-12 9:14 ` Hans van Kranenburg 2016-09-12 12:39 ` David Sterba 0 siblings, 2 replies; 5+ messages in thread From: Hans van Kranenburg @ 2016-09-09 21:37 UTC (permalink / raw) To: linux-btrfs Hi, While trying to enable skinny metadata on a filesystem, I got this error (after minutes of reading from disk by the program): -# btrfstune -x /dev/xvdb extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. btrfstune[0x410ef6] btrfstune[0x410f1d] btrfstune(btrfs_reserve_extent+0x781)[0x41522e] btrfstune(btrfs_alloc_free_block+0x63)[0x415413] btrfstune(__btrfs_cow_block+0xfc)[0x409176] btrfstune(btrfs_cow_block+0x8b)[0x409718] btrfstune[0x40d8ad] btrfstune(btrfs_commit_transaction+0xb8)[0x40f10d] btrfstune(main+0x3b3)[0x407e31] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f945fa06700] btrfstune(_start+0x29)[0x408509] This is a ~40TiB filesystem that was created about one and a half year ago, has grown from 1TiB to this size now and has always been running with the Debian 3.16-ckt kernel. # uname -a Linux backups-dolly 4.7.0-1-amd64 #1 SMP Debian 4.7.2-1 (2016-08-28) x86_64 GNU/Linux # btrfs version btrfs-progs v4.7.1 One of the things I already did earlier today was switching to space_cache=v2 Does the shown error ring a bell? What's the next step to debug this? The filesystem is a clone of the production filesystem (not btrfs clone, but lower level, on iSCSI storage) meant to be used for upgrade-testing and performance testing, so if anything goes wrong in whatever way, there will be no panicing involved. -- Hans van Kranenburg ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. 2016-09-09 21:37 btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed Hans van Kranenburg @ 2016-09-12 9:14 ` Hans van Kranenburg 2016-09-12 12:39 ` David Sterba 1 sibling, 0 replies; 5+ messages in thread From: Hans van Kranenburg @ 2016-09-12 9:14 UTC (permalink / raw) To: linux-btrfs On 09/09/2016 11:37 PM, Hans van Kranenburg wrote: > > While trying to enable skinny metadata on a filesystem, I got this error > (after minutes of reading from disk by the program): > > -# btrfstune -x /dev/xvdb > extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. > btrfstune[0x410ef6] > btrfstune[0x410f1d] > btrfstune(btrfs_reserve_extent+0x781)[0x41522e] > btrfstune(btrfs_alloc_free_block+0x63)[0x415413] > btrfstune(__btrfs_cow_block+0xfc)[0x409176] > btrfstune(btrfs_cow_block+0x8b)[0x409718] > btrfstune[0x40d8ad] > btrfstune(btrfs_commit_transaction+0xb8)[0x40f10d] > btrfstune(main+0x3b3)[0x407e31] > /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f945fa06700] > btrfstune(_start+0x29)[0x408509] I took a fresh clone of the thing, and tried again, same crash, after 50 minutes of reading from disk. Should I put this in the bugzilla? Bumping a bit, since the previous mail already got buried in dozens of mails over the weekend. ;] -- Hans van Kranenburg ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. 2016-09-09 21:37 btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed Hans van Kranenburg 2016-09-12 9:14 ` Hans van Kranenburg @ 2016-09-12 12:39 ` David Sterba 2016-09-12 12:46 ` Hans van Kranenburg 1 sibling, 1 reply; 5+ messages in thread From: David Sterba @ 2016-09-12 12:39 UTC (permalink / raw) To: Hans van Kranenburg; +Cc: linux-btrfs On Fri, Sep 09, 2016 at 11:37:21PM +0200, Hans van Kranenburg wrote: > Hi, > > While trying to enable skinny metadata on a filesystem, I got this error > (after minutes of reading from disk by the program): > > -# btrfstune -x /dev/xvdb > extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. > btrfstune[0x410ef6] > btrfstune[0x410f1d] > btrfstune(btrfs_reserve_extent+0x781)[0x41522e] > btrfstune(btrfs_alloc_free_block+0x63)[0x415413] > btrfstune(__btrfs_cow_block+0xfc)[0x409176] > btrfstune(btrfs_cow_block+0x8b)[0x409718] > btrfstune[0x40d8ad] > btrfstune(btrfs_commit_transaction+0xb8)[0x40f10d] > btrfstune(main+0x3b3)[0x407e31] > /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f945fa06700] > btrfstune(_start+0x29)[0x408509] > > This is a ~40TiB filesystem that was created about one and a half year > ago, has grown from 1TiB to this size now and has always been running > with the Debian 3.16-ckt kernel. > > # uname -a > Linux backups-dolly 4.7.0-1-amd64 #1 SMP Debian 4.7.2-1 (2016-08-28) > x86_64 GNU/Linux > > # btrfs version > btrfs-progs v4.7.1 > > One of the things I already did earlier today was switching to > space_cache=v2 > > Does the shown error ring a bell? What's the next step to debug this? It's a bug in the incompat bit handling the free-space-tree. Opening the filesystem for read-write should not be allowed, but was mistakenly enabled by me. > The filesystem is a clone of the production filesystem (not btrfs clone, > but lower level, on iSCSI storage) meant to be used for upgrade-testing > and performance testing, so if anything goes wrong in whatever way, > there will be no panicing involved. The fix is in devel, but it'd mean that writing to a v2-enabled filesystem will not work (which also means changing some fatures via btrfstune as it uses the transaction mechanism that needs to cow blocks and update free space etc). ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. 2016-09-12 12:39 ` David Sterba @ 2016-09-12 12:46 ` Hans van Kranenburg 2016-09-12 21:29 ` Hans van Kranenburg 0 siblings, 1 reply; 5+ messages in thread From: Hans van Kranenburg @ 2016-09-12 12:46 UTC (permalink / raw) To: dsterba, linux-btrfs On 09/12/2016 02:39 PM, David Sterba wrote: > On Fri, Sep 09, 2016 at 11:37:21PM +0200, Hans van Kranenburg wrote: >> Hi, >> >> While trying to enable skinny metadata on a filesystem, I got this error >> (after minutes of reading from disk by the program): >> >> -# btrfstune -x /dev/xvdb >> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. >> btrfstune[0x410ef6] >> btrfstune[0x410f1d] >> btrfstune(btrfs_reserve_extent+0x781)[0x41522e] >> btrfstune(btrfs_alloc_free_block+0x63)[0x415413] >> btrfstune(__btrfs_cow_block+0xfc)[0x409176] >> btrfstune(btrfs_cow_block+0x8b)[0x409718] >> btrfstune[0x40d8ad] >> btrfstune(btrfs_commit_transaction+0xb8)[0x40f10d] >> btrfstune(main+0x3b3)[0x407e31] >> /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f945fa06700] >> btrfstune(_start+0x29)[0x408509] >> >> This is a ~40TiB filesystem that was created about one and a half year >> ago, has grown from 1TiB to this size now and has always been running >> with the Debian 3.16-ckt kernel. >> >> # uname -a >> Linux backups-dolly 4.7.0-1-amd64 #1 SMP Debian 4.7.2-1 (2016-08-28) >> x86_64 GNU/Linux >> >> # btrfs version >> btrfs-progs v4.7.1 >> >> One of the things I already did earlier today was switching to >> space_cache=v2 >> >> Does the shown error ring a bell? What's the next step to debug this? > > It's a bug in the incompat bit handling the free-space-tree. Opening the > filesystem for read-write should not be allowed, but was mistakenly > enabled by me. > >> The filesystem is a clone of the production filesystem (not btrfs clone, >> but lower level, on iSCSI storage) meant to be used for upgrade-testing >> and performance testing, so if anything goes wrong in whatever way, >> there will be no panicing involved. > > The fix is in devel, but it'd mean that writing to a v2-enabled > filesystem will not work (which also means changing some fatures via > btrfstune as it uses the transaction mechanism that needs to cow blocks > and update free space etc). As I replied this morning, I tried it again on a fresh clone of the underlying snapshot, before doing anything else first with it. So that means at that point it's a filesystem that has only seen 3.16 kernels before, and does still have old free space cache in place, no v2 tree. And, it still blows up. -- Hans van Kranenburg ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. 2016-09-12 12:46 ` Hans van Kranenburg @ 2016-09-12 21:29 ` Hans van Kranenburg 0 siblings, 0 replies; 5+ messages in thread From: Hans van Kranenburg @ 2016-09-12 21:29 UTC (permalink / raw) To: dsterba, linux-btrfs On 09/12/2016 02:46 PM, Hans van Kranenburg wrote: > On 09/12/2016 02:39 PM, David Sterba wrote: >> On Fri, Sep 09, 2016 at 11:37:21PM +0200, Hans van Kranenburg wrote: >>> Hi, >>> >>> While trying to enable skinny metadata on a filesystem, I got this error >>> (after minutes of reading from disk by the program): >>> >>> -# btrfstune -x /dev/xvdb >>> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed. >>> [...] >>> >>> Does the shown error ring a bell? What's the next step to debug this? >> >> It's a bug in the incompat bit handling the free-space-tree. Opening the >> filesystem for read-write should not be allowed, but was mistakenly >> enabled by me. >> >>> The filesystem is a clone of the production filesystem (not btrfs clone, >>> but lower level, on iSCSI storage) meant to be used for upgrade-testing >>> and performance testing, so if anything goes wrong in whatever way, >>> there will be no panicing involved. >> >> The fix is in devel, but it'd mean that writing to a v2-enabled >> filesystem will not work (which also means changing some fatures via >> btrfstune as it uses the transaction mechanism that needs to cow blocks >> and update free space etc). > > As I replied this morning, I tried it again on a fresh clone of the > underlying snapshot, before doing anything else first with it. > > So that means at that point it's a filesystem that has only seen 3.16 > kernels before, and does still have old free space cache in place, no v2 > tree. > > And, it still blows up. After a fresh mount with -o clear_cache,space_cache=v1 and the latest code from devel, it still happens. So, that change is not related I think. I want to have my skinny metadata, so I started playing around with the code, putting print statements in to see what's going on [1]: -# ./btrfstune -x /dev/xvdb btrfs_reserve_extent search_start 0 data 52 find_free_extent search_start 0 search_end 18446744073709551615 num_bytes 16384 find_free_extent search_start 0 (check_failed) [.. lots of reading from disk ..] find_free_extent new_group search_start 65996496830464 find_free_extent search_start 0 (check_failed) find_free_extent new_group search_start 65996496830464 find_free_extent search_start 0 (check_failed) find_free_extent new_group search_start 65996496830464 find_free_extent error -28 btrfs_reserve_extent: find_free_extent ret is -28 extent-tree.c:2694: btrfs_reserve_extent: Assertion `ret` failed. ./btrfstune(btrfs_reserve_extent+0xbdc)[0x419441] ./btrfstune(btrfs_alloc_free_block+0x50)[0x4195e0] ./btrfstune(__btrfs_cow_block+0x19d)[0x408dab] ./btrfstune(btrfs_cow_block+0xec)[0x409805] ./btrfstune[0x40efc0] ./btrfstune(btrfs_commit_transaction+0xec)[0x410c25] ./btrfstune(main+0x55f)[0x438e71] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f13e244b700] ./btrfstune(_start+0x29)[0x407c29] -28 is ENOSPC, 65996496830464 would be the vaddr of a newly added block group. So am I right to see that it is looking for a place to put 16kB of metadata? For some reason, which I didn't find out yet, it can't find a suitable place, then starts thinking about creating a new block group... and then again, and then gives up... I have 850 metadata block groups in this fs, and they're all at ~98% usage level. [1] https://github.com/knorrie/btrfs-progs/commit/80f931627983d52d8a438e00140ae63d98abf74b -- Hans van Kranenburg ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-09-12 21:30 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-09-09 21:37 btrfstune -x -> extent-tree.c:2688: btrfs_reserve_extent: Assertion `ret` failed Hans van Kranenburg 2016-09-12 9:14 ` Hans van Kranenburg 2016-09-12 12:39 ` David Sterba 2016-09-12 12:46 ` Hans van Kranenburg 2016-09-12 21:29 ` Hans van Kranenburg
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).