diff options
| author | Ingo Molnar <mingo@kernel.org> | 2023-10-07 11:32:24 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2023-10-07 11:32:24 +0200 |
| commit | 8db30574db25fa20cdcfa03e374edc3f8b8dc301 (patch) | |
| tree | 0b54686593694b68fb0537197eaa4bec7a44985d /fs/btrfs/block-group.c | |
| parent | d4d6596b43868a1e05fe5b047e73c3aff96444c6 (diff) | |
| parent | 9e0bc36ab07c550d791bf17feeb479f1dfc42d89 (diff) | |
Merge branch 'sched/urgent' into sched/core, to pick up fixes and refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/btrfs/block-group.c')
| -rw-r--r-- | fs/btrfs/block-group.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 0cb1dee965a0..b2e5107b7cec 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -3028,8 +3028,16 @@ static int update_block_group_item(struct btrfs_trans_handle *trans, btrfs_mark_buffer_dirty(leaf); fail: btrfs_release_path(path); - /* We didn't update the block group item, need to revert @commit_used. */ - if (ret < 0) { + /* + * We didn't update the block group item, need to revert commit_used + * unless the block group item didn't exist yet - this is to prevent a + * race with a concurrent insertion of the block group item, with + * insert_block_group_item(), that happened just after we attempted to + * update. In that case we would reset commit_used to 0 just after the + * insertion set it to a value greater than 0 - if the block group later + * becomes with 0 used bytes, we would incorrectly skip its update. + */ + if (ret < 0 && ret != -ENOENT) { spin_lock(&cache->lock); cache->commit_used = old_commit_used; spin_unlock(&cache->lock); |
