mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-13 09:54:04 +00:00
btrfs: add btrfs_delete_ref_head helper
We do this dance in cleanup_ref_head and check_ref_cleanup, unify it into a helper and cleanup the calling functions. Reviewed-by: Omar Sandoval <osandov@fb.com> Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Josef Bacik <jbacik@fb.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
fdb1e12180
commit
d7baffdaf9
3 changed files with 19 additions and 20 deletions
|
@ -400,6 +400,20 @@ again:
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void btrfs_delete_ref_head(struct btrfs_delayed_ref_root *delayed_refs,
|
||||||
|
struct btrfs_delayed_ref_head *head)
|
||||||
|
{
|
||||||
|
lockdep_assert_held(&delayed_refs->lock);
|
||||||
|
lockdep_assert_held(&head->lock);
|
||||||
|
|
||||||
|
rb_erase_cached(&head->href_node, &delayed_refs->href_root);
|
||||||
|
RB_CLEAR_NODE(&head->href_node);
|
||||||
|
atomic_dec(&delayed_refs->num_entries);
|
||||||
|
delayed_refs->num_heads--;
|
||||||
|
if (head->processing == 0)
|
||||||
|
delayed_refs->num_heads_ready--;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helper to insert the ref_node to the tail or merge with tail.
|
* Helper to insert the ref_node to the tail or merge with tail.
|
||||||
*
|
*
|
||||||
|
|
|
@ -261,7 +261,8 @@ static inline void btrfs_delayed_ref_unlock(struct btrfs_delayed_ref_head *head)
|
||||||
{
|
{
|
||||||
mutex_unlock(&head->mutex);
|
mutex_unlock(&head->mutex);
|
||||||
}
|
}
|
||||||
|
void btrfs_delete_ref_head(struct btrfs_delayed_ref_root *delayed_refs,
|
||||||
|
struct btrfs_delayed_ref_head *head);
|
||||||
|
|
||||||
struct btrfs_delayed_ref_head *btrfs_select_ref_head(
|
struct btrfs_delayed_ref_head *btrfs_select_ref_head(
|
||||||
struct btrfs_delayed_ref_root *delayed_refs);
|
struct btrfs_delayed_ref_root *delayed_refs);
|
||||||
|
|
|
@ -2474,12 +2474,9 @@ static int cleanup_ref_head(struct btrfs_trans_handle *trans,
|
||||||
spin_unlock(&delayed_refs->lock);
|
spin_unlock(&delayed_refs->lock);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
delayed_refs->num_heads--;
|
btrfs_delete_ref_head(delayed_refs, head);
|
||||||
rb_erase_cached(&head->href_node, &delayed_refs->href_root);
|
|
||||||
RB_CLEAR_NODE(&head->href_node);
|
|
||||||
spin_unlock(&head->lock);
|
spin_unlock(&head->lock);
|
||||||
spin_unlock(&delayed_refs->lock);
|
spin_unlock(&delayed_refs->lock);
|
||||||
atomic_dec(&delayed_refs->num_entries);
|
|
||||||
|
|
||||||
trace_run_delayed_ref_head(fs_info, head, 0);
|
trace_run_delayed_ref_head(fs_info, head, 0);
|
||||||
|
|
||||||
|
@ -6987,22 +6984,9 @@ static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
|
||||||
if (!mutex_trylock(&head->mutex))
|
if (!mutex_trylock(&head->mutex))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/*
|
btrfs_delete_ref_head(delayed_refs, head);
|
||||||
* at this point we have a head with no other entries. Go
|
|
||||||
* ahead and process it.
|
|
||||||
*/
|
|
||||||
rb_erase_cached(&head->href_node, &delayed_refs->href_root);
|
|
||||||
RB_CLEAR_NODE(&head->href_node);
|
|
||||||
atomic_dec(&delayed_refs->num_entries);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* we don't take a ref on the node because we're removing it from the
|
|
||||||
* tree, so we just steal the ref the tree was holding.
|
|
||||||
*/
|
|
||||||
delayed_refs->num_heads--;
|
|
||||||
if (head->processing == 0)
|
|
||||||
delayed_refs->num_heads_ready--;
|
|
||||||
head->processing = 0;
|
head->processing = 0;
|
||||||
|
|
||||||
spin_unlock(&head->lock);
|
spin_unlock(&head->lock);
|
||||||
spin_unlock(&delayed_refs->lock);
|
spin_unlock(&delayed_refs->lock);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue