diff options
author | Josef Bacik <josef@redhat.com> | 2011-05-25 13:10:16 -0400 |
---|---|---|
committer | Josef Bacik <josef@redhat.com> | 2011-06-08 15:08:31 -0400 |
commit | f2bb8f5cfb3bce595b2de251ed7638047fc4e530 (patch) | |
tree | 705123220f4e1ae64f1f67b852f9e93b18db8e9a /fs | |
parent | 3de85bb95cc50d0977cbb7a0c605e894be4c790d (diff) |
Btrfs: don't commit the transaction if we dont have enough pinned bytes
I noticed when running an enospc test that we would get stuck committing the
transaction in check_data_space even though we truly didn't have enough space.
So check to see if bytes_pinned is bigger than num_bytes, if it's not don't
commit the transaction. Thanks,
Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 5b9b6b6df242..0d0a3fe77bb7 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -3089,6 +3089,13 @@ alloc: } goto again; } + + /* + * If we have less pinned bytes than we want to allocate then + * don't bother committing the transaction, it won't help us. + */ + if (data_sinfo->bytes_pinned < bytes) + committed = 1; spin_unlock(&data_sinfo->lock); /* commit the current transaction and try again */ |