summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-03-04 17:54:28 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2019-03-08 12:53:55 -0500
commit7122e30971ded32fc647b292360d876b63caafbe (patch)
treebcecbad9c8f1673c176e2d88d87e3c91ba9f6992
parent97d1478c44d97c72a226f659d9c981954716166f (diff)
bcachefs: Remove direct use of bch2_btree_iter_link()
-rw-r--r--fs/bcachefs/btree_iter.c4
-rw-r--r--fs/bcachefs/btree_iter.h2
-rw-r--r--fs/bcachefs/fs-io.c35
3 files changed, 22 insertions, 19 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index 73e2c5ef2eab..263cd18fade5 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -1610,7 +1610,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;
@@ -1629,7 +1629,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));
diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h
index 3fb3879818cc..7c49a661277a 100644
--- a/fs/bcachefs/btree_iter.h
+++ b/fs/bcachefs/btree_iter.h
@@ -165,8 +165,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,
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c
index 04b1790d5857..cabd3e08a117 100644
--- a/fs/bcachefs/fs-io.c
+++ b/fs/bcachefs/fs-io.c
@@ -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;