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

bcachefs: bch2_mark_key() now takes btree_id & level

btree & level are passed to trans_mark - for backpointers -
bch2_mark_key() should take them as well.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>

+37 -21
+6 -6
fs/bcachefs/bkey_methods.h
··· 29 29 bool (*key_merge)(struct bch_fs *, struct bkey_s, struct bkey_s_c); 30 30 int (*trans_trigger)(struct btree_trans *, enum btree_id, unsigned, 31 31 struct bkey_s_c, struct bkey_i *, unsigned); 32 - int (*atomic_trigger)(struct btree_trans *, struct bkey_s_c, 33 - struct bkey_s_c, unsigned); 32 + int (*atomic_trigger)(struct btree_trans *, enum btree_id, unsigned, 33 + struct bkey_s_c, struct bkey_s_c, unsigned); 34 34 void (*compat)(enum btree_id id, unsigned version, 35 35 unsigned big_endian, int write, 36 36 struct bkey_s); ··· 68 68 bool bch2_bkey_merge(struct bch_fs *, struct bkey_s, struct bkey_s_c); 69 69 70 70 static inline int bch2_mark_key(struct btree_trans *trans, 71 - struct bkey_s_c old, 72 - struct bkey_s_c new, 73 - unsigned flags) 71 + enum btree_id btree, unsigned level, 72 + struct bkey_s_c old, struct bkey_s_c new, 73 + unsigned flags) 74 74 { 75 75 const struct bkey_ops *ops = &bch2_bkey_ops[old.k->type ?: new.k->type]; 76 76 77 77 return ops->atomic_trigger 78 - ? ops->atomic_trigger(trans, old, new, flags) 78 + ? ops->atomic_trigger(trans, btree, level, old, new, flags) 79 79 : 0; 80 80 } 81 81
+3 -3
fs/bcachefs/btree_gc.c
··· 808 808 } 809 809 810 810 ret = commit_do(trans, NULL, NULL, 0, 811 - bch2_mark_key(trans, old, *k, flags)); 811 + bch2_mark_key(trans, btree_id, level, old, *k, flags)); 812 812 fsck_err: 813 813 err: 814 814 if (ret) ··· 887 887 if (!btree_node_fake(b)) { 888 888 struct bkey_s_c k = bkey_i_to_s_c(&b->key); 889 889 890 - ret = bch2_gc_mark_key(trans, b->c.btree_id, b->c.level, 890 + ret = bch2_gc_mark_key(trans, b->c.btree_id, b->c.level + 1, 891 891 true, &k, initial); 892 892 } 893 893 gc_pos_set(c, gc_pos_btree_root(b->c.btree_id)); ··· 1040 1040 if (!ret) { 1041 1041 struct bkey_s_c k = bkey_i_to_s_c(&b->key); 1042 1042 1043 - ret = bch2_gc_mark_key(trans, b->c.btree_id, b->c.level, true, 1043 + ret = bch2_gc_mark_key(trans, b->c.btree_id, b->c.level + 1, true, 1044 1044 &k, true); 1045 1045 } 1046 1046 fsck_err:
+6 -3
fs/bcachefs/btree_update_leaf.c
··· 434 434 if (bch2_bkey_ops[old.k->type].atomic_trigger == 435 435 bch2_bkey_ops[i->k->k.type].atomic_trigger && 436 436 ((1U << old.k->type) & BTREE_TRIGGER_WANTS_OLD_AND_NEW)) { 437 - ret = bch2_mark_key(trans, old, bkey_i_to_s_c(new), 437 + ret = bch2_mark_key(trans, i->btree_id, i->level, 438 + old, bkey_i_to_s_c(new), 438 439 BTREE_TRIGGER_INSERT|BTREE_TRIGGER_OVERWRITE|flags); 439 440 } else { 440 441 struct bkey _deleted = KEY(0, 0, 0); ··· 443 442 444 443 _deleted.p = i->path->pos; 445 444 446 - ret = bch2_mark_key(trans, deleted, bkey_i_to_s_c(new), 445 + ret = bch2_mark_key(trans, i->btree_id, i->level, 446 + deleted, bkey_i_to_s_c(new), 447 447 BTREE_TRIGGER_INSERT|flags) ?: 448 - bch2_mark_key(trans, old, deleted, 448 + bch2_mark_key(trans, i->btree_id, i->level, 449 + old, deleted, 449 450 BTREE_TRIGGER_OVERWRITE|flags); 450 451 } 451 452
+6
fs/bcachefs/buckets.c
··· 486 486 } 487 487 488 488 int bch2_mark_alloc(struct btree_trans *trans, 489 + enum btree_id btree, unsigned level, 489 490 struct bkey_s_c old, struct bkey_s_c new, 490 491 unsigned flags) 491 492 { ··· 930 929 } 931 930 932 931 int bch2_mark_extent(struct btree_trans *trans, 932 + enum btree_id btree_id, unsigned level, 933 933 struct bkey_s_c old, struct bkey_s_c new, 934 934 unsigned flags) 935 935 { ··· 1014 1012 } 1015 1013 1016 1014 int bch2_mark_stripe(struct btree_trans *trans, 1015 + enum btree_id btree_id, unsigned level, 1017 1016 struct bkey_s_c old, struct bkey_s_c new, 1018 1017 unsigned flags) 1019 1018 { ··· 1120 1117 } 1121 1118 1122 1119 int bch2_mark_inode(struct btree_trans *trans, 1120 + enum btree_id btree_id, unsigned level, 1123 1121 struct bkey_s_c old, struct bkey_s_c new, 1124 1122 unsigned flags) 1125 1123 { ··· 1152 1148 } 1153 1149 1154 1150 int bch2_mark_reservation(struct btree_trans *trans, 1151 + enum btree_id btree_id, unsigned level, 1155 1152 struct bkey_s_c old, struct bkey_s_c new, 1156 1153 unsigned flags) 1157 1154 { ··· 1239 1234 } 1240 1235 1241 1236 int bch2_mark_reflink_p(struct btree_trans *trans, 1237 + enum btree_id btree_id, unsigned level, 1242 1238 struct bkey_s_c old, struct bkey_s_c new, 1243 1239 unsigned flags) 1244 1240 {
+12 -6
fs/bcachefs/buckets.h
··· 235 235 size_t, enum bch_data_type, unsigned, 236 236 struct gc_pos, unsigned); 237 237 238 - int bch2_mark_alloc(struct btree_trans *, struct bkey_s_c, struct bkey_s_c, unsigned); 239 - int bch2_mark_extent(struct btree_trans *, struct bkey_s_c, struct bkey_s_c, unsigned); 240 - int bch2_mark_stripe(struct btree_trans *, struct bkey_s_c, struct bkey_s_c, unsigned); 241 - int bch2_mark_inode(struct btree_trans *, struct bkey_s_c, struct bkey_s_c, unsigned); 242 - int bch2_mark_reservation(struct btree_trans *, struct bkey_s_c, struct bkey_s_c, unsigned); 243 - int bch2_mark_reflink_p(struct btree_trans *, struct bkey_s_c, struct bkey_s_c, unsigned); 238 + int bch2_mark_alloc(struct btree_trans *, enum btree_id, unsigned, 239 + struct bkey_s_c, struct bkey_s_c, unsigned); 240 + int bch2_mark_extent(struct btree_trans *, enum btree_id, unsigned, 241 + struct bkey_s_c, struct bkey_s_c, unsigned); 242 + int bch2_mark_stripe(struct btree_trans *, enum btree_id, unsigned, 243 + struct bkey_s_c, struct bkey_s_c, unsigned); 244 + int bch2_mark_inode(struct btree_trans *, enum btree_id, unsigned, 245 + struct bkey_s_c, struct bkey_s_c, unsigned); 246 + int bch2_mark_reservation(struct btree_trans *, enum btree_id, unsigned, 247 + struct bkey_s_c, struct bkey_s_c, unsigned); 248 + int bch2_mark_reflink_p(struct btree_trans *, enum btree_id, unsigned, 249 + struct bkey_s_c, struct bkey_s_c, unsigned); 244 250 245 251 int bch2_trans_mark_extent(struct btree_trans *, enum btree_id, unsigned, struct bkey_s_c, struct bkey_i *, unsigned); 246 252 int bch2_trans_mark_stripe(struct btree_trans *, enum btree_id, unsigned, struct bkey_s_c, struct bkey_i *, unsigned);
+2 -1
fs/bcachefs/subvolume.c
··· 76 76 } 77 77 78 78 int bch2_mark_snapshot(struct btree_trans *trans, 79 + enum btree_id btree, unsigned level, 79 80 struct bkey_s_c old, struct bkey_s_c new, 80 81 unsigned flags) 81 82 { ··· 362 361 363 362 for_each_btree_key2(&trans, iter, BTREE_ID_snapshots, 364 363 POS_MIN, 0, k, 365 - bch2_mark_snapshot(&trans, bkey_s_c_null, k, 0) ?: 364 + bch2_mark_snapshot(&trans, BTREE_ID_snapshots, 0, bkey_s_c_null, k, 0) ?: 366 365 bch2_snapshot_set_equiv(&trans, k)); 367 366 368 367 bch2_trans_exit(&trans);
+2 -2
fs/bcachefs/subvolume.h
··· 8 8 void bch2_snapshot_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c); 9 9 int bch2_snapshot_invalid(const struct bch_fs *, struct bkey_s_c, 10 10 unsigned, struct printbuf *); 11 - int bch2_mark_snapshot(struct btree_trans *, struct bkey_s_c, 12 - struct bkey_s_c, unsigned); 11 + int bch2_mark_snapshot(struct btree_trans *, enum btree_id, unsigned, 12 + struct bkey_s_c, struct bkey_s_c, unsigned); 13 13 14 14 #define bch2_bkey_ops_snapshot ((struct bkey_ops) { \ 15 15 .key_invalid = bch2_snapshot_invalid, \