diff options
| author | Joe Thornber <ejt@redhat.com> | 2012-07-27 10:08:08 -0400 |
|---|---|---|
| committer | Alasdair G Kergon <agk@redhat.com> | 2012-07-27 10:08:08 -0400 |
| commit | eb04cf634fc2d5e3bc8fe88fbf434eda4921d875 (patch) | |
| tree | 92948b71b13387b85ec3da1b6471074df3cd6c07 | |
| parent | 51a0f659c03ccc8ec407c7a9f9701d1b4618d515 (diff) | |
dm thin metadata: stop tracking need for commit
Remove an optimisation that tracks whether or not a thin metadata commit
is needed.
If dm_pool_commit_metadata() is called and no changes have been made
to the metadata then this optimisation avoided writing to disk.
Removing because we're going to do something better later.
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>
| -rw-r--r-- | drivers/md/dm-thin-metadata.c | 40 |
1 files changed, 2 insertions, 38 deletions
diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c index afd84cacca4b..c8f36227fd7b 100644 --- a/drivers/md/dm-thin-metadata.c +++ b/drivers/md/dm-thin-metadata.c | |||
| @@ -178,7 +178,6 @@ struct dm_pool_metadata { | |||
| 178 | 178 | ||
| 179 | struct rw_semaphore root_lock; | 179 | struct rw_semaphore root_lock; |
| 180 | uint32_t time; | 180 | uint32_t time; |
| 181 | int need_commit; | ||
| 182 | dm_block_t root; | 181 | dm_block_t root; |
| 183 | dm_block_t details_root; | 182 | dm_block_t details_root; |
| 184 | struct list_head thin_devices; | 183 | struct list_head thin_devices; |
| @@ -479,7 +478,6 @@ static int init_pmd(struct dm_pool_metadata *pmd, | |||
| 479 | 478 | ||
| 480 | init_rwsem(&pmd->root_lock); | 479 | init_rwsem(&pmd->root_lock); |
| 481 | pmd->time = 0; | 480 | pmd->time = 0; |
| 482 | pmd->need_commit = 0; | ||
| 483 | pmd->details_root = 0; | 481 | pmd->details_root = 0; |
| 484 | pmd->trans_id = 0; | 482 | pmd->trans_id = 0; |
| 485 | pmd->flags = 0; | 483 | pmd->flags = 0; |
| @@ -504,11 +502,6 @@ static int __begin_transaction(struct dm_pool_metadata *pmd) | |||
| 504 | struct dm_block *sblock; | 502 | struct dm_block *sblock; |
| 505 | 503 | ||
| 506 | /* | 504 | /* |
| 507 | * __maybe_commit_transaction() resets these | ||
| 508 | */ | ||
| 509 | WARN_ON(pmd->need_commit); | ||
| 510 | |||
| 511 | /* | ||
| 512 | * We re-read the superblock every time. Shouldn't need to do this | 505 | * We re-read the superblock every time. Shouldn't need to do this |
| 513 | * really. | 506 | * really. |
| 514 | */ | 507 | */ |
| @@ -583,8 +576,6 @@ static int __write_changed_details(struct dm_pool_metadata *pmd) | |||
| 583 | list_del(&td->list); | 576 | list_del(&td->list); |
| 584 | kfree(td); | 577 | kfree(td); |
| 585 | } | 578 | } |
| 586 | |||
| 587 | pmd->need_commit = 1; | ||
| 588 | } | 579 | } |
| 589 | 580 | ||
| 590 | return 0; | 581 | return 0; |
| @@ -609,9 +600,6 @@ static int __commit_transaction(struct dm_pool_metadata *pmd) | |||
| 609 | if (r < 0) | 600 | if (r < 0) |
| 610 | return r; | 601 | return r; |
| 611 | 602 | ||
| 612 | if (!pmd->need_commit) | ||
| 613 | return r; | ||
| 614 | |||
| 615 | r = dm_sm_commit(pmd->data_sm); | 603 | r = dm_sm_commit(pmd->data_sm); |
| 616 | if (r < 0) | 604 | if (r < 0) |
| 617 | return r; | 605 | return r; |
| @@ -650,11 +638,7 @@ static int __commit_transaction(struct dm_pool_metadata *pmd) | |||
| 650 | if (r < 0) | 638 | if (r < 0) |
| 651 | goto out_locked; | 639 | goto out_locked; |
| 652 | 640 | ||
| 653 | r = dm_tm_commit(pmd->tm, sblock); | 641 | return dm_tm_commit(pmd->tm, sblock); |
| 654 | if (!r) | ||
| 655 | pmd->need_commit = 0; | ||
| 656 | |||
| 657 | return r; | ||
| 658 | 642 | ||
| 659 | out_locked: | 643 | out_locked: |
| 660 | dm_bm_unlock(sblock); | 644 | dm_bm_unlock(sblock); |
| @@ -744,7 +728,6 @@ struct dm_pool_metadata *dm_pool_metadata_open(struct block_device *bdev, | |||
| 744 | } | 728 | } |
| 745 | 729 | ||
| 746 | pmd->flags = 0; | 730 | pmd->flags = 0; |
| 747 | pmd->need_commit = 1; | ||
| 748 | r = dm_pool_commit_metadata(pmd); | 731 | r = dm_pool_commit_metadata(pmd); |
| 749 | if (r < 0) { | 732 | if (r < 0) { |
| 750 | DMERR("%s: dm_pool_commit_metadata() failed, error = %d", | 733 | DMERR("%s: dm_pool_commit_metadata() failed, error = %d", |
| @@ -1042,8 +1025,6 @@ static int __delete_device(struct dm_pool_metadata *pmd, dm_thin_id dev) | |||
| 1042 | if (r) | 1025 | if (r) |
| 1043 | return r; | 1026 | return r; |
| 1044 | 1027 | ||
| 1045 | pmd->need_commit = 1; | ||
| 1046 | |||
| 1047 | return 0; | 1028 | return 0; |
| 1048 | } | 1029 | } |
| 1049 | 1030 | ||
| @@ -1071,7 +1052,6 @@ int dm_pool_set_metadata_transaction_id(struct dm_pool_metadata *pmd, | |||
| 1071 | } | 1052 | } |
| 1072 | 1053 | ||
| 1073 | pmd->trans_id = new_id; | 1054 | pmd->trans_id = new_id; |
| 1074 | pmd->need_commit = 1; | ||
| 1075 | up_write(&pmd->root_lock); | 1055 | up_write(&pmd->root_lock); |
| 1076 | 1056 | ||
| 1077 | return 0; | 1057 | return 0; |
| @@ -1113,8 +1093,6 @@ static int __reserve_metadata_snap(struct dm_pool_metadata *pmd) | |||
| 1113 | 1093 | ||
| 1114 | dm_tm_dec(pmd->tm, held_root); | 1094 | dm_tm_dec(pmd->tm, held_root); |
| 1115 | dm_tm_unlock(pmd->tm, copy); | 1095 | dm_tm_unlock(pmd->tm, copy); |
| 1116 | pmd->need_commit = 1; | ||
| 1117 | |||
| 1118 | return -EBUSY; | 1096 | return -EBUSY; |
| 1119 | } | 1097 | } |
| 1120 | 1098 | ||
| @@ -1140,16 +1118,12 @@ static int __reserve_metadata_snap(struct dm_pool_metadata *pmd) | |||
| 1140 | &sb_validator, &sblock); | 1118 | &sb_validator, &sblock); |
| 1141 | if (r) { | 1119 | if (r) { |
| 1142 | dm_tm_dec(pmd->tm, held_root); | 1120 | dm_tm_dec(pmd->tm, held_root); |
| 1143 | pmd->need_commit = 1; | ||
| 1144 | return r; | 1121 | return r; |
| 1145 | } | 1122 | } |
| 1146 | 1123 | ||
| 1147 | disk_super = dm_block_data(sblock); | 1124 | disk_super = dm_block_data(sblock); |
| 1148 | disk_super->held_root = cpu_to_le64(held_root); | 1125 | disk_super->held_root = cpu_to_le64(held_root); |
| 1149 | dm_bm_unlock(sblock); | 1126 | dm_bm_unlock(sblock); |
| 1150 | |||
| 1151 | pmd->need_commit = 1; | ||
| 1152 | |||
| 1153 | return 0; | 1127 | return 0; |
| 1154 | } | 1128 | } |
| 1155 | 1129 | ||
| @@ -1179,7 +1153,6 @@ static int __release_metadata_snap(struct dm_pool_metadata *pmd) | |||
| 1179 | disk_super = dm_block_data(sblock); | 1153 | disk_super = dm_block_data(sblock); |
| 1180 | held_root = le64_to_cpu(disk_super->held_root); | 1154 | held_root = le64_to_cpu(disk_super->held_root); |
| 1181 | disk_super->held_root = cpu_to_le64(0); | 1155 | disk_super->held_root = cpu_to_le64(0); |
| 1182 | pmd->need_commit = 1; | ||
| 1183 | 1156 | ||
| 1184 | dm_bm_unlock(sblock); | 1157 | dm_bm_unlock(sblock); |
| 1185 | 1158 | ||
| @@ -1317,7 +1290,6 @@ static int __insert(struct dm_thin_device *td, dm_block_t block, | |||
| 1317 | struct dm_pool_metadata *pmd = td->pmd; | 1290 | struct dm_pool_metadata *pmd = td->pmd; |
| 1318 | dm_block_t keys[2] = { td->id, block }; | 1291 | dm_block_t keys[2] = { td->id, block }; |
| 1319 | 1292 | ||
| 1320 | pmd->need_commit = 1; | ||
| 1321 | value = cpu_to_le64(pack_block_time(data_block, pmd->time)); | 1293 | value = cpu_to_le64(pack_block_time(data_block, pmd->time)); |
| 1322 | __dm_bless_for_disk(&value); | 1294 | __dm_bless_for_disk(&value); |
| 1323 | 1295 | ||
| @@ -1358,7 +1330,6 @@ static int __remove(struct dm_thin_device *td, dm_block_t block) | |||
| 1358 | 1330 | ||
| 1359 | td->mapped_blocks--; | 1331 | td->mapped_blocks--; |
| 1360 | td->changed = 1; | 1332 | td->changed = 1; |
| 1361 | pmd->need_commit = 1; | ||
| 1362 | 1333 | ||
| 1363 | return 0; | 1334 | return 0; |
| 1364 | } | 1335 | } |
| @@ -1379,10 +1350,7 @@ int dm_pool_alloc_data_block(struct dm_pool_metadata *pmd, dm_block_t *result) | |||
| 1379 | int r; | 1350 | int r; |
| 1380 | 1351 | ||
| 1381 | down_write(&pmd->root_lock); | 1352 | down_write(&pmd->root_lock); |
| 1382 | |||
| 1383 | r = dm_sm_new_block(pmd->data_sm, result); | 1353 | r = dm_sm_new_block(pmd->data_sm, result); |
| 1384 | pmd->need_commit = 1; | ||
| 1385 | |||
| 1386 | up_write(&pmd->root_lock); | 1354 | up_write(&pmd->root_lock); |
| 1387 | 1355 | ||
| 1388 | return r; | 1356 | return r; |
| @@ -1519,11 +1487,7 @@ static int __resize_data_dev(struct dm_pool_metadata *pmd, dm_block_t new_count) | |||
| 1519 | return -EINVAL; | 1487 | return -EINVAL; |
| 1520 | } | 1488 | } |
| 1521 | 1489 | ||
| 1522 | r = dm_sm_extend(pmd->data_sm, new_count - old_count); | 1490 | return dm_sm_extend(pmd->data_sm, new_count - old_count); |
| 1523 | if (!r) | ||
