diff options
author | David Sterba <dsterba@suse.com> | 2019-08-09 11:48:21 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2019-09-09 08:59:16 -0400 |
commit | c82f823c9b006c31059341af41da9f8b2e3e64d9 (patch) | |
tree | b6b9204325f78f83df3a1a871ee4a7abc6e29b07 /fs/btrfs/ctree.c | |
parent | 48bc39501a549ec978c8aad28eb89ca3a2a7ca03 (diff) |
btrfs: tie extent buffer and it's token together
Further simplifaction of the get/set helpers is possible when the token
is uniquely tied to an extent buffer. A condition and an assignment can
be avoided.
The initializations are moved closer to the first use when the extent
buffer is valid. There's one exception in __push_leaf_left where the
token is reused.
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index fbf94e28fba8..88c3b338508d 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -3574,7 +3574,7 @@ static int leaf_space_used(struct extent_buffer *l, int start, int nr) | |||
3574 | 3574 | ||
3575 | if (!nr) | 3575 | if (!nr) |
3576 | return 0; | 3576 | return 0; |
3577 | btrfs_init_map_token(&token); | 3577 | btrfs_init_map_token(&token, l); |
3578 | start_item = btrfs_item_nr(start); | 3578 | start_item = btrfs_item_nr(start); |
3579 | end_item = btrfs_item_nr(end); | 3579 | end_item = btrfs_item_nr(end); |
3580 | data_len = btrfs_token_item_offset(l, start_item, &token) + | 3580 | data_len = btrfs_token_item_offset(l, start_item, &token) + |
@@ -3632,8 +3632,6 @@ static noinline int __push_leaf_right(struct btrfs_path *path, | |||
3632 | u32 data_end; | 3632 | u32 data_end; |
3633 | u32 this_item_size; | 3633 | u32 this_item_size; |
3634 | 3634 | ||
3635 | btrfs_init_map_token(&token); | ||
3636 | |||
3637 | if (empty) | 3635 | if (empty) |
3638 | nr = 0; | 3636 | nr = 0; |
3639 | else | 3637 | else |
@@ -3706,6 +3704,7 @@ static noinline int __push_leaf_right(struct btrfs_path *path, | |||
3706 | push_items * sizeof(struct btrfs_item)); | 3704 | push_items * sizeof(struct btrfs_item)); |
3707 | 3705 | ||
3708 | /* update the item pointers */ | 3706 | /* update the item pointers */ |
3707 | btrfs_init_map_token(&token, right); | ||
3709 | right_nritems += push_items; | 3708 | right_nritems += push_items; |
3710 | btrfs_set_header_nritems(right, right_nritems); | 3709 | btrfs_set_header_nritems(right, right_nritems); |
3711 | push_space = BTRFS_LEAF_DATA_SIZE(fs_info); | 3710 | push_space = BTRFS_LEAF_DATA_SIZE(fs_info); |
@@ -3860,8 +3859,6 @@ static noinline int __push_leaf_left(struct btrfs_path *path, int data_size, | |||
3860 | u32 old_left_item_size; | 3859 | u32 old_left_item_size; |
3861 | struct btrfs_map_token token; | 3860 | struct btrfs_map_token token; |
3862 | 3861 | ||
3863 | btrfs_init_map_token(&token); | ||
3864 | |||
3865 | if (empty) | 3862 | if (empty) |
3866 | nr = min(right_nritems, max_slot); | 3863 | nr = min(right_nritems, max_slot); |
3867 | else | 3864 | else |
@@ -3915,6 +3912,7 @@ static noinline int __push_leaf_left(struct btrfs_path *path, int data_size, | |||
3915 | old_left_nritems = btrfs_header_nritems(left); | 3912 | old_left_nritems = btrfs_header_nritems(left); |
3916 | BUG_ON(old_left_nritems <= 0); | 3913 | BUG_ON(old_left_nritems <= 0); |
3917 | 3914 | ||
3915 | btrfs_init_map_token(&token, left); | ||
3918 | old_left_item_size = btrfs_item_offset_nr(left, old_left_nritems - 1); | 3916 | old_left_item_size = btrfs_item_offset_nr(left, old_left_nritems - 1); |
3919 | for (i = old_left_nritems; i < old_left_nritems + push_items; i++) { | 3917 | for (i = old_left_nritems; i < old_left_nritems + push_items; i++) { |
3920 | u32 ioff; | 3918 | u32 ioff; |
@@ -3946,6 +3944,8 @@ static noinline int __push_leaf_left(struct btrfs_path *path, int data_size, | |||
3946 | (btrfs_header_nritems(right) - push_items) * | 3944 | (btrfs_header_nritems(right) - push_items) * |
3947 | sizeof(struct btrfs_item)); | 3945 | sizeof(struct btrfs_item)); |
3948 | } | 3946 | } |
3947 | |||
3948 | btrfs_init_map_token(&token, right); | ||
3949 | right_nritems -= push_items; | 3949 | right_nritems -= push_items; |
3950 | btrfs_set_header_nritems(right, right_nritems); | 3950 | btrfs_set_header_nritems(right, right_nritems); |
3951 | push_space = BTRFS_LEAF_DATA_SIZE(fs_info); | 3951 | push_space = BTRFS_LEAF_DATA_SIZE(fs_info); |
@@ -4076,8 +4076,6 @@ static noinline void copy_for_split(struct btrfs_trans_handle *trans, | |||
4076 | struct btrfs_disk_key disk_key; | 4076 | struct btrfs_disk_key disk_key; |
4077 | struct btrfs_map_token token; | 4077 | struct btrfs_map_token token; |
4078 | 4078 | ||
4079 | btrfs_init_map_token(&token); | ||
4080 | |||
4081 | nritems = nritems - mid; | 4079 | nritems = nritems - mid; |
4082 | btrfs_set_header_nritems(right, nritems); | 4080 | btrfs_set_header_nritems(right, nritems); |
4083 | data_copy_size = btrfs_item_end_nr(l, mid) - leaf_data_end(l); | 4081 | data_copy_size = btrfs_item_end_nr(l, mid) - leaf_data_end(l); |
@@ -4093,6 +4091,7 @@ static noinline void copy_for_split(struct btrfs_trans_handle *trans, | |||
4093 | 4091 | ||
4094 | rt_data_off = BTRFS_LEAF_DATA_SIZE(fs_info) - btrfs_item_end_nr(l, mid); | 4092 | rt_data_off = BTRFS_LEAF_DATA_SIZE(fs_info) - btrfs_item_end_nr(l, mid); |
4095 | 4093 | ||
4094 | btrfs_init_map_token(&token, right); | ||
4096 | for (i = 0; i < nritems; i++) { | 4095 | for (i = 0; i < nritems; i++) { |
4097 | struct btrfs_item *item = btrfs_item_nr(i); | 4096 | struct btrfs_item *item = btrfs_item_nr(i); |
4098 | u32 ioff; | 4097 | u32 ioff; |
@@ -4576,8 +4575,6 @@ void btrfs_truncate_item(struct btrfs_path *path, u32 new_size, int from_end) | |||
4576 | int i; | 4575 | int i; |
4577 | struct btrfs_map_token token; | 4576 | struct btrfs_map_token token; |
4578 | 4577 | ||
4579 | btrfs_init_map_token(&token); | ||
4580 | |||
4581 | leaf = path->nodes[0]; | 4578 | leaf = path->nodes[0]; |
4582 | slot = path->slots[0]; | 4579 | slot = path->slots[0]; |
4583 | 4580 | ||
@@ -4599,6 +4596,7 @@ void btrfs_truncate_item(struct btrfs_path *path, u32 new_size, int from_end) | |||
4599 | * item0..itemN ... dataN.offset..dataN.size .. data0.size | 4596 | * item0..itemN ... dataN.offset..dataN.size .. data0.size |
4600 | */ | 4597 | */ |
4601 | /* first correct the data pointers */ | 4598 | /* first correct the data pointers */ |
4599 | btrfs_init_map_token(&token, leaf); | ||
4602 | for (i = slot; i < nritems; i++) { | 4600 | for (i = slot; i < nritems; i++) { |
4603 | u32 ioff; | 4601 | u32 ioff; |
4604 | item = btrfs_item_nr(i); | 4602 | item = btrfs_item_nr(i); |
@@ -4673,8 +4671,6 @@ void btrfs_extend_item(struct btrfs_path *path, u32 data_size) | |||
4673 | int i; | 4671 | int i; |
4674 | struct btrfs_map_token token; | 4672 | struct btrfs_map_token token; |
4675 | 4673 | ||
4676 | btrfs_init_map_token(&token); | ||
4677 | |||
4678 | leaf = path->nodes[0]; | 4674 | leaf = path->nodes[0]; |
4679 | 4675 | ||
4680 | nritems = btrfs_header_nritems(leaf); | 4676 | nritems = btrfs_header_nritems(leaf); |
@@ -4699,6 +4695,7 @@ void btrfs_extend_item(struct btrfs_path *path, u32 data_size) | |||
4699 | * item0..itemN ... dataN.offset..dataN.size .. data0.size | 4695 | * item0..itemN ... dataN.offset..dataN.size .. data0.size |
4700 | */ | 4696 | */ |
4701 | /* first correct the data pointers */ | 4697 | /* first correct the data pointers */ |
4698 | btrfs_init_map_token(&token, leaf); | ||
4702 | for (i = slot; i < nritems; i++) { | 4699 | for (i = slot; i < nritems; i++) { |
4703 | u32 ioff; | 4700 | u32 ioff; |
4704 | item = btrfs_item_nr(i); | 4701 | item = btrfs_item_nr(i); |
@@ -4750,8 +4747,6 @@ void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, | |||
4750 | } | 4747 | } |
4751 | btrfs_unlock_up_safe(path, 1); | 4748 | btrfs_unlock_up_safe(path, 1); |
4752 | 4749 | ||
4753 | btrfs_init_map_token(&token); | ||
4754 | |||
4755 | leaf = path->nodes[0]; | 4750 | leaf = path->nodes[0]; |
4756 | slot = path->slots[0]; | 4751 | slot = path->slots[0]; |
4757 | 4752 | ||
@@ -4765,6 +4760,7 @@ void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, | |||
4765 | BUG(); | 4760 | BUG(); |
4766 | } | 4761 | } |
4767 | 4762 | ||
4763 | btrfs_init_map_token(&token, leaf); | ||
4768 | if (slot != nritems) { | 4764 | if (slot != nritems) { |
4769 | unsigned int old_data = btrfs_item_end_nr(leaf, slot); | 4765 | unsigned int old_data = btrfs_item_end_nr(leaf, slot); |
4770 | 4766 | ||
@@ -4971,9 +4967,6 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, | |||
4971 | int wret; | 4967 | int wret; |
4972 | int i; | 4968 | int i; |
4973 | u32 nritems; | 4969 | u32 nritems; |
4974 | struct btrfs_map_token token; | ||
4975 | |||
4976 | btrfs_init_map_token(&token); | ||
4977 | 4970 | ||
4978 | leaf = path->nodes[0]; | 4971 | leaf = path->nodes[0]; |
4979 | last_off = btrfs_item_offset_nr(leaf, slot + nr - 1); | 4972 | last_off = btrfs_item_offset_nr(leaf, slot + nr - 1); |
@@ -4985,12 +4978,14 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, | |||
4985 | 4978 | ||
4986 | if (slot + nr != nritems) { | 4979 | if (slot + nr != nritems) { |
4987 | int data_end = leaf_data_end(leaf); | 4980 | int data_end = leaf_data_end(leaf); |
4981 | struct btrfs_map_token token; | ||
4988 | 4982 | ||
4989 | memmove_extent_buffer(leaf, BTRFS_LEAF_DATA_OFFSET + | 4983 | memmove_extent_buffer(leaf, BTRFS_LEAF_DATA_OFFSET + |
4990 | data_end + dsize, | 4984 | data_end + dsize, |
4991 | BTRFS_LEAF_DATA_OFFSET + data_end, | 4985 | BTRFS_LEAF_DATA_OFFSET + data_end, |
4992 | last_off - data_end); | 4986 | last_off - data_end); |
4993 | 4987 | ||
4988 | btrfs_init_map_token(&token, leaf); | ||
4994 | for (i = slot + nr; i < nritems; i++) { | 4989 | for (i = slot + nr; i < nritems; i++) { |
4995 | u32 ioff; | 4990 | u32 ioff; |
4996 | 4991 | ||