bcachefs: Remove direct use of bch2_btree_iter_link()
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 4 Mar 2019 22:54:28 +0000 (17:54 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:17 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c
fs/bcachefs/btree_iter.h
fs/bcachefs/fs-io.c

index 3eb51724f9e152d693720bd76265fb60ebdd833c..01f829cc9cc7cefdab6bbc5896b6dc6de0f651da 100644 (file)
@@ -1611,7 +1611,7 @@ void __bch2_btree_iter_init(struct btree_iter *iter, struct bch_fs *c,
        prefetch(c->btree_roots[btree_id].b);
 }
 
-void bch2_btree_iter_unlink(struct btree_iter *iter)
+static void bch2_btree_iter_unlink(struct btree_iter *iter)
 {
        struct btree_iter *linked;
 
@@ -1630,7 +1630,7 @@ void bch2_btree_iter_unlink(struct btree_iter *iter)
        BUG();
 }
 
-void bch2_btree_iter_link(struct btree_iter *iter, struct btree_iter *new)
+static void bch2_btree_iter_link(struct btree_iter *iter, struct btree_iter *new)
 {
        BUG_ON(btree_iter_linked(new));
 
index a64ed6d321754431de97b597336a84d8468eab36..fcec373db39a101fbfff8ab918b9ec3b3fe56b70 100644 (file)
@@ -164,8 +164,6 @@ static inline void bch2_btree_iter_init(struct btree_iter *iter,
                                ?  BTREE_ITER_IS_EXTENTS : 0)|flags);
 }
 
-void bch2_btree_iter_link(struct btree_iter *, struct btree_iter *);
-void bch2_btree_iter_unlink(struct btree_iter *);
 void bch2_btree_iter_copy(struct btree_iter *, struct btree_iter *);
 
 static inline struct bpos btree_type_successor(enum btree_id id,
index f8657baf0521025495fa6637d1434458e75e9f8c..eda6d71646e10f649a28801be18e7ccf14784638 100644 (file)
@@ -229,20 +229,21 @@ static void i_sectors_acct(struct bch_fs *c, struct bch_inode_info *inode,
 
 /* normal i_size/i_sectors update machinery: */
 
-static s64 sum_sector_overwrites(struct bkey_i *new, struct btree_iter *_iter,
-                                bool *allocating)
+static int sum_sector_overwrites(struct btree_trans *trans,
+                                struct btree_iter *extent_iter,
+                                struct bkey_i *new, bool *allocating,
+                                s64 *delta)
 {
-       struct btree_iter iter;
+       struct btree_iter *iter;
        struct bkey_s_c old;
-       s64 delta = 0;
 
-       bch2_btree_iter_init(&iter, _iter->c, BTREE_ID_EXTENTS, POS_MIN,
-                            BTREE_ITER_SLOTS);
+       *delta = 0;
 
-       bch2_btree_iter_link(_iter, &iter);
-       bch2_btree_iter_copy(&iter, _iter);
+       iter = bch2_trans_copy_iter(trans, extent_iter);
+       if (IS_ERR(iter))
+               return PTR_ERR(iter);
 
-       old = bch2_btree_iter_peek_slot(&iter);
+       old = bch2_btree_iter_peek_slot(iter);
 
        while (1) {
                /*
@@ -258,7 +259,7 @@ static s64 sum_sector_overwrites(struct bkey_i *new, struct btree_iter *_iter,
                    bch2_bkey_nr_dirty_ptrs(bkey_i_to_s_c(new)))
                        *allocating = true;
 
-               delta += (min(new->k.p.offset,
+               *delta += (min(new->k.p.offset,
                              old.k->p.offset) -
                          max(bkey_start_offset(&new->k),
                              bkey_start_offset(old.k))) *
@@ -268,12 +269,11 @@ static s64 sum_sector_overwrites(struct bkey_i *new, struct btree_iter *_iter,
                if (bkey_cmp(old.k->p, new->k.p) >= 0)
                        break;
 
-               old = bch2_btree_iter_next_slot(&iter);
+               old = bch2_btree_iter_next_slot(iter);
        }
 
-       bch2_btree_iter_unlink(&iter);
-
-       return delta;
+       bch2_trans_iter_free(trans, iter);
+       return 0;
 }
 
 static int bch2_extent_update(struct btree_trans *trans,
@@ -303,7 +303,12 @@ static int bch2_extent_update(struct btree_trans *trans,
 
        bch2_extent_trim_atomic(k, extent_iter);
 
-       i_sectors_delta = sum_sector_overwrites(k, extent_iter, &allocating);
+       ret = sum_sector_overwrites(trans, extent_iter,
+                                   k, &allocating,
+                                   &i_sectors_delta);
+       if (ret)
+               return ret;
+
        if (!may_allocate && allocating)
                return -ENOSPC;