diff options
author | Joe Thornber <ejt@redhat.com> | 2012-03-28 13:41:25 -0400 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2012-03-28 13:41:25 -0400 |
commit | a3aefb395e4f321c8b1314c88f1123624adcf743 (patch) | |
tree | cedb3dbc643009cdba3c927b499e32e3247f7e5e /drivers/md | |
parent | 466891f9959b500e037836737c064a72f2bbe8cf (diff) |
dm persistent data: remove redundant value_size arg from value_ptr
Now that the value_size is held within every node of the btrees we can
remove this argument from value_ptr().
For the last few months a BUG_ON has been checking this argument is
the same as that held in the node. No issues were reported. So this
is a safe change.
Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/persistent-data/dm-btree-internal.h | 7 | ||||
-rw-r--r-- | drivers/md/persistent-data/dm-btree-remove.c | 28 | ||||
-rw-r--r-- | drivers/md/persistent-data/dm-btree.c | 27 |
3 files changed, 29 insertions, 33 deletions
diff --git a/drivers/md/persistent-data/dm-btree-internal.h b/drivers/md/persistent-data/dm-btree-internal.h index d279c768f8f1..5709bfeab1e8 100644 --- a/drivers/md/persistent-data/dm-btree-internal.h +++ b/drivers/md/persistent-data/dm-btree-internal.h | |||
@@ -108,12 +108,9 @@ static inline void *value_base(struct node *n) | |||
108 | return &n->keys[le32_to_cpu(n->header.max_entries)]; | 108 | return &n->keys[le32_to_cpu(n->header.max_entries)]; |
109 | } | 109 | } |
110 | 110 | ||
111 | /* | 111 | static inline void *value_ptr(struct node *n, uint32_t index) |
112 | * FIXME: Now that value size is stored in node we don't need the third parm. | ||
113 | */ | ||
114 | static inline void *value_ptr(struct node *n, uint32_t index, size_t value_size) | ||
115 | { | 112 | { |
116 | BUG_ON(value_size != le32_to_cpu(n->header.value_size)); | 113 | uint32_t value_size = le32_to_cpu(n->header.value_size); |
117 | return value_base(n) + (value_size * index); | 114 | return value_base(n) + (value_size * index); |
118 | } | 115 | } |
119 | 116 | ||
diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c index 1a35caf2563d..aa71e2359a07 100644 --- a/drivers/md/persistent-data/dm-btree-remove.c +++ b/drivers/md/persistent-data/dm-btree-remove.c | |||
@@ -61,20 +61,20 @@ static void node_shift(struct node *n, int shift) | |||
61 | if (shift < 0) { | 61 | if (shift < 0) { |
62 | shift = -shift; | 62 | shift = -shift; |
63 | BUG_ON(shift > nr_entries); | 63 | BUG_ON(shift > nr_entries); |
64 | BUG_ON((void *) key_ptr(n, shift) >= value_ptr(n, shift, value_size)); | 64 | BUG_ON((void *) key_ptr(n, shift) >= value_ptr(n, shift)); |
65 | memmove(key_ptr(n, 0), | 65 | memmove(key_ptr(n, 0), |
66 | key_ptr(n, shift), | 66 | key_ptr(n, shift), |
67 | (nr_entries - shift) * sizeof(__le64)); | 67 | (nr_entries - shift) * sizeof(__le64)); |
68 | memmove(value_ptr(n, 0, value_size), | 68 | memmove(value_ptr(n, 0), |
69 | value_ptr(n, shift, value_size), | 69 | value_ptr(n, shift), |
70 | (nr_entries - shift) * value_size); | 70 | (nr_entries - shift) * value_size); |
71 | } else { | 71 | } else { |
72 | BUG_ON(nr_entries + shift > le32_to_cpu(n->header.max_entries)); | 72 | BUG_ON(nr_entries + shift > le32_to_cpu(n->header.max_entries)); |
73 | memmove(key_ptr(n, shift), | 73 | memmove(key_ptr(n, shift), |
74 | key_ptr(n, 0), | 74 | key_ptr(n, 0), |
75 | nr_entries * sizeof(__le64)); | 75 | nr_entries * sizeof(__le64)); |
76 | memmove(value_ptr(n, shift, value_size), | 76 | memmove(value_ptr(n, shift), |
77 | value_ptr(n, 0, value_size), | 77 | value_ptr(n, 0), |
78 | nr_entries * value_size); | 78 | nr_entries * value_size); |
79 | } | 79 | } |
80 | } | 80 | } |
@@ -91,16 +91,16 @@ static void node_copy(struct node *left, struct node *right, int shift) | |||
91 | memcpy(key_ptr(left, nr_left), | 91 | memcpy(key_ptr(left, nr_left), |
92 | key_ptr(right, 0), | 92 | key_ptr(right, 0), |
93 | shift * sizeof(__le64)); | 93 | shift * sizeof(__le64)); |
94 | memcpy(value_ptr(left, nr_left, value_size), | 94 | memcpy(value_ptr(left, nr_left), |
95 | value_ptr(right, 0, value_size), | 95 | value_ptr(right, 0), |
96 | shift * value_size); | 96 | shift * value_size); |
97 | } else { | 97 | } else { |
98 | BUG_ON(shift > le32_to_cpu(right->header.max_entries)); | 98 | BUG_ON(shift > le32_to_cpu(right->header.max_entries)); |
99 | memcpy(key_ptr(right, 0), | 99 | memcpy(key_ptr(right, 0), |
100 | key_ptr(left, nr_left - shift), | 100 | key_ptr(left, nr_left - shift), |
101 | shift * sizeof(__le64)); | 101 | shift * sizeof(__le64)); |
102 | memcpy(value_ptr(right, 0, value_size), | 102 | memcpy(value_ptr(right, 0), |
103 | value_ptr(left, nr_left - shift, value_size), | 103 | value_ptr(left, nr_left - shift), |
104 | shift * value_size); | 104 | shift * value_size); |
105 | } | 105 | } |
106 | } | 106 | } |
@@ -120,8 +120,8 @@ static void delete_at(struct node *n, unsigned index) | |||
120 | key_ptr(n, index + 1), | 120 | key_ptr(n, index + 1), |
121 | nr_to_copy * sizeof(__le64)); | 121 | nr_to_copy * sizeof(__le64)); |
122 | 122 | ||
123 | memmove(value_ptr(n, index, value_size), | 123 | memmove(value_ptr(n, index), |
124 | value_ptr(n, index + 1, value_size), | 124 | value_ptr(n, index + 1), |
125 | nr_to_copy * value_size); | 125 | nr_to_copy * value_size); |
126 | } | 126 | } |
127 | 127 | ||
@@ -166,7 +166,7 @@ static int init_child(struct dm_btree_info *info, struct node *parent, | |||
166 | if (inc) | 166 | if (inc) |
167 | inc_children(info->tm, result->n, &le64_type); | 167 | inc_children(info->tm, result->n, &le64_type); |
168 | 168 | ||
169 | *((__le64 *) value_ptr(parent, index, sizeof(__le64))) = | 169 | *((__le64 *) value_ptr(parent, index)) = |
170 | cpu_to_le64(dm_block_location(result->block)); | 170 | cpu_to_le64(dm_block_location(result->block)); |
171 | 171 | ||
172 | return 0; | 172 | return 0; |
@@ -520,7 +520,7 @@ static int remove_raw(struct shadow_spine *s, struct dm_btree_info *info, | |||
520 | */ | 520 | */ |
521 | if (shadow_has_parent(s)) { | 521 | if (shadow_has_parent(s)) { |
522 | __le64 location = cpu_to_le64(dm_block_location(shadow_current(s))); | 522 | __le64 location = cpu_to_le64(dm_block_location(shadow_current(s))); |
523 | memcpy(value_ptr(dm_block_data(shadow_parent(s)), i, sizeof(__le64)), | 523 | memcpy(value_ptr(dm_block_data(shadow_parent(s)), i), |
524 | &location, sizeof(__le64)); | 524 | &location, sizeof(__le64)); |
525 | } | 525 | } |
526 | 526 | ||
@@ -577,7 +577,7 @@ int dm_btree_remove(struct dm_btree_info *info, dm_block_t root, | |||
577 | 577 | ||
578 | if (info->value_type.dec) | 578 | if (info->value_type.dec) |
579 | info->value_type.dec(info->value_type.context, | 579 | info->value_type.dec(info->value_type.context, |
580 | value_ptr(n, index, info->value_type.size)); | 580 | value_ptr(n, index)); |
581 | 581 | ||
582 | delete_at(n, index); | 582 | delete_at(n, index); |
583 | } | 583 | } |
diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c index bd1e7ffbe26c..d12b2cc51f1a 100644 --- a/drivers/md/persistent-data/dm-btree.c +++ b/drivers/md/persistent-data/dm-btree.c | |||
@@ -74,8 +74,7 @@ void inc_children(struct dm_transaction_manager *tm, struct node *n, | |||
74 | dm_tm_inc(tm, value64(n, i)); | 74 | dm_tm_inc(tm, value64(n, i)); |
75 | else if (vt->inc) | 75 | else if (vt->inc) |
76 | for (i = 0; i < nr_entries; i++) | 76 | for (i = 0; i < nr_entries; i++) |
77 | vt->inc(vt->context, | 77 | vt->inc(vt->context, value_ptr(n, i)); |
78 | value_ptr(n, i, vt->size)); | ||
79 | } | 78 | } |
80 | 79 | ||
81 | static int insert_at(size_t value_size, struct node *node, unsigned index, | 80 | static int insert_at(size_t value_size, struct node *node, unsigned index, |
@@ -281,7 +280,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t root) | |||
281 | 280 | ||
282 | for (i = 0; i < f->nr_children; i++) | 281 | for (i = 0; i < f->nr_children; i++) |
283 | info->value_type.dec(info->value_type.context, | 282 | info->value_type.dec(info->value_type.context, |
284 | value_ptr(f->n, i, info->value_type.size)); | 283 | value_ptr(f->n, i)); |
285 | } | 284 | } |
286 | f->current_child = f->nr_children; | 285 | f->current_child = f->nr_children; |
287 | } | 286 | } |
@@ -320,7 +319,7 @@ static int btree_lookup_raw(struct ro_spine *s, dm_block_t block, uint64_t key, | |||
320 | } while (!(flags & LEAF_NODE)); | 319 | } while (!(flags & LEAF_NODE)); |
321 | 320 | ||
322 | *result_key = le64_to_cpu(ro_node(s)->keys[i]); | 321 | *result_key = le64_to_cpu(ro_node(s)->keys[i]); |
323 | memcpy(v, value_ptr(ro_node(s), i, value_size), value_size); | 322 | memcpy(v, value_ptr(ro_node(s), i), value_size); |
324 | 323 | ||
325 | return 0; | 324 | return 0; |
326 | } | 325 | } |
@@ -432,7 +431,7 @@ static int btree_split_sibling(struct shadow_spine *s, dm_block_t root, | |||
432 | 431 | ||
433 | size = le32_to_cpu(ln->header.flags) & INTERNAL_NODE ? | 432 | size = le32_to_cpu(ln->header.flags) & INTERNAL_NODE ? |
434 | sizeof(uint64_t) : s->info->value_type.size; | 433 | sizeof(uint64_t) : s->info->value_type.size; |
435 | memcpy(value_ptr(rn, 0, size), value_ptr(ln, nr_left, size), | 434 | memcpy(value_ptr(rn, 0), value_ptr(ln, nr_left), |
436 | size * nr_right); | 435 | size * nr_right); |
437 | 436 | ||
438 | /* | 437 | /* |
@@ -443,7 +442,7 @@ static int btree_split_sibling(struct shadow_spine *s, dm_block_t root, | |||
443 | pn = dm_block_data(parent); | 442 | pn = dm_block_data(parent); |
444 | location = cpu_to_le64(dm_block_location(left)); | 443 | location = cpu_to_le64(dm_block_location(left)); |
445 | __dm_bless_for_disk(&location); | 444 | __dm_bless_for_disk(&location); |
446 | memcpy_disk(value_ptr(pn, parent_index, sizeof(__le64)), | 445 | memcpy_disk(value_ptr(pn, parent_index), |
447 | &location, sizeof(__le64)); | 446 | &location, sizeof(__le64)); |
448 | 447 | ||
449 | location = cpu_to_le64(dm_block_location(right)); | 448 | location = cpu_to_le64(dm_block_location(right)); |
@@ -529,8 +528,8 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key) | |||
529 | 528 | ||
530 | size = le32_to_cpu(pn->header.flags) & INTERNAL_NODE ? | 529 | size = le32_to_cpu(pn->header.flags) & INTERNAL_NODE ? |
531 | sizeof(__le64) : s->info->value_type.size; | 530 | sizeof(__le64) : s->info->value_type.size; |
532 | memcpy(value_ptr(ln, 0, size), value_ptr(pn, 0, size), nr_left * size); | 531 | memcpy(value_ptr(ln, 0), value_ptr(pn, 0), nr_left * size); |
533 | memcpy(value_ptr(rn, 0, size), value_ptr(pn, nr_left, size), | 532 | memcpy(value_ptr(rn, 0), value_ptr(pn, nr_left), |
534 | nr_right * size); | 533 | nr_right * size); |
535 | 534 | ||
536 | /* new_parent should just point to l and r now */ | 535 | /* new_parent should just point to l and r now */ |
@@ -545,12 +544,12 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key) | |||
545 | val = cpu_to_le64(dm_block_location(left)); | 544 | val = cpu_to_le64(dm_block_location(left)); |
546 | __dm_bless_for_disk(&val); | 545 | __dm_bless_for_disk(&val); |
547 | pn->keys[0] = ln->keys[0]; | 546 | pn->keys[0] = ln->keys[0]; |
548 | memcpy_disk(value_ptr(pn, 0, sizeof(__le64)), &val, sizeof(__le64)); | 547 | memcpy_disk(value_ptr(pn, 0), &val, sizeof(__le64)); |
549 | 548 | ||
550 | val = cpu_to_le64(dm_block_location(right)); | 549 | val = cpu_to_le64(dm_block_location(right)); |
551 | __dm_bless_for_disk(&val); | 550 | __dm_bless_for_disk(&val); |
552 | pn->keys[1] = rn->keys[0]; | 551 | pn->keys[1] = rn->keys[0]; |
553 | memcpy_disk(value_ptr(pn, 1, sizeof(__le64)), &val, sizeof(__le64)); | 552 | memcpy_disk(value_ptr(pn, 1), &val, sizeof(__le64)); |
554 | 553 | ||
555 | /* | 554 | /* |
556 | * rejig the spine. This is ugly, since it knows too | 555 | * rejig the spine. This is ugly, since it knows too |
@@ -595,7 +594,7 @@ static int btree_insert_raw(struct shadow_spine *s, dm_block_t root, | |||
595 | __le64 location = cpu_to_le64(dm_block_location(shadow_current(s))); | 594 | __le64 location = cpu_to_le64(dm_block_location(shadow_current(s))); |
596 | 595 | ||
597 | __dm_bless_for_disk(&location); | 596 | __dm_bless_for_disk(&location); |
598 | memcpy_disk(value_ptr(dm_block_data(shadow_parent(s)), i, sizeof(uint64_t)), | 597 | memcpy_disk(value_ptr(dm_block_data(shadow_parent(s)), i), |
599 | &location, sizeof(__le64)); | 598 | &location, sizeof(__le64)); |
600 | } | 599 | } |
601 | 600 | ||
@@ -710,12 +709,12 @@ static int insert(struct dm_btree_info *info, dm_block_t root, | |||
710 | (!info->value_type.equal || | 709 | (!info->value_type.equal || |
711 | !info->value_type.equal( | 710 | !info->value_type.equal( |
712 | info->value_type.context, | 711 | info->value_type.context, |
713 | value_ptr(n, index, info->value_type.size), | 712 | value_ptr(n, index), |
714 | value))) { | 713 | value))) { |
715 | info->value_type.dec(info->value_type.context, | 714 | info->value_type.dec(info->value_type.context, |
716 | value_ptr(n, index, info->value_type.size)); | 715 | value_ptr(n, index)); |
717 | } | 716 | } |
718 | memcpy_disk(value_ptr(n, index, info->value_type.size), | 717 | memcpy_disk(value_ptr(n, index), |
719 | value, info->value_type.size); | 718 | value, info->value_type.size); |
720 | } | 719 | } |
721 | 720 | ||