-
Notifications
You must be signed in to change notification settings - Fork 263
Description
Hello everyone,
I compiled the tag v5.7 for a static binary and ran btrfs in repair mode. The filesystem is working fine with older kernels but was converted from ext4 ages ago and has issues with newer kernels.
Anyways, I am getting a segmentation fault with the following backtrace:
Program received signal SIGSEGV, Segmentation fault.
balance_level (level=1, path=0x33c7e430, root=, trans=) at ctree.c:930
930 root_sub_used(root, right->len);
(gdb) bt
#0 balance_level (level=1, path=0x33c7e430, root=, trans=) at ctree.c:930
#1 btrfs_search_slot (trans=trans@entry=0x63c50e40, root=root@entry=0x82bca0, key=key@entry=0x7fffffffd7c0, p=p@entry=0x33c7e430,
ins_len=ins_len@entry=-1, cow=cow@entry=1) at ctree.c:1320
#2 0x000000000045cfa8 in lookup_inline_extent_backref (trans=trans@entry=0x63c50e40, root=root@entry=0x82bca0, path=path@entry=0x33c7e430,
ref_ret=ref_ret@entry=0x7fffffffd958, bytenr=bytenr@entry=55829827584, num_bytes=num_bytes@entry=4096, parent=0, root_objectid=2, owner=0,
offset=0, insert=0) at extent-tree.c:885
#3 0x000000000045e8f1 in lookup_extent_backref (offset=0, owner=0, root_objectid=2, parent=0, num_bytes=4096, bytenr=55829827584,
ref_ret=0x7fffffffd958, path=0x33c7e430, root=0x82bca0, trans=0x63c50e40) at extent-tree.c:1085
#4 __free_extent (trans=trans@entry=0x63c50e40, bytenr=55829827584, num_bytes=, parent=0, root_objectid=2, owner_objectid=0,
owner_offset=, refs_to_drop=) at extent-tree.c:1938
#5 0x0000000000461937 in run_delayed_tree_ref (insert_reserved=, extent_op=0x0, node=0x328387f0, fs_info=0x82b830, trans=0x63c50e40)
at extent-tree.c:3758
#6 run_one_delayed_ref (insert_reserved=, extent_op=0x0, node=0x328387f0, fs_info=0x82b830, trans=0x63c50e40) at extent-tree.c:3778
#7 btrfs_run_delayed_refs (trans=trans@entry=0x63c50e40, nr=nr@entry=18446744073709551615) at extent-tree.c:3862
#8 0x000000000046d8bf in btrfs_commit_transaction (trans=trans@entry=0x63c50e40, root=root@entry=0x82bca0) at transaction.c:209
#9 0x0000000000425c3a in check_extent_refs (root=0x82bca0, root@entry=0xcc0500, extent_cache=extent_cache@entry=0x7fffffffded0) at check/main.c:8115
#10 0x000000000042dcdd in check_chunks_and_extents (fs_info=0x82b830) at check/main.c:8804
#11 do_check_chunks_and_extents (fs_info=0x82b830) at check/main.c:8860
#12 cmd_check (cmd=, argc=, argv=) at check/main.c:10353
#13 0x0000000000401493 in cmd_execute (argv=0x7fffffffe3f0, argc=3, cmd=0x811980 <cmd_struct_check>) at cmds/commands.h:125
#14 main (argc=3, argv=0x7fffffffe3f0) at btrfs.c:402
Just looking at the offending location, ctree.c:930 is insightful. right
is being dereferenced but is was assigned NULL
just five lines earlier. My guess is that blocksize
was meant here, which contains a copy of the last value before the deletion of right
.
Best regards