aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Thornber <ejt@redhat.com>2012-07-27 10:08:08 -0400
committerAlasdair G Kergon <agk@redhat.com>2012-07-27 10:08:08 -0400
commiteb04cf634fc2d5e3bc8fe88fbf434eda4921d875 (patch)
tree92948b71b13387b85ec3da1b6471074df3cd6c07
parent51a0f659c03ccc8ec407c7a9f9701d1b4618d515 (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.c40
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
659out_locked: 643out_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)