|
@@ -2782,26 +2782,36 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,
|
|
|
{
|
|
|
int ret = 0;
|
|
|
|
|
|
- if (!init_flags &&
|
|
|
- (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) ||
|
|
|
- !(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto err;
|
|
|
+ if (!init_flags) {
|
|
|
+ /* we're resuming qgroup rescan at mount time */
|
|
|
+ if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN))
|
|
|
+ btrfs_warn(fs_info,
|
|
|
+ "qgroup rescan init failed, qgroup is not enabled");
|
|
|
+ else if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))
|
|
|
+ btrfs_warn(fs_info,
|
|
|
+ "qgroup rescan init failed, qgroup rescan is not queued");
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
mutex_lock(&fs_info->qgroup_rescan_lock);
|
|
|
spin_lock(&fs_info->qgroup_lock);
|
|
|
|
|
|
if (init_flags) {
|
|
|
- if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN)
|
|
|
+ if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) {
|
|
|
+ btrfs_warn(fs_info,
|
|
|
+ "qgroup rescan is already in progress");
|
|
|
ret = -EINPROGRESS;
|
|
|
- else if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))
|
|
|
+ } else if (!(fs_info->qgroup_flags &
|
|
|
+ BTRFS_QGROUP_STATUS_FLAG_ON)) {
|
|
|
+ btrfs_warn(fs_info,
|
|
|
+ "qgroup rescan init failed, qgroup is not enabled");
|
|
|
ret = -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
if (ret) {
|
|
|
spin_unlock(&fs_info->qgroup_lock);
|
|
|
mutex_unlock(&fs_info->qgroup_rescan_lock);
|
|
|
- goto err;
|
|
|
+ return ret;
|
|
|
}
|
|
|
fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_RESCAN;
|
|
|
}
|
|
@@ -2820,13 +2830,6 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,
|
|
|
btrfs_init_work(&fs_info->qgroup_rescan_work,
|
|
|
btrfs_qgroup_rescan_helper,
|
|
|
btrfs_qgroup_rescan_worker, NULL, NULL);
|
|
|
-
|
|
|
- if (ret) {
|
|
|
-err:
|
|
|
- btrfs_info(fs_info, "qgroup_rescan_init failed with %d", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|