Skip to content

Commit 765f828

Browse files
fdmananakdave
authored andcommitted
btrfs: pass fs_info to functions that search for delayed ref heads
One of the following patches in the series will need to access fs_info in the function find_ref_head(), so pass a fs_info argument to it as well as to the functions btrfs_select_ref_head() and btrfs_find_delayed_ref_head() which call find_ref_head(). Reviewed-by: Boris Burkov <boris@bur.io> Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent 58a4391 commit 765f828

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

fs/btrfs/backref.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1442,7 +1442,8 @@ static int find_parent_nodes(struct btrfs_backref_walk_ctx *ctx,
14421442
*/
14431443
delayed_refs = &ctx->trans->transaction->delayed_refs;
14441444
spin_lock(&delayed_refs->lock);
1445-
head = btrfs_find_delayed_ref_head(delayed_refs, ctx->bytenr);
1445+
head = btrfs_find_delayed_ref_head(ctx->fs_info, delayed_refs,
1446+
ctx->bytenr);
14461447
if (head) {
14471448
if (!mutex_trylock(&head->mutex)) {
14481449
refcount_inc(&head->refs);

fs/btrfs/delayed-ref.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ static struct btrfs_delayed_ref_head *find_first_ref_head(
399399
* is given, the next bigger entry is returned if no exact match is found.
400400
*/
401401
static struct btrfs_delayed_ref_head *find_ref_head(
402+
const struct btrfs_fs_info *fs_info,
402403
struct btrfs_delayed_ref_root *dr, u64 bytenr,
403404
bool return_bigger)
404405
{
@@ -558,15 +559,16 @@ int btrfs_check_delayed_seq(struct btrfs_fs_info *fs_info, u64 seq)
558559
}
559560

560561
struct btrfs_delayed_ref_head *btrfs_select_ref_head(
562+
const struct btrfs_fs_info *fs_info,
561563
struct btrfs_delayed_ref_root *delayed_refs)
562564
{
563565
struct btrfs_delayed_ref_head *head;
564566
bool locked;
565567

566568
spin_lock(&delayed_refs->lock);
567569
again:
568-
head = find_ref_head(delayed_refs, delayed_refs->run_delayed_start,
569-
true);
570+
head = find_ref_head(fs_info, delayed_refs,
571+
delayed_refs->run_delayed_start, true);
570572
if (!head && delayed_refs->run_delayed_start != 0) {
571573
delayed_refs->run_delayed_start = 0;
572574
head = find_first_ref_head(delayed_refs);
@@ -1188,11 +1190,13 @@ void btrfs_put_delayed_ref(struct btrfs_delayed_ref_node *ref)
11881190
* head node if found, or NULL if not.
11891191
*/
11901192
struct btrfs_delayed_ref_head *
1191-
btrfs_find_delayed_ref_head(struct btrfs_delayed_ref_root *delayed_refs, u64 bytenr)
1193+
btrfs_find_delayed_ref_head(const struct btrfs_fs_info *fs_info,
1194+
struct btrfs_delayed_ref_root *delayed_refs,
1195+
u64 bytenr)
11921196
{
11931197
lockdep_assert_held(&delayed_refs->lock);
11941198

1195-
return find_ref_head(delayed_refs, bytenr, false);
1199+
return find_ref_head(fs_info, delayed_refs, bytenr, false);
11961200
}
11971201

11981202
static int find_comp(struct btrfs_delayed_ref_node *entry, u64 root, u64 parent)

fs/btrfs/delayed-ref.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,8 @@ void btrfs_merge_delayed_refs(struct btrfs_fs_info *fs_info,
367367
struct btrfs_delayed_ref_head *head);
368368

369369
struct btrfs_delayed_ref_head *
370-
btrfs_find_delayed_ref_head(struct btrfs_delayed_ref_root *delayed_refs,
370+
btrfs_find_delayed_ref_head(const struct btrfs_fs_info *fs_info,
371+
struct btrfs_delayed_ref_root *delayed_refs,
371372
u64 bytenr);
372373
static inline void btrfs_delayed_ref_unlock(struct btrfs_delayed_ref_head *head)
373374
{
@@ -377,6 +378,7 @@ void btrfs_delete_ref_head(struct btrfs_delayed_ref_root *delayed_refs,
377378
struct btrfs_delayed_ref_head *head);
378379

379380
struct btrfs_delayed_ref_head *btrfs_select_ref_head(
381+
const struct btrfs_fs_info *fs_info,
380382
struct btrfs_delayed_ref_root *delayed_refs);
381383
void btrfs_unselect_ref_head(struct btrfs_delayed_ref_root *delayed_refs,
382384
struct btrfs_delayed_ref_head *head);

fs/btrfs/extent-tree.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
182182

183183
delayed_refs = &trans->transaction->delayed_refs;
184184
spin_lock(&delayed_refs->lock);
185-
head = btrfs_find_delayed_ref_head(delayed_refs, bytenr);
185+
head = btrfs_find_delayed_ref_head(fs_info, delayed_refs, bytenr);
186186
if (head) {
187187
if (!mutex_trylock(&head->mutex)) {
188188
refcount_inc(&head->refs);
@@ -2049,7 +2049,7 @@ static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
20492049

20502050
do {
20512051
if (!locked_ref) {
2052-
locked_ref = btrfs_select_ref_head(delayed_refs);
2052+
locked_ref = btrfs_select_ref_head(fs_info, delayed_refs);
20532053
if (IS_ERR_OR_NULL(locked_ref)) {
20542054
if (PTR_ERR(locked_ref) == -EAGAIN) {
20552055
continue;
@@ -2251,7 +2251,7 @@ static noinline int check_delayed_ref(struct btrfs_root *root,
22512251

22522252
delayed_refs = &cur_trans->delayed_refs;
22532253
spin_lock(&delayed_refs->lock);
2254-
head = btrfs_find_delayed_ref_head(delayed_refs, bytenr);
2254+
head = btrfs_find_delayed_ref_head(root->fs_info, delayed_refs, bytenr);
22552255
if (!head) {
22562256
spin_unlock(&delayed_refs->lock);
22572257
btrfs_put_transaction(cur_trans);
@@ -3359,7 +3359,7 @@ static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
33593359

33603360
delayed_refs = &trans->transaction->delayed_refs;
33613361
spin_lock(&delayed_refs->lock);
3362-
head = btrfs_find_delayed_ref_head(delayed_refs, bytenr);
3362+
head = btrfs_find_delayed_ref_head(trans->fs_info, delayed_refs, bytenr);
33633363
if (!head)
33643364
goto out_delayed_unlock;
33653365

@@ -5494,7 +5494,7 @@ static int check_ref_exists(struct btrfs_trans_handle *trans,
54945494
*/
54955495
delayed_refs = &trans->transaction->delayed_refs;
54965496
spin_lock(&delayed_refs->lock);
5497-
head = btrfs_find_delayed_ref_head(delayed_refs, bytenr);
5497+
head = btrfs_find_delayed_ref_head(root->fs_info, delayed_refs, bytenr);
54985498
if (!head)
54995499
goto out;
55005500
if (!mutex_trylock(&head->mutex)) {

0 commit comments

Comments
 (0)