[dm-devel] Re: Snapshot merging

Mikulas Patocka mpatocka at redhat.com
Wed Sep 9 17:23:14 UTC 2009



On Wed, 9 Sep 2009, Mike Snitzer wrote:

> On Wed, Sep 09 2009 at 11:56am -0400,
> Mike Snitzer <snitzer at redhat.com> wrote:
> 
> > On Wed, Sep 09 2009 at 11:47am -0400,
> > Mikulas Patocka <mpatocka at redhat.com> wrote:
> > 
> > > Hi
> > > 
> > > I found one bug in the userspace code --- start merging, then from the 
> > > other console deactivate the origin volume with lvchange -an, then wait 
> > > next 15 seconds for the next poll interval:
> > > 
> > > the poll process will think that the merging finished, removing the 
> > > snapshot, leaving partially merged origin and causing data corruption:
> > > 
> > > [slunicko:~]# lvconvert -M vg1/lv2_snap1
> > >   Merging of volume lv2_snap1 started.
> > >   lv2: Merged: 13.1%
> > > ( .... deactivate the volume from the other console ....)
> > >   lv2: Merged: -1.0%
> > >   Merge into logical volume lv2 finished.
> > >   Logical volume "snapshot4" successfully removed
> > > 
> > > Maybe this bug was in my code too, I don't remember.
> > 
> > Likely, considering I merely ported your LVM2 patches to the latest
> > version.  That said, I could've introduced this issue by missing
> > something in the port.  Regardless, I'll have a look at preventing the
> > origin LV from being deactivated during a merge.
> 
> Or more correctly: gracefully halt the merge and deactivate merging
> snapshot along with the origin.  Then on activation the merge should
> just resume (in the background).
> 
> Mike

I'd patch _poll_merge_progress to return zero (instead of 
PROGRESS_FINISHED) if querying the lv failed (lv_snapshot_percent returned 
zero) --- that should terminate the polling process without updating 
anything.

You can try it and test it.

Mikulas




More information about the dm-devel mailing list