[dm-devel] Re: [PATCH 2 of 2] DM Snapshot: dont insert before existing chunk
Mike Snitzer
snitzer at redhat.com
Fri Sep 25 03:43:36 UTC 2009
On Thu, Sep 24 2009 at 8:48am -0400,
Alasdair G Kergon <agk at redhat.com> wrote:
> On Wed, Sep 23, 2009 at 10:25:08AM -0500, Jon Brassow wrote:
> > Don't insert into hash before an existing chunk.
> > Most inserts are after an existing extent anyway so this code is used
> > very rarely.
>
> Again, I'm not particularly keen on taking this one. Some systems are very
> short of memory and everything we can save matters and we have no statistics
> about how "rare" this actually is.
>
> Is it really that difficult to split into two when removing?
Jon, Mikulas and I examined/discussed this in detail today. We had a
nice break-through: snapshot-merge no longer needs to avoid inserting
before an existing chunk. As such snapshot-merge no longer imposes less
efficient packing of the exception cache.
We needed a small change to the snapshot-merge clear_exception() code so
that it increments e->old_chunk and e->new_chunk when it makes its call
to dm_consecutive_chunk_count_dec(), e.g.:
if (dm_consecutive_chunk_count(e)) {
if ((de->old_chunk == e->old_chunk) &&
(de->new_chunk == dm_chunk_number(e->new_chunk))) {
e->old_chunk++;
e->new_chunk++;
}
dm_consecutive_chunk_count_dec(e);
}
This is the inverse of what is done in dm_insert_exception():
/* Insert before an existing chunk? */
if (new_e->old_chunk == (e->old_chunk - 1) &&
new_e->new_chunk == (dm_chunk_number(e->new_chunk) - 1)) {
dm_consecutive_chunk_count_inc(e);
e->old_chunk--;
e->new_chunk--;
dm_free_exception(eh, new_e);
return;
}
Updated DM snapshot-merge patches are available here:
http://people.redhat.com/msnitzer/patches/snapshot-merge/kernel_unified/2.6.31/
More information about the dm-devel
mailing list