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

bcachefs: move "ptrs not changing" optimization to bch2_trigger_extent()

This is useful for btree ptrs as well, when we're just updating
sectors_written.

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

+12 -8
+12
fs/bcachefs/buckets.c
··· 1023 1023 struct bkey_s_c old, struct bkey_s new, 1024 1024 unsigned flags) 1025 1025 { 1026 + struct bkey_ptrs_c new_ptrs = bch2_bkey_ptrs_c(new.s_c); 1027 + struct bkey_ptrs_c old_ptrs = bch2_bkey_ptrs_c(old); 1028 + unsigned new_ptrs_bytes = (void *) new_ptrs.end - (void *) new_ptrs.start; 1029 + unsigned old_ptrs_bytes = (void *) old_ptrs.end - (void *) old_ptrs.start; 1030 + 1031 + /* if pointers aren't changing - nothing to do: */ 1032 + if (new_ptrs_bytes == old_ptrs_bytes && 1033 + !memcmp(new_ptrs.start, 1034 + old_ptrs.start, 1035 + new_ptrs_bytes)) 1036 + return 0; 1037 + 1026 1038 if (flags & BTREE_TRIGGER_TRANSACTIONAL) { 1027 1039 struct bch_fs *c = trans->c; 1028 1040 int mod = (int) bch2_bkey_needs_rebalance(c, new.s_c) -
-8
fs/bcachefs/reflink.c
··· 301 301 (flags & BTREE_TRIGGER_INSERT)) 302 302 check_indirect_extent_deleting(new, &flags); 303 303 304 - if (old.k->type == KEY_TYPE_reflink_v && 305 - new.k->type == KEY_TYPE_reflink_v && 306 - old.k->u64s == new.k->u64s && 307 - !memcmp(bkey_s_c_to_reflink_v(old).v->start, 308 - bkey_s_to_reflink_v(new).v->start, 309 - bkey_val_bytes(new.k) - 8)) 310 - return 0; 311 - 312 304 return bch2_trigger_extent(trans, btree_id, level, old, new, flags); 313 305 } 314 306