diff options
| -rw-r--r-- | drivers/md/dm-cache-policy-mq.c | 2 | ||||
| -rw-r--r-- | drivers/md/dm-cache-policy-smq.c | 2 | ||||
| -rw-r--r-- | drivers/md/dm-thin-metadata.c | 4 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree-internal.h | 6 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree-remove.c | 16 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree-spine.c | 37 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree.c | 7 |
7 files changed, 54 insertions, 20 deletions
diff --git a/drivers/md/dm-cache-policy-mq.c b/drivers/md/dm-cache-policy-mq.c index 32814371b8d3..aa1b41ca40f7 100644 --- a/drivers/md/dm-cache-policy-mq.c +++ b/drivers/md/dm-cache-policy-mq.c | |||
| @@ -1471,5 +1471,3 @@ module_exit(mq_exit); | |||
| 1471 | MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>"); | 1471 | MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>"); |
| 1472 | MODULE_LICENSE("GPL"); | 1472 | MODULE_LICENSE("GPL"); |
| 1473 | MODULE_DESCRIPTION("mq cache policy"); | 1473 | MODULE_DESCRIPTION("mq cache policy"); |
| 1474 | |||
| 1475 | MODULE_ALIAS("dm-cache-default"); | ||
diff --git a/drivers/md/dm-cache-policy-smq.c b/drivers/md/dm-cache-policy-smq.c index 48a4a826ae07..200366c62231 100644 --- a/drivers/md/dm-cache-policy-smq.c +++ b/drivers/md/dm-cache-policy-smq.c | |||
| @@ -1789,3 +1789,5 @@ module_exit(smq_exit); | |||
| 1789 | MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>"); | 1789 | MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>"); |
| 1790 | MODULE_LICENSE("GPL"); | 1790 | MODULE_LICENSE("GPL"); |
| 1791 | MODULE_DESCRIPTION("smq cache policy"); | 1791 | MODULE_DESCRIPTION("smq cache policy"); |
| 1792 | |||
| 1793 | MODULE_ALIAS("dm-cache-default"); | ||
diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c index 48dfe3c4d6aa..6ba47cfb1443 100644 --- a/drivers/md/dm-thin-metadata.c +++ b/drivers/md/dm-thin-metadata.c | |||
| @@ -1293,8 +1293,8 @@ static int __release_metadata_snap(struct dm_pool_metadata *pmd) | |||
| 1293 | return r; | 1293 | return r; |
| 1294 | 1294 | ||
| 1295 | disk_super = dm_block_data(copy); | 1295 | disk_super = dm_block_data(copy); |
| 1296 | dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->data_mapping_root)); | 1296 | dm_btree_del(&pmd->info, le64_to_cpu(disk_super->data_mapping_root)); |
| 1297 | dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->device_details_root)); | 1297 | dm_btree_del(&pmd->details_info, le64_to_cpu(disk_super->device_details_root)); |
| 1298 | dm_sm_dec_block(pmd->metadata_sm, held_root); | 1298 | dm_sm_dec_block(pmd->metadata_sm, held_root); |
| 1299 | 1299 | ||
| 1300 | return dm_tm_unlock(pmd->tm, copy); | 1300 | return dm_tm_unlock(pmd->tm, copy); |
diff --git a/drivers/md/persistent-data/dm-btree-internal.h b/drivers/md/persistent-data/dm-btree-internal.h index bf2b80d5c470..8731b6ea026b 100644 --- a/drivers/md/persistent-data/dm-btree-internal.h +++ b/drivers/md/persistent-data/dm-btree-internal.h | |||
| @@ -138,4 +138,10 @@ int lower_bound(struct btree_node *n, uint64_t key); | |||
| 138 | 138 | ||
| 139 | extern struct dm_block_validator btree_node_validator; | 139 | extern struct dm_block_validator btree_node_validator; |
| 140 | 140 | ||
| 141 | /* | ||
| 142 | * Value type for upper levels of multi-level btrees. | ||
| 143 | */ | ||
| 144 | extern void init_le64_type(struct dm_transaction_manager *tm, | ||
| 145 | struct dm_btree_value_type *vt); | ||
| 146 | |||
| 141 | #endif /* DM_BTREE_INTERNAL_H */ | 147 | #endif /* DM_BTREE_INTERNAL_H */ |
diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c index 9ca9eccd512f..4222f774cf36 100644 --- a/drivers/md/persistent-data/dm-btree-remove.c +++ b/drivers/md/persistent-data/dm-btree-remove.c | |||
| @@ -544,14 +544,6 @@ static int remove_raw(struct shadow_spine *s, struct dm_btree_info *info, | |||
| 544 | return r; | 544 | return r; |
| 545 | } | 545 | } |
| 546 | 546 | ||
| 547 | static struct dm_btree_value_type le64_type = { | ||
| 548 | .context = NULL, | ||
| 549 | .size = sizeof(__le64), | ||
| 550 | .inc = NULL, | ||
| 551 | .dec = NULL, | ||
| 552 | .equal = NULL | ||
| 553 | }; | ||
| 554 | |||
| 555 | int dm_btree_remove(struct dm_btree_info *info, dm_block_t root, | 547 | int dm_btree_remove(struct dm_btree_info *info, dm_block_t root, |
| 556 | uint64_t *keys, dm_block_t *new_root) | 548 | uint64_t *keys, dm_block_t *new_root) |
| 557 | { | 549 | { |
| @@ -559,12 +551,14 @@ int dm_btree_remove(struct dm_btree_info *info, dm_block_t root, | |||
| 559 | int index = 0, r = 0; | 551 | int index = 0, r = 0; |
| 560 | struct shadow_spine spine; | 552 | struct shadow_spine spine; |
| 561 | struct btree_node *n; | 553 | struct btree_node *n; |
| 554 | struct dm_btree_value_type le64_vt; | ||
| 562 | 555 | ||
| 556 | init_le64_type(info->tm, &le64_vt); | ||
| 563 | init_shadow_spine(&spine, info); | 557 | init_shadow_spine(&spine, info); |
| 564 | for (level = 0; level < info->levels; level++) { | 558 | for (level = 0; level < info->levels; level++) { |
| 565 | r = remove_raw(&spine, info, | 559 | r = remove_raw(&spine, info, |
| 566 | (level == last_level ? | 560 | (level == last_level ? |
| 567 | &info->value_type : &le64_type), | 561 | &info->value_type : &le64_vt), |
| 568 | root, keys[level], (unsigned *)&index); | 562 | root, keys[level], (unsigned *)&index); |
| 569 | if (r < 0) | 563 | if (r < 0) |
| 570 | break; | 564 | break; |
| @@ -654,11 +648,13 @@ static int remove_one(struct dm_btree_info *info, dm_block_t root, | |||
| 654 | int index = 0, r = 0; | 648 | int index = 0, r = 0; |
| 655 | struct shadow_spine spine; | 649 | struct shadow_spine spine; |
| 656 | struct btree_node *n; | 650 | struct btree_node *n; |
| 651 | struct dm_btree_value_type le64_vt; | ||
| 657 | uint64_t k; | 652 | uint64_t k; |
| 658 | 653 | ||
| 654 | init_le64_type(info->tm, &le64_vt); | ||
| 659 | init_shadow_spine(&spine, info); | 655 | init_shadow_spine(&spine, info); |
| 660 | for (level = 0; level < last_level; level++) { | 656 | for (level = 0; level < last_level; level++) { |
| 661 | r = remove_raw(&spine, info, &le64_type, | 657 | r = remove_raw(&spine, info, &le64_vt, |
| 662 | root, keys[level], (unsigned *) &index); | 658 | root, keys[level], (unsigned *) &index); |
| 663 | if (r < 0) | 659 | if (r < 0) |
| 664 | goto out; | 660 | goto out; |
diff --git a/drivers/md/persistent-data/dm-btree-spine.c b/drivers/md/persistent-data/dm-btree-spine.c index 1b5e13ec7f96..0dee514ba4c5 100644 --- a/drivers/md/persistent-data/dm-btree-spine.c +++ b/drivers/md/persistent-data/dm-btree-spine.c | |||
| @@ -249,3 +249,40 @@ int shadow_root(struct shadow_spine *s) | |||
| 249 | { | 249 | { |
| 250 | return s->root; | 250 | return s->root; |
| 251 | } | 251 | } |
| 252 | |||
| 253 | static void le64_inc(void *context, const void *value_le) | ||
| 254 | { | ||
| 255 | struct dm_transaction_manager *tm = context; | ||
| 256 | __le64 v_le; | ||
| 257 | |||
| 258 | memcpy(&v_le, value_le, sizeof(v_le)); | ||
| 259 | dm_tm_inc(tm, le64_to_cpu(v_le)); | ||
| 260 | } | ||
| 261 | |||
| 262 | static void le64_dec(void *context, const void *value_le) | ||
| 263 | { | ||
| 264 | struct dm_transaction_manager *tm = context; | ||
| 265 | __le64 v_le; | ||
| 266 | |||
| 267 | memcpy(&v_le, value_le, sizeof(v_le)); | ||
| 268 | dm_tm_dec(tm, le64_to_cpu(v_le)); | ||
| 269 | } | ||
| 270 | |||
| 271 | static int le64_equal(void *context, const void *value1_le, const void *value2_le) | ||
| 272 | { | ||
| 273 | __le64 v1_le, v2_le; | ||
| 274 | |||
| 275 | memcpy(&v1_le, value1_le, sizeof(v1_le)); | ||
| 276 | memcpy(&v2_le, value2_le, sizeof(v2_le)); | ||
| 277 | return v1_le == v2_le; | ||
| 278 | } | ||
| 279 | |||
| 280 | void init_le64_type(struct dm_transaction_manager *tm, | ||
| 281 | struct dm_btree_value_type *vt) | ||
| 282 | { | ||
| 283 | vt->context = tm; | ||
| 284 | vt->size = sizeof(__le64); | ||
| 285 | vt->inc = le64_inc; | ||
| 286 | vt->dec = le64_dec; | ||
| 287 | vt->equal = le64_equal; | ||
| 288 | } | ||
diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c index fdd3793e22f9..c7726cebc495 100644 --- a/drivers/md/persistent-data/dm-btree.c +++ b/drivers/md/persistent-data/dm-btree.c | |||
| @@ -667,12 +667,7 @@ static int insert(struct dm_btree_info *info, dm_block_t root, | |||
| 667 | struct btree_node *n; | 667 | struct btree_node *n; |
| 668 | struct dm_btree_value_type le64_type; | 668 | struct dm_btree_value_type le64_type; |
| 669 | 669 | ||
| 670 | le64_type.context = NULL; | 670 | init_le64_type(info->tm, &le64_type); |
| 671 | le64_type.size = sizeof(__le64); | ||
| 672 | le64_type.inc = NULL; | ||
| 673 | le64_type.dec = NULL; | ||
| 674 | le64_type.equal = NULL; | ||
| 675 | |||
| 676 | init_shadow_spine(&spine, info); | 671 | init_shadow_spine(&spine, info); |
| 677 | 672 | ||
| 678 | for (level = 0; level < (info->levels - 1); level++) { | 673 | for (level = 0; level < (info->levels - 1); level++) { |
