struct btrfs_root *quota_root;
        struct btrfs_qgroup *srcgroup;
        struct btrfs_qgroup *dstgroup;
+       bool need_rescan = false;
        u32 level_size = 0;
        u64 nums;
 
                                goto unlock;
                }
                ++i_qgroups;
+
+               /*
+                * If we're doing a snapshot, and adding the snapshot to a new
+                * qgroup, the numbers are guaranteed to be incorrect.
+                */
+               if (srcid)
+                       need_rescan = true;
        }
 
        for (i = 0; i <  inherit->num_ref_copies; ++i, i_qgroups += 2) {
 
                dst->rfer = src->rfer - level_size;
                dst->rfer_cmpr = src->rfer_cmpr - level_size;
+
+               /* Manually tweaking numbers certainly needs a rescan */
+               need_rescan = true;
        }
        for (i = 0; i <  inherit->num_excl_copies; ++i, i_qgroups += 2) {
                struct btrfs_qgroup *src;
 
                dst->excl = src->excl + level_size;
                dst->excl_cmpr = src->excl_cmpr + level_size;
+               need_rescan = true;
        }
 
 unlock:
 out:
        if (!committing)
                mutex_unlock(&fs_info->qgroup_ioctl_lock);
+       if (need_rescan)
+               fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
        return ret;
 }