Commit 71fd5ae2 authored by Joe Thornber's avatar Joe Thornber Committed by Alasdair G Kergon

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: default avatarJoe Thornber <ejt@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 905e51b3
...@@ -405,8 +405,6 @@ int sm_ll_insert(struct ll_disk *ll, dm_block_t b, ...@@ -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, ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment