mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
btrfs: remove the free space inode ordered extent special cases
Free space inodes never have ordered extents anymore. Drop the lockdep exceptions for them and btrfs_join_transaction_spacecache(), which was only used to finish their ordered extents during a commit. Assisted-by: LLM Signed-off-by: Tal Zussman <tz2294@columbia.edu> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
27b43d2e8f
commit
d6c5cf6c58
|
|
@ -3221,7 +3221,6 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
|
|||
int compress_type = 0;
|
||||
int ret = 0;
|
||||
u64 logical_len = ordered_extent->num_bytes;
|
||||
bool freespace_inode;
|
||||
bool truncated = false;
|
||||
bool clear_reserved_extent = true;
|
||||
unsigned int clear_bits = 0;
|
||||
|
|
@ -3238,9 +3237,7 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
|
|||
if (!test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags))
|
||||
clear_bits |= EXTENT_DEFRAG;
|
||||
|
||||
freespace_inode = btrfs_is_free_space_inode(inode);
|
||||
if (!freespace_inode)
|
||||
btrfs_lockdep_acquire(fs_info, btrfs_ordered_extent);
|
||||
btrfs_lockdep_acquire(fs_info, btrfs_ordered_extent);
|
||||
|
||||
if (unlikely(test_bit(BTRFS_ORDERED_IOERR, &ordered_extent->flags))) {
|
||||
ret = -EIO;
|
||||
|
|
@ -3275,10 +3272,7 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
|
|||
&cached_state);
|
||||
}
|
||||
|
||||
if (freespace_inode)
|
||||
trans = btrfs_join_transaction_spacecache(root);
|
||||
else
|
||||
trans = btrfs_join_transaction(root);
|
||||
trans = btrfs_join_transaction(root);
|
||||
if (IS_ERR(trans)) {
|
||||
ret = PTR_ERR(trans);
|
||||
trans = NULL;
|
||||
|
|
@ -8137,7 +8131,6 @@ void btrfs_destroy_inode(struct inode *vfs_inode)
|
|||
struct btrfs_ordered_extent *ordered;
|
||||
struct btrfs_inode *inode = BTRFS_I(vfs_inode);
|
||||
struct btrfs_root *root = inode->root;
|
||||
bool freespace_inode;
|
||||
|
||||
WARN_ON(!hlist_empty(&vfs_inode->i_dentry));
|
||||
WARN_ON(vfs_inode->i_data.nrpages);
|
||||
|
|
@ -8160,12 +8153,6 @@ void btrfs_destroy_inode(struct inode *vfs_inode)
|
|||
if (!root)
|
||||
return;
|
||||
|
||||
/*
|
||||
* If this is a free space inode do not take the ordered extents lockdep
|
||||
* map.
|
||||
*/
|
||||
freespace_inode = btrfs_is_free_space_inode(inode);
|
||||
|
||||
while (1) {
|
||||
ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1);
|
||||
if (!ordered)
|
||||
|
|
@ -8175,8 +8162,7 @@ void btrfs_destroy_inode(struct inode *vfs_inode)
|
|||
"found ordered extent %llu %llu on inode cleanup",
|
||||
ordered->file_offset, ordered->num_bytes);
|
||||
|
||||
if (!freespace_inode)
|
||||
btrfs_lockdep_acquire(root->fs_info, btrfs_ordered_extent);
|
||||
btrfs_lockdep_acquire(root->fs_info, btrfs_ordered_extent);
|
||||
|
||||
btrfs_remove_ordered_extent(ordered);
|
||||
btrfs_put_ordered_extent(ordered);
|
||||
|
|
|
|||
|
|
@ -654,13 +654,6 @@ void btrfs_remove_ordered_extent(struct btrfs_ordered_extent *entry)
|
|||
struct btrfs_fs_info *fs_info = root->fs_info;
|
||||
struct rb_node *node;
|
||||
bool pending;
|
||||
bool freespace_inode;
|
||||
|
||||
/*
|
||||
* If this is a free space inode the thread has not acquired the ordered
|
||||
* extents lockdep map.
|
||||
*/
|
||||
freespace_inode = btrfs_is_free_space_inode(btrfs_inode);
|
||||
|
||||
btrfs_lockdep_acquire(fs_info, btrfs_trans_pending_ordered);
|
||||
/* This is paired with alloc_ordered_extent(). */
|
||||
|
|
@ -735,8 +728,7 @@ void btrfs_remove_ordered_extent(struct btrfs_ordered_extent *entry)
|
|||
}
|
||||
spin_unlock(&root->ordered_extent_lock);
|
||||
wake_up(&entry->wait);
|
||||
if (!freespace_inode)
|
||||
btrfs_lockdep_release(fs_info, btrfs_ordered_extent);
|
||||
btrfs_lockdep_release(fs_info, btrfs_ordered_extent);
|
||||
}
|
||||
|
||||
static void btrfs_run_ordered_extent_work(struct btrfs_work *work)
|
||||
|
|
@ -867,16 +859,9 @@ void btrfs_start_ordered_extent_nowriteback(struct btrfs_ordered_extent *entry,
|
|||
u64 start = entry->file_offset;
|
||||
u64 end = start + entry->num_bytes - 1;
|
||||
struct btrfs_inode *inode = entry->inode;
|
||||
bool freespace_inode;
|
||||
|
||||
trace_btrfs_ordered_extent_start(inode, entry);
|
||||
|
||||
/*
|
||||
* If this is a free space inode do not take the ordered extents lockdep
|
||||
* map.
|
||||
*/
|
||||
freespace_inode = btrfs_is_free_space_inode(inode);
|
||||
|
||||
/*
|
||||
* pages in the range can be dirty, clean or writeback. We
|
||||
* start IO on any dirty ones so the wait doesn't stall waiting
|
||||
|
|
@ -896,8 +881,7 @@ void btrfs_start_ordered_extent_nowriteback(struct btrfs_ordered_extent *entry,
|
|||
}
|
||||
}
|
||||
|
||||
if (!freespace_inode)
|
||||
btrfs_might_wait_for_event(inode->root->fs_info, btrfs_ordered_extent);
|
||||
btrfs_might_wait_for_event(inode->root->fs_info, btrfs_ordered_extent);
|
||||
wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE, &entry->flags));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -895,12 +895,6 @@ struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root)
|
|||
true);
|
||||
}
|
||||
|
||||
struct btrfs_trans_handle *btrfs_join_transaction_spacecache(struct btrfs_root *root)
|
||||
{
|
||||
return start_transaction(root, 0, TRANS_JOIN_NOLOCK,
|
||||
BTRFS_RESERVE_NO_FLUSH, true);
|
||||
}
|
||||
|
||||
/*
|
||||
* Similar to regular join but it never starts a transaction when none is
|
||||
* running or when there's a running one at a state >= TRANS_STATE_UNBLOCKED.
|
||||
|
|
|
|||
|
|
@ -287,7 +287,6 @@ struct btrfs_trans_handle *btrfs_start_transaction_fallback_global_rsv(
|
|||
struct btrfs_root *root,
|
||||
unsigned int num_items);
|
||||
struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root);
|
||||
struct btrfs_trans_handle *btrfs_join_transaction_spacecache(struct btrfs_root *root);
|
||||
struct btrfs_trans_handle *btrfs_join_transaction_nostart(struct btrfs_root *root);
|
||||
struct btrfs_trans_handle *btrfs_attach_transaction(struct btrfs_root *root);
|
||||
struct btrfs_trans_handle *btrfs_attach_transaction_barrier(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user