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

btrfs: add eb to btrfs_node_key_ptr_offset

This is a change needed for extent tree v2, as we will be growing the
header size. This exists in btrfs-progs currently, and not having it
makes syncing accessors.[ch] more problematic. So make this change to
set us up for extent tree v2 and match what btrfs-progs does to make
syncing easier.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>

authored by

Josef Bacik and committed by
David Sterba
e23efd8e 42c9419a

+20 -20
+1 -1
fs/btrfs/accessors.c
··· 168 168 void btrfs_node_key(const struct extent_buffer *eb, 169 169 struct btrfs_disk_key *disk_key, int nr) 170 170 { 171 - unsigned long ptr = btrfs_node_key_ptr_offset(nr); 171 + unsigned long ptr = btrfs_node_key_ptr_offset(eb, nr); 172 172 read_eb_member(eb, (struct btrfs_key_ptr *)ptr, 173 173 struct btrfs_key_ptr, key, disk_key); 174 174 }
+2 -2
fs/btrfs/accessors.h
··· 392 392 btrfs_set_key_generation(eb, (struct btrfs_key_ptr *)ptr, val); 393 393 } 394 394 395 - static inline unsigned long btrfs_node_key_ptr_offset(int nr) 395 + static inline unsigned long btrfs_node_key_ptr_offset(const struct extent_buffer *eb, int nr) 396 396 { 397 397 return offsetof(struct btrfs_node, ptrs) + 398 398 sizeof(struct btrfs_key_ptr) * nr; ··· 406 406 { 407 407 unsigned long ptr; 408 408 409 - ptr = btrfs_node_key_ptr_offset(nr); 409 + ptr = btrfs_node_key_ptr_offset(eb, nr); 410 410 write_eb_member(eb, (struct btrfs_key_ptr *)ptr, 411 411 struct btrfs_key_ptr, key, disk_key); 412 412 }
+14 -14
fs/btrfs/ctree.c
··· 2612 2612 return ret; 2613 2613 } 2614 2614 copy_extent_buffer(dst, src, 2615 - btrfs_node_key_ptr_offset(dst_nritems), 2616 - btrfs_node_key_ptr_offset(0), 2615 + btrfs_node_key_ptr_offset(dst, dst_nritems), 2616 + btrfs_node_key_ptr_offset(src, 0), 2617 2617 push_items * sizeof(struct btrfs_key_ptr)); 2618 2618 2619 2619 if (push_items < src_nritems) { ··· 2621 2621 * Don't call btrfs_tree_mod_log_insert_move() here, key removal 2622 2622 * was already fully logged by btrfs_tree_mod_log_eb_copy() above. 2623 2623 */ 2624 - memmove_extent_buffer(src, btrfs_node_key_ptr_offset(0), 2625 - btrfs_node_key_ptr_offset(push_items), 2624 + memmove_extent_buffer(src, btrfs_node_key_ptr_offset(src, 0), 2625 + btrfs_node_key_ptr_offset(src, push_items), 2626 2626 (src_nritems - push_items) * 2627 2627 sizeof(struct btrfs_key_ptr)); 2628 2628 } ··· 2682 2682 } 2683 2683 ret = btrfs_tree_mod_log_insert_move(dst, push_items, 0, dst_nritems); 2684 2684 BUG_ON(ret < 0); 2685 - memmove_extent_buffer(dst, btrfs_node_key_ptr_offset(push_items), 2686 - btrfs_node_key_ptr_offset(0), 2685 + memmove_extent_buffer(dst, btrfs_node_key_ptr_offset(dst, push_items), 2686 + btrfs_node_key_ptr_offset(dst, 0), 2687 2687 (dst_nritems) * 2688 2688 sizeof(struct btrfs_key_ptr)); 2689 2689 ··· 2694 2694 return ret; 2695 2695 } 2696 2696 copy_extent_buffer(dst, src, 2697 - btrfs_node_key_ptr_offset(0), 2698 - btrfs_node_key_ptr_offset(src_nritems - push_items), 2697 + btrfs_node_key_ptr_offset(dst, 0), 2698 + btrfs_node_key_ptr_offset(src, src_nritems - push_items), 2699 2699 push_items * sizeof(struct btrfs_key_ptr)); 2700 2700 2701 2701 btrfs_set_header_nritems(src, src_nritems - push_items); ··· 2798 2798 BUG_ON(ret < 0); 2799 2799 } 2800 2800 memmove_extent_buffer(lower, 2801 - btrfs_node_key_ptr_offset(slot + 1), 2802 - btrfs_node_key_ptr_offset(slot), 2801 + btrfs_node_key_ptr_offset(lower, slot + 1), 2802 + btrfs_node_key_ptr_offset(lower, slot), 2803 2803 (nritems - slot) * sizeof(struct btrfs_key_ptr)); 2804 2804 } 2805 2805 if (level) { ··· 2881 2881 return ret; 2882 2882 } 2883 2883 copy_extent_buffer(split, c, 2884 - btrfs_node_key_ptr_offset(0), 2885 - btrfs_node_key_ptr_offset(mid), 2884 + btrfs_node_key_ptr_offset(split, 0), 2885 + btrfs_node_key_ptr_offset(c, mid), 2886 2886 (c_nritems - mid) * sizeof(struct btrfs_key_ptr)); 2887 2887 btrfs_set_header_nritems(split, c_nritems - mid); 2888 2888 btrfs_set_header_nritems(c, mid); ··· 4240 4240 BUG_ON(ret < 0); 4241 4241 } 4242 4242 memmove_extent_buffer(parent, 4243 - btrfs_node_key_ptr_offset(slot), 4244 - btrfs_node_key_ptr_offset(slot + 1), 4243 + btrfs_node_key_ptr_offset(parent, slot), 4244 + btrfs_node_key_ptr_offset(parent, slot + 1), 4245 4245 sizeof(struct btrfs_key_ptr) * 4246 4246 (nritems - slot - 1)); 4247 4247 } else if (level) {
+1 -1
fs/btrfs/extent_io.c
··· 2529 2529 /* Set btree blocks beyond nritems with 0 to avoid stale content */ 2530 2530 nritems = btrfs_header_nritems(eb); 2531 2531 if (btrfs_header_level(eb) > 0) { 2532 - end = btrfs_node_key_ptr_offset(nritems); 2532 + end = btrfs_node_key_ptr_offset(eb, nritems); 2533 2533 memzero_extent_buffer(eb, end, eb->len - end); 2534 2534 } else { 2535 2535 /*
+2 -2
fs/btrfs/tree-mod-log.c
··· 697 697 n--; 698 698 break; 699 699 case BTRFS_MOD_LOG_MOVE_KEYS: 700 - o_dst = btrfs_node_key_ptr_offset(tm->slot); 701 - o_src = btrfs_node_key_ptr_offset(tm->move.dst_slot); 700 + o_dst = btrfs_node_key_ptr_offset(eb, tm->slot); 701 + o_src = btrfs_node_key_ptr_offset(eb, tm->move.dst_slot); 702 702 memmove_extent_buffer(eb, o_dst, o_src, 703 703 tm->move.nr_items * p_size); 704 704 break;