bcachefs: bch2_btree_bit_mod()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 9 Feb 2024 00:23:56 +0000 (19:23 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 14 Mar 2024 01:22:24 +0000 (21:22 -0400)
Provide a non-write buffer version of bch2_btree_bit_mod_buffered(), for
the subvolume children btree.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_update.c
fs/bcachefs/btree_update.h

index 390daa4b15b20605258f5a984fb38d33decd4ec0..45994fbac6458e06c2846896e8c1d6679e4812e4 100644 (file)
@@ -785,6 +785,27 @@ int bch2_btree_delete_range(struct bch_fs *c, enum btree_id id,
        return ret;
 }
 
+int bch2_btree_bit_mod(struct btree_trans *trans, enum btree_id btree,
+                      struct bpos pos, bool set)
+{
+       struct bkey_i *k = bch2_trans_kmalloc(trans, sizeof(*k));
+       int ret = PTR_ERR_OR_ZERO(k);
+       if (ret)
+               return ret;
+
+       bkey_init(&k->k);
+       k->k.type = set ? KEY_TYPE_set : KEY_TYPE_deleted;
+       k->k.p = pos;
+
+       struct btree_iter iter;
+       bch2_trans_iter_init(trans, &iter, btree, pos, BTREE_ITER_INTENT);
+
+       ret   = bch2_btree_iter_traverse(&iter) ?:
+               bch2_trans_update(trans, &iter, k, 0);
+       bch2_trans_iter_exit(trans, &iter);
+       return ret;
+}
+
 int bch2_btree_bit_mod_buffered(struct btree_trans *trans, enum btree_id btree,
                                struct bpos pos, bool set)
 {
index 75ffd82e0fc4939f9e86fa25b22d033ae86abdc6..cc7c53e83f89dd5cdc8ccccab214ae3cbfd3fb72 100644 (file)
@@ -62,6 +62,7 @@ int bch2_btree_delete_range_trans(struct btree_trans *, enum btree_id,
 int bch2_btree_delete_range(struct bch_fs *, enum btree_id,
                            struct bpos, struct bpos, unsigned, u64 *);
 
+int bch2_btree_bit_mod(struct btree_trans *, enum btree_id, struct bpos, bool);
 int bch2_btree_bit_mod_buffered(struct btree_trans *, enum btree_id, struct bpos, bool);
 
 static inline int bch2_btree_delete_at_buffered(struct btree_trans *trans,