Commit baa3ba39 authored by Nikolay Borisov's avatar Nikolay Borisov Committed by David Sterba

btrfs: Make drop_outstanding_extent take btrfs_inode

Signed-off-by: default avatarNikolay Borisov <nborisov@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 04f4f916
...@@ -5846,7 +5846,8 @@ void btrfs_subvolume_release_metadata(struct btrfs_fs_info *fs_info, ...@@ -5846,7 +5846,8 @@ void btrfs_subvolume_release_metadata(struct btrfs_fs_info *fs_info,
* reserved extents that need to be freed. This must be called with * reserved extents that need to be freed. This must be called with
* BTRFS_I(inode)->lock held. * BTRFS_I(inode)->lock held.
*/ */
static unsigned drop_outstanding_extent(struct inode *inode, u64 num_bytes) static unsigned drop_outstanding_extent(struct btrfs_inode *inode,
u64 num_bytes)
{ {
unsigned drop_inode_space = 0; unsigned drop_inode_space = 0;
unsigned dropped_extents = 0; unsigned dropped_extents = 0;
...@@ -5854,25 +5855,23 @@ static unsigned drop_outstanding_extent(struct inode *inode, u64 num_bytes) ...@@ -5854,25 +5855,23 @@ static unsigned drop_outstanding_extent(struct inode *inode, u64 num_bytes)
num_extents = count_max_extents(num_bytes); num_extents = count_max_extents(num_bytes);
ASSERT(num_extents); ASSERT(num_extents);
ASSERT(BTRFS_I(inode)->outstanding_extents >= num_extents); ASSERT(inode->outstanding_extents >= num_extents);
BTRFS_I(inode)->outstanding_extents -= num_extents; inode->outstanding_extents -= num_extents;
if (BTRFS_I(inode)->outstanding_extents == 0 && if (inode->outstanding_extents == 0 &&
test_and_clear_bit(BTRFS_INODE_DELALLOC_META_RESERVED, test_and_clear_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
&BTRFS_I(inode)->runtime_flags)) &inode->runtime_flags))
drop_inode_space = 1; drop_inode_space = 1;
/* /*
* If we have more or the same amount of outstanding extents than we have * If we have more or the same amount of outstanding extents than we have
* reserved then we need to leave the reserved extents count alone. * reserved then we need to leave the reserved extents count alone.
*/ */
if (BTRFS_I(inode)->outstanding_extents >= if (inode->outstanding_extents >= inode->reserved_extents)
BTRFS_I(inode)->reserved_extents)
return drop_inode_space; return drop_inode_space;
dropped_extents = BTRFS_I(inode)->reserved_extents - dropped_extents = inode->reserved_extents - inode->outstanding_extents;
BTRFS_I(inode)->outstanding_extents; inode->reserved_extents -= dropped_extents;
BTRFS_I(inode)->reserved_extents -= dropped_extents;
return dropped_extents + drop_inode_space; return dropped_extents + drop_inode_space;
} }
...@@ -6015,7 +6014,7 @@ int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes) ...@@ -6015,7 +6014,7 @@ int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes)
out_fail: out_fail:
spin_lock(&BTRFS_I(inode)->lock); spin_lock(&BTRFS_I(inode)->lock);
dropped = drop_outstanding_extent(inode, num_bytes); dropped = drop_outstanding_extent(BTRFS_I(inode), num_bytes);
/* /*
* If the inodes csum_bytes is the same as the original * If the inodes csum_bytes is the same as the original
* csum_bytes then we know we haven't raced with any free()ers * csum_bytes then we know we haven't raced with any free()ers
...@@ -6094,7 +6093,7 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes) ...@@ -6094,7 +6093,7 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
num_bytes = ALIGN(num_bytes, fs_info->sectorsize); num_bytes = ALIGN(num_bytes, fs_info->sectorsize);
spin_lock(&BTRFS_I(inode)->lock); spin_lock(&BTRFS_I(inode)->lock);
dropped = drop_outstanding_extent(inode, num_bytes); dropped = drop_outstanding_extent(BTRFS_I(inode), num_bytes);
if (num_bytes) if (num_bytes)
to_free = calc_csum_metadata_size(inode, num_bytes, 0); to_free = calc_csum_metadata_size(inode, num_bytes, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment