|
@@ -932,15 +932,15 @@ void btrfs_bio_counter_sub(struct btrfs_fs_info *fs_info, s64 amount)
|
|
|
|
|
|
void btrfs_bio_counter_inc_blocked(struct btrfs_fs_info *fs_info)
|
|
|
{
|
|
|
- DEFINE_WAIT(wait);
|
|
|
-again:
|
|
|
- percpu_counter_inc(&fs_info->bio_counter);
|
|
|
- if (test_bit(BTRFS_FS_STATE_DEV_REPLACING, &fs_info->fs_state)) {
|
|
|
+ while (1) {
|
|
|
+ percpu_counter_inc(&fs_info->bio_counter);
|
|
|
+ if (likely(!test_bit(BTRFS_FS_STATE_DEV_REPLACING,
|
|
|
+ &fs_info->fs_state)))
|
|
|
+ break;
|
|
|
+
|
|
|
btrfs_bio_counter_dec(fs_info);
|
|
|
wait_event(fs_info->replace_wait,
|
|
|
!test_bit(BTRFS_FS_STATE_DEV_REPLACING,
|
|
|
&fs_info->fs_state));
|
|
|
- goto again;
|
|
|
}
|
|
|
-
|
|
|
}
|