mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-25 15:42:23 +00:00
9bded24a46
There are several call sites utilizing btrfs_commit_transaction() just to update members in super blocks, without any metadata update. This can be problematic for some simple call sites, like zero_log_tree() or check_and_repair_super_num_devs(). If we have big problems preventing the fs to be mounted in the first place, and need to clear the log or super block size, but by some other problems in extent tree, we're unable to allocate new blocks. Then we fall into a deadlock that, we need to mount (even ro,rescue=all) to collect extra info, but btrfs-progs can not do any super block updates. Fix the problem by allowing the following super blocks only operations to be done without using btrfs_commit_transaction(): - btrfs_fix_super_size() - check_and_repair_super_num_devs() - zero_log_tree(). There are some exceptions in btrfstune.c, related to the csum type conversion and seed flags. In those btrfstune cases, we in fact wants to proper error report in btrfs_commit_transaction(), as those operations are not mount critical, and any early error can be helpful to expose any problems in the fs. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> |
||
---|---|---|
.. | ||
common.h | ||
main.c | ||
mode-common.c | ||
mode-common.h | ||
mode-lowmem.c | ||
mode-lowmem.h | ||
mode-original.h | ||
qgroup-verify.c | ||
qgroup-verify.h |