btrfs-progs/kernel-shared
Qu Wenruo 08823f7512 btrfs-progs: backref: properly queue indirect refs
[BUG]
When calling iterate_extent_inodes() on data extents with indirect ref
(with inline or keyed EXTENT_DATA_REF_KEY), it will fail to execute the
call back function at all.

[CAUSE]
In function find_parent_nodes(), we only add the target tree block if a
backref has @parent populated.

For indirect backref like EXTENT_DATA_REF_KEY, we rely on
__resolve_indirect_ref() to get the parent leaves.

However __resolve_indirect_ref() only grabs backrefs from
&prefstate->pending_indirect_refs.

Meaning callers should queue any indirect backref to
pending_indirect_refs.

But unfortunately in __add_prelim_ref() and __add_missing_keys(), none
of them properly queue the indirect backrefs to pending_indirect_refs,
but directly to pending.

Making all indirect backrefs never got resolved, thus no callback
function executed

[FIX]
Fix __add_prelim_ref() and __add_missing_keys() to properly queue
indirect backrefs to the correct list.

Currently there is no such direct user in btrfs-progs, but later csum
tree re-initialization code will rely this to do proper csum
re-calculate (to avoid preallocated/nodatasum extents).

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2022-02-01 18:41:09 +01:00
..
backref.c btrfs-progs: backref: properly queue indirect refs 2022-02-01 18:41:09 +01:00
backref.h btrfs-progs: move extent_io.c to kernel-shared/ 2020-08-31 17:01:04 +02:00
ctree.c btrfs-progs: remove direct calls to crc32c from ctree.h 2021-10-08 20:46:35 +02:00
ctree.h btrfs-progs: add on disk pointers to global tree ids 2021-11-30 19:09:47 +01:00
delayed-ref.c btrfs-progs: don't include btrfs-list.h unless necessary 2021-10-08 20:47:03 +02:00
delayed-ref.h btrfs-progs: unify GPL header comments 2021-09-07 13:58:44 +02:00
dir-item.c btrfs-progs: remove root argument from btrfs_truncate_item 2021-10-08 20:46:34 +02:00
disk-io.c btrfs-progs: add definitions for the block group tree 2021-11-30 19:08:39 +01:00
disk-io.h btrfs-progs: track csum, extent, and free space trees in a rb tree 2021-11-30 18:57:25 +01:00
extent_io.c btrfs-progs: introduce btrfs_pread wrapper for pread 2021-10-20 18:59:23 +02:00
extent_io.h btrfs-progs: move extent_io.c to kernel-shared/ 2020-08-31 17:01:04 +02:00
extent-tree.c btrfs-progs: stop accessing ->extent_root directly 2021-11-30 18:56:54 +01:00
file-item.c btrfs-progs: stop accessing ->csum_root directly 2021-11-22 21:45:37 +01:00
file.c btrfs-progs: move transaction.c to kernel-shared/ 2020-08-31 17:01:06 +02:00
free-space-cache.c btrfs-progs: check: batch v1 space cache inodes when clearing 2021-07-22 16:26:05 +02:00
free-space-cache.h btrfs-progs: check: batch v1 space cache inodes when clearing 2021-07-22 16:26:05 +02:00
free-space-tree.c btrfs-progs: track csum, extent, and free space trees in a rb tree 2021-11-30 18:57:25 +01:00
free-space-tree.h btrfs-progs: add add_block_group_free_space helper 2021-09-06 16:36:17 +02:00
inode-item.c btrfs-progs: remove root argument from btrfs_truncate_item 2021-10-08 20:46:34 +02:00
inode.c btrfs-progs: make btrfs_lookup_dir_index in parity with kernel code 2020-08-31 17:09:49 +02:00
print-tree.c btrfs-progs: add definitions for the block group tree 2021-11-30 19:08:39 +01:00
print-tree.h btrfs-progs: dump-tree: add options to dump checksums 2021-06-19 22:07:49 +02:00
root-tree.c btrfs-progs: move transaction.c to kernel-shared/ 2020-08-31 17:01:06 +02:00
send.h btrfs-progs: libbtrfs: replace SZ_ constants and drop sizes.h 2021-10-08 20:46:35 +02:00
transaction.c btrfs-progs: zoned: redirty clean extent buffers 2021-05-06 16:41:45 +02:00
transaction.h btrfs-progs: move transaction.c to kernel-shared/ 2020-08-31 17:01:06 +02:00
ulist.c btrfs-progs: unify GPL header comments 2021-09-07 13:58:44 +02:00
ulist.h btrfs-progs: unify GPL header comments 2021-09-07 13:58:44 +02:00
uuid-tree.c btrfs-progs: add btrfs_uuid_tree_remove 2021-10-08 20:46:34 +02:00
volumes.c btrfs-progs: stop accessing ->extent_root directly 2021-11-30 18:56:54 +01:00
volumes.h btrfs-progs: make "btrfs filesystem df" command show upper case profile 2021-11-05 12:50:03 +01:00
zoned.c btrfs-progs: stop accessing ->extent_root directly 2021-11-30 18:56:54 +01:00
zoned.h btrfs-progs: remove max_zone_append_size logic 2021-10-06 16:49:07 +02:00