btrfs-progs: check: repair block group accounting in lowmem mode
authorSu Yue <suy.fnst@cn.fujitsu.com>
Tue, 12 Sep 2017 03:56:30 +0000 (11:56 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 16 Oct 2017 18:33:01 +0000 (20:33 +0200)
Add a macro named BG_ACCOUNT_ERROR meaning that block group used size
does not equal the total.

After extent-tree repair, BG_ACCOUNT_ERROR should be fixed up.
Clean bits at end of check_chunks_and_extents_v2().

Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
cmds-check.c

index 3e709b8..c236349 100644 (file)
@@ -133,6 +133,7 @@ struct data_backref {
 #define DIR_INDEX_MISSING       (1<<18) /* INODE_INDEX not found */
 #define DIR_INDEX_MISMATCH      (1<<19) /* INODE_INDEX found but not match */
 #define DIR_COUNT_AGAIN         (1<<20) /* DIR isize should be recalculated */
+#define BG_ACCOUNTING_ERROR     (1<<21) /* Block group accounting error */
 
 static inline struct data_backref* to_data_backref(struct extent_backref *back)
 {
@@ -12897,7 +12898,7 @@ out:
                error(
                "block group[%llu %llu] used %llu but extent items used %llu",
                        bg_key.objectid, bg_key.offset, used, total);
-               err |= ACCOUNTING_MISMATCH;
+               err |= BG_ACCOUNTING_ERROR;
        }
        return err;
 }
@@ -13291,6 +13292,8 @@ out:
                ret = btrfs_fix_block_accounting(trans, root);
                if (ret)
                        err |= ret;
+               else
+                       err &= ~BG_ACCOUNTING_ERROR;
        }
 
        if (trans)