Skip to content

Commit

Permalink
btrfs: Update btrfs qgroup status item when rescan is done.
Browse files Browse the repository at this point in the history
Update qgroup status when rescan is done.

Before this patch, status item is not updated on rescan finish, which
causing the RESCAN and INCONSISTENT flags never cleared.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
  • Loading branch information
Qu Wenruo authored and Chris Mason committed Apr 13, 2015
1 parent 3393168 commit 53b7cde
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion fs/btrfs/qgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -2665,6 +2665,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work)
struct ulist *tmp = NULL, *qgroups = NULL;
struct extent_buffer *scratch_leaf = NULL;
int err = -ENOMEM;
int ret = 0;

path = btrfs_alloc_path();
if (!path)
Expand Down Expand Up @@ -2715,13 +2716,36 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work)
}
mutex_unlock(&fs_info->qgroup_rescan_lock);

/*
* only update status, since the previous part has alreay updated the
* qgroup info.
*/
trans = btrfs_start_transaction(fs_info->quota_root, 1);
if (IS_ERR(trans)) {
err = PTR_ERR(trans);
btrfs_err(fs_info,
"fail to start transaction for status update: %d\n",
err);
goto done;
}
ret = update_qgroup_status_item(trans, fs_info, fs_info->quota_root);
if (ret < 0) {
err = ret;
btrfs_err(fs_info, "fail to update qgroup status: %d\n",
err);
btrfs_abort_transaction(trans, fs_info->quota_root, err);
goto done;
}
btrfs_end_transaction(trans, fs_info->quota_root);

if (err >= 0) {
btrfs_info(fs_info, "qgroup scan completed%s",
err > 0 ? " (inconsistency flag cleared)" : "");
} else {
btrfs_err(fs_info, "qgroup scan failed with %d", err);
}

done:
complete_all(&fs_info->qgroup_rescan_completion);
}

Expand Down Expand Up @@ -2756,7 +2780,6 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,
mutex_unlock(&fs_info->qgroup_rescan_lock);
goto err;
}

fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_RESCAN;
}

Expand Down

0 comments on commit 53b7cde

Please sign in to comment.