From 8c06f009380b93561385c059d06274569ae5f98f Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 27 Jul 2012 15:08:06 +0100 Subject: [PATCH] --- yaml --- r: 319481 b: refs/heads/master c: f4b90369d3a9ffe0f48f373c566578c142e95bf2 h: refs/heads/master i: 319479: 22ab8218ef2cc37ac449e3fcfccb73020876b0c4 v: v3 --- [refs] | 2 +- .../drivers/md/persistent-data/dm-space-map-common.c | 12 +++++++++++- .../drivers/md/persistent-data/dm-space-map-common.h | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 4079fb2a65ca..3f922fc2dd1f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8d44c98aac540cdf3cb5385bc6ef8d56930c7d70 +refs/heads/master: f4b90369d3a9ffe0f48f373c566578c142e95bf2 diff --git a/trunk/drivers/md/persistent-data/dm-space-map-common.c b/trunk/drivers/md/persistent-data/dm-space-map-common.c index ff3beed6ad2d..d77602d63c83 100644 --- a/trunk/drivers/md/persistent-data/dm-space-map-common.c +++ b/trunk/drivers/md/persistent-data/dm-space-map-common.c @@ -224,6 +224,7 @@ static int sm_ll_init(struct ll_disk *ll, struct dm_transaction_manager *tm) ll->nr_blocks = 0; ll->bitmap_root = 0; ll->ref_count_root = 0; + ll->bitmap_index_changed = false; return 0; } @@ -476,7 +477,15 @@ int sm_ll_dec(struct ll_disk *ll, dm_block_t b, enum allocation_event *ev) int sm_ll_commit(struct ll_disk *ll) { - return ll->commit(ll); + int r = 0; + + if (ll->bitmap_index_changed) { + r = ll->commit(ll); + if (!r) + ll->bitmap_index_changed = false; + } + + return r; } /*----------------------------------------------------------------*/ @@ -491,6 +500,7 @@ static int metadata_ll_load_ie(struct ll_disk *ll, dm_block_t index, static int metadata_ll_save_ie(struct ll_disk *ll, dm_block_t index, struct disk_index_entry *ie) { + ll->bitmap_index_changed = true; memcpy(ll->mi_le.index + index, ie, sizeof(*ie)); return 0; } diff --git a/trunk/drivers/md/persistent-data/dm-space-map-common.h b/trunk/drivers/md/persistent-data/dm-space-map-common.h index 8f220821a9a9..b3078d5eda0c 100644 --- a/trunk/drivers/md/persistent-data/dm-space-map-common.h +++ b/trunk/drivers/md/persistent-data/dm-space-map-common.h @@ -78,6 +78,7 @@ struct ll_disk { open_index_fn open_index; max_index_entries_fn max_entries; commit_fn commit; + bool bitmap_index_changed:1; }; struct disk_sm_root {