summaryrefslogtreecommitdiff
path: root/qgroup-verify.c
diff options
context:
space:
mode:
Diffstat (limited to 'qgroup-verify.c')
-rw-r--r--qgroup-verify.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/qgroup-verify.c b/qgroup-verify.c
index 8df90eef..f5885589 100644
--- a/qgroup-verify.c
+++ b/qgroup-verify.c
@@ -84,6 +84,7 @@ static struct counts_tree {
unsigned int num_groups;
unsigned int rescan_running:1;
unsigned int qgroup_inconsist:1;
+ u64 scan_progress;
} counts = { .root = RB_ROOT };
static LIST_HEAD(bad_qgroups);
@@ -922,6 +923,7 @@ static void read_qgroup_status(struct extent_buffer *eb, int slot,
counts->qgroup_inconsist = !!(flags &
BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT);
counts->rescan_running = !!(flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN);
+ counts->scan_progress = btrfs_qgroup_status_rescan(eb, status_item);
}
static int load_quota_info(struct btrfs_fs_info *info)
@@ -1319,6 +1321,7 @@ int report_qgroups(int all)
struct rb_node *node;
struct qgroup_count *c;
bool found_err = false;
+ bool skip_err = false;
if (!repair && counts.rescan_running) {
if (all) {
@@ -1330,6 +1333,15 @@ int report_qgroups(int all)
return 0;
}
}
+ /*
+ * It's possible that rescan hasn't been initialized yet.
+ */
+ if (counts.qgroup_inconsist && !counts.rescan_running &&
+ counts.rescan_running == 0) {
+ printf(
+"Rescan hasn't been initialzied, a difference in qgroup accounting is expected\n");
+ skip_err = true;
+ }
if (counts.qgroup_inconsist && !counts.rescan_running)
fprintf(stderr, "Qgroup are marked as inconsistent.\n");
node = rb_first(&counts.root);
@@ -1343,7 +1355,7 @@ int report_qgroups(int all)
node = rb_next(node);
}
- if (found_err)
+ if (found_err && !skip_err)
return -EUCLEAN;
return 0;
}