dm persistent data: remove space map ref_count entries if redundant
Save space by removing entries from the space map ref_count tree if they're no longer needed. Ref counts are stored in two places: a bitmap if the ref_count is below 3, or a btree of uint32_t if 3 or above. When a ref_count that was above 3 drops below we can remove it from the tree and save some metadata space. This removal was commented out before because I was unsure why this was causing under-populated btree nodes. Earlier patches have fixed this issue. 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>
This commit is contained in:
committed by
Alasdair G Kergon
parent
905e51b39a
commit
71fd5ae25d
@@ -405,8 +405,6 @@ int sm_ll_insert(struct ll_disk *ll, dm_block_t b,
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* FIXME: dm_btree_remove doesn't handle this yet */
|
|
||||||
if (old > 2) {
|
if (old > 2) {
|
||||||
r = dm_btree_remove(&ll->ref_count_info,
|
r = dm_btree_remove(&ll->ref_count_info,
|
||||||
ll->ref_count_root,
|
ll->ref_count_root,
|
||||||
@@ -414,7 +412,6 @@ int sm_ll_insert(struct ll_disk *ll, dm_block_t b,
|
|||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
__le32 le_rc = cpu_to_le32(ref_count);
|
__le32 le_rc = cpu_to_le32(ref_count);
|
||||||
|
Reference in New Issue
Block a user