mirror of
https://github.com/kdave/btrfs-progs
synced 2025-02-02 10:51:43 +00:00
btrfs-progs: check btrfs_super_used in lowmem check
We can already fix this problem with the block accounting code, we just need to keep track of how much we should have used on the file system, and then check it against the bytes_super. The repair just piggy backs on the block group used repair. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c3521f8a57
commit
a4190da45e
@ -28,6 +28,7 @@
|
||||
#include "check/mode-lowmem.h"
|
||||
|
||||
static u64 last_allocated_chunk;
|
||||
static u64 total_used = 0;
|
||||
|
||||
static int calc_extent_flag(struct btrfs_root *root, struct extent_buffer *eb,
|
||||
u64 *flags_ret)
|
||||
@ -3645,6 +3646,8 @@ next:
|
||||
out:
|
||||
btrfs_release_path(&path);
|
||||
|
||||
total_used += used;
|
||||
|
||||
if (total != used) {
|
||||
error(
|
||||
"block group[%llu %llu] used %llu but extent items used %llu",
|
||||
@ -5547,6 +5550,14 @@ next:
|
||||
}
|
||||
out:
|
||||
|
||||
if (total_used != btrfs_super_bytes_used(gfs_info->super_copy)) {
|
||||
fprintf(stderr,
|
||||
"super bytes_used %llu mismatches actual used %llu\n",
|
||||
btrfs_super_bytes_used(gfs_info->super_copy),
|
||||
total_used);
|
||||
err |= SUPER_BYTES_USED_ERROR;
|
||||
}
|
||||
|
||||
if (repair) {
|
||||
ret = end_avoid_extents_overwrite();
|
||||
if (ret < 0)
|
||||
@ -5559,7 +5570,7 @@ out:
|
||||
if (ret)
|
||||
err |= ret;
|
||||
else
|
||||
err &= ~BG_ACCOUNTING_ERROR;
|
||||
err &= ~(BG_ACCOUNTING_ERROR | SUPER_BYTES_USED_ERROR);
|
||||
}
|
||||
|
||||
btrfs_release_path(&path);
|
||||
|
@ -48,6 +48,7 @@
|
||||
#define DIR_ITEM_HASH_MISMATCH (1<<24) /* Dir item hash mismatch */
|
||||
#define INODE_MODE_ERROR (1<<25) /* Bad inode mode */
|
||||
#define INVALID_GENERATION (1<<26) /* Generation is too new */
|
||||
#define SUPER_BYTES_USED_ERROR (1<<27) /* Super bytes_used is invalid */
|
||||
|
||||
/*
|
||||
* Error bit for low memory mode check.
|
||||
|
Loading…
Reference in New Issue
Block a user