btrfs-progs/tune
Qu Wenruo 5887ea343f btrfs-progs: change-csum: fix the wrong metadata space reservation
[BUG]
'btrfstune --csum' would always fail for a newly created btrfs:

  # truncate -s 1G test.img
  # ./mkfs.btrfs -f test.img
  # ./btrsftune --csum xxhash test.img
  WARNING: Experimental build with unstable or unfinished features
  WARNING: Switching checksums is experimental, do not use for valuable data!

  Proceed to switch checksums
  ERROR: failed to start transaction: Unknown error -28
  ERROR: failed to start transaction: No space left on device
  ERROR: failed to generate new data csums: No space left on device
  ERROR: btrfstune failed

[CAUSE]
After commit e79f18a4a7 ("btrfs-progs: introduce a basic metadata free
space reservation check"), btrfs_start_transaction() would check the
metadata space.

But at the time of introduction of csum conversion, the parameter for
btrfs_start_transaction() was incorrect.

The 2nd parameter is the *number* of items to be added (if we're
deleting items, just pass 1).
However commit 08a3bd7694 ("btrfs-progs: tune: add the ability to
generate new data checksums") is using the item size, not the number of
items to be added.

This means we're passing a number 8 * nodesize times larger than the
original size, no wonder we would error out with -ENOSPC.

[FIX]
Use proper calcuation to convert the new csum item size to number of
leaves needed, and double it just in case.

Pull-request: #820
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2024-06-24 19:19:33 +02:00
..
change-csum.c btrfs-progs: change-csum: fix the wrong metadata space reservation 2024-06-24 19:19:33 +02:00
change-metadata-uuid.c btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
change-uuid.c btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
convert-bgt.c btrfs-progs: tune: add the missing newline for --convert-from-block-group-tree 2024-04-02 20:49:55 +02:00
main.c btrfs-progs: tune: fix btrfstune --help for -m -M option 2024-05-17 17:36:59 +02:00
quota.c btrfs-progs: drop btrfs_init_path 2023-10-03 01:11:56 +02:00
seeding.c btrfs-progs: clean up includes, using include-what-you-use 2023-10-03 01:11:57 +02:00
tune.h btrfs-progs: tune: recover from failed btrfstune -m|M 2023-10-03 01:11:55 +02:00