Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Josef Bacik and committed by
David Sterba
d7baffda fdb1e121

+19 -20
+14
fs/btrfs/delayed-ref.c
··· 400 400 return head; 401 401 } 402 402 403 + void btrfs_delete_ref_head(struct btrfs_delayed_ref_root *delayed_refs, 404 + struct btrfs_delayed_ref_head *head) 405 + { 406 + lockdep_assert_held(&delayed_refs->lock); 407 + lockdep_assert_held(&head->lock); 408 + 409 + rb_erase_cached(&head->href_node, &delayed_refs->href_root); 410 + RB_CLEAR_NODE(&head->href_node); 411 + atomic_dec(&delayed_refs->num_entries); 412 + delayed_refs->num_heads--; 413 + if (head->processing == 0) 414 + delayed_refs->num_heads_ready--; 415 + } 416 + 403 417 /* 404 418 * Helper to insert the ref_node to the tail or merge with tail. 405 419 *
+2 -1
fs/btrfs/delayed-ref.h
··· 261 261 { 262 262 mutex_unlock(&head->mutex); 263 263 } 264 - 264 + void btrfs_delete_ref_head(struct btrfs_delayed_ref_root *delayed_refs, 265 + struct btrfs_delayed_ref_head *head); 265 266 266 267 struct btrfs_delayed_ref_head *btrfs_select_ref_head( 267 268 struct btrfs_delayed_ref_root *delayed_refs);
+3 -19
fs/btrfs/extent-tree.c
··· 2474 2474 spin_unlock(&delayed_refs->lock); 2475 2475 return 1; 2476 2476 } 2477 - delayed_refs->num_heads--; 2478 - rb_erase_cached(&head->href_node, &delayed_refs->href_root); 2479 - RB_CLEAR_NODE(&head->href_node); 2477 + btrfs_delete_ref_head(delayed_refs, head); 2480 2478 spin_unlock(&head->lock); 2481 2479 spin_unlock(&delayed_refs->lock); 2482 - atomic_dec(&delayed_refs->num_entries); 2483 2480 2484 2481 trace_run_delayed_ref_head(fs_info, head, 0); 2485 2482 ··· 6984 6987 if (!mutex_trylock(&head->mutex)) 6985 6988 goto out; 6986 6989 6987 - /* 6988 - * at this point we have a head with no other entries. Go 6989 - * ahead and process it. 6990 - */ 6991 - rb_erase_cached(&head->href_node, &delayed_refs->href_root); 6992 - RB_CLEAR_NODE(&head->href_node); 6993 - atomic_dec(&delayed_refs->num_entries); 6994 - 6995 - /* 6996 - * we don't take a ref on the node because we're removing it from the 6997 - * tree, so we just steal the ref the tree was holding. 6998 - */ 6999 - delayed_refs->num_heads--; 7000 - if (head->processing == 0) 7001 - delayed_refs->num_heads_ready--; 6990 + btrfs_delete_ref_head(delayed_refs, head); 7002 6991 head->processing = 0; 6992 + 7003 6993 spin_unlock(&head->lock); 7004 6994 spin_unlock(&delayed_refs->lock); 7005 6995