Josef Bacik ae6e21f8bb btrfs: set cache_block_group_error if we find an error
commit 92fb94b69c6accf1e49fff699640fa0ce03dc910 upstream.

We set cache_block_group_error if btrfs_cache_block_group() returns an
error, this is because we could end up not finding space to allocate and
mistakenly return -ENOSPC, and which could then abort the transaction
with the incorrect errno, and in the case of ENOSPC result in a
WARN_ON() that will trip up tests like generic/475.

However there's the case where multiple threads can be racing, one
thread gets the proper error, and the other thread doesn't actually call
btrfs_cache_block_group(), it instead sees ->cached ==
BTRFS_CACHE_ERROR.  Again the result is the same, we fail to allocate
our space and return -ENOSPC.  Instead we need to set
cache_block_group_error to -EIO in this case to make sure that if we do
not make our allocation we get the appropriate error returned back to
the caller.

CC: stable@vger.kernel.org # 4.14+
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-08-16 18:22:03 +02:00
..
2022-08-17 14:24:07 +02:00
2023-06-21 15:59:18 +02:00
2022-07-02 16:41:14 +02:00
2023-08-11 15:13:58 +02:00
2023-06-09 10:32:21 +02:00
2021-08-26 22:28:02 +02:00
2022-06-09 10:22:55 +02:00
2021-12-29 12:28:59 +01:00
2023-07-23 13:46:48 +02:00
2023-07-27 08:46:57 +02:00
2023-05-17 11:50:14 +02:00
2023-02-22 12:57:05 +01:00
2023-08-03 10:22:30 +02:00
2022-12-14 11:37:31 +01:00
2023-07-23 13:47:36 +02:00
2023-01-12 11:58:47 +01:00
2022-07-02 16:41:17 +02:00
2022-07-12 16:35:08 +02:00
2021-12-14 10:57:15 +01:00