Btrfs: fix how we deal with the orphan block rsv
authorJosef Bacik <josef@redhat.com>
Wed, 23 May 2012 18:26:42 +0000 (14:26 -0400)
committerJosef Bacik <josef@redhat.com>
Wed, 30 May 2012 14:23:37 +0000 (10:23 -0400)
commit8a35d95ff4680a456d3ce47df9638f33d4f54f20
tree8adb116747b84209406d29767b56e2a6ade2f2f4
parent72ac3c0d7921f943d92d1ef42a549fb52e56817d
Btrfs: fix how we deal with the orphan block rsv

Ceph was hitting this race where we would remove an inode from the per-root
orphan list before we would release the space we had reserved for the inode.
We actually don't need a list or anything, we just need to make sure the
root doesn't try to free up the orphan reserve until after the inodes have
released their reservations.  So use an atomic counter instead of a list on
the root and only decrement the counter after we've released our
reservation.  I've tested this as well as several others and we no longer
see the warnings that you would see while running ceph.  Thanks,
Btrfs: fix how we deal with the orphan block rsv

Ceph was hitting this race where we would remove an inode from the per-root
orphan list before we would release the space we had reserved for the inode.
We actually don't need a list or anything, we just need to make sure the
root doesn't try to free up the orphan reserve until after the inodes have
released their reservations.  So use an atomic counter instead of a list on
the root and only decrement the counter after we've released our
reservation.  I've tested this as well as several others and we no longer
see the warnings that you would see while running ceph.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
fs/btrfs/btrfs_inode.h
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/inode.c