diff options
Diffstat (limited to 'fs/btrfs/qgroup.c')
-rw-r--r-- | fs/btrfs/qgroup.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 93e12c18ffd7..5279fdae7142 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c | |||
@@ -993,9 +993,10 @@ int btrfs_quota_disable(struct btrfs_trans_handle *trans, | |||
993 | mutex_lock(&fs_info->qgroup_ioctl_lock); | 993 | mutex_lock(&fs_info->qgroup_ioctl_lock); |
994 | if (!fs_info->quota_root) | 994 | if (!fs_info->quota_root) |
995 | goto out; | 995 | goto out; |
996 | spin_lock(&fs_info->qgroup_lock); | ||
997 | fs_info->quota_enabled = 0; | 996 | fs_info->quota_enabled = 0; |
998 | fs_info->pending_quota_state = 0; | 997 | fs_info->pending_quota_state = 0; |
998 | btrfs_qgroup_wait_for_completion(fs_info); | ||
999 | spin_lock(&fs_info->qgroup_lock); | ||
999 | quota_root = fs_info->quota_root; | 1000 | quota_root = fs_info->quota_root; |
1000 | fs_info->quota_root = NULL; | 1001 | fs_info->quota_root = NULL; |
1001 | fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_ON; | 1002 | fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_ON; |
@@ -1461,6 +1462,8 @@ struct btrfs_qgroup_extent_record | |||
1461 | struct btrfs_qgroup_extent_record *entry; | 1462 | struct btrfs_qgroup_extent_record *entry; |
1462 | u64 bytenr = record->bytenr; | 1463 | u64 bytenr = record->bytenr; |
1463 | 1464 | ||
1465 | assert_spin_locked(&delayed_refs->lock); | ||
1466 | |||
1464 | while (*p) { | 1467 | while (*p) { |
1465 | parent_node = *p; | 1468 | parent_node = *p; |
1466 | entry = rb_entry(parent_node, struct btrfs_qgroup_extent_record, | 1469 | entry = rb_entry(parent_node, struct btrfs_qgroup_extent_record, |