Btrfs: don't commit the transaction if we dont have enough pinned bytes
authorJosef Bacik <josef@redhat.com>
Wed, 25 May 2011 17:10:16 +0000 (13:10 -0400)
committerJosef Bacik <josef@redhat.com>
Wed, 8 Jun 2011 19:08:31 +0000 (15:08 -0400)
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>
fs/btrfs/extent-tree.c

index 5b9b6b6df242a67a4f38a14533d33e3643f4d836..0d0a3fe77bb73ee48da551446f08257008b5af7a 100644 (file)
@@ -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 */