* 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).