[lvm-devel] Don't allow resizing of internal logical volumes

Mike Snitzer snitzer at redhat.com
Sat Mar 20 02:04:46 UTC 2010


On Fri, Mar 19 2010 at  7:44pm -0400,
Mike Snitzer <snitzer at redhat.com> wrote:

> On Fri, Mar 19 2010 at  6:27pm -0400,
> Mikulas Patocka <mpatocka at redhat.com> wrote:
> 
> > OK. It is cleaner than my patch that checks the name, so commit it (except 
> > !lv_is_accessible_hidden(lv), because that has to wait until we commit 
> > shared snapshots).
> > 
> > I tested it and it refuses "snapshotX" volumes.
> 
> But as you said above: "snapshot0 volumes have the VISIBLE_LV flag set."
> 
> That said, I do see that in practice the existing lvm2 code does reject
> resizing "snapshot" type snapshot0 using !lv_is_visible(lv).  I'll have
> a closer look to understand that.

lv_is_visible() prevents resize on "snapshot" type snapshot0 because of
this out: (lv->status & SNAPSHOT)

As you suggested, I'll commit the lv_is_visible() change to tools/lvresize.c

> But when I tried it with the "multisnapshot" type snapshot0 (w/
> multisnap enabled LVM2 2.02.63 from my people page + the above patch)
> lvresize allowed it and then crashed in _setup_alloced_segment():

I've added the same out in lv_is_accessible_hidden() and this prevents
the "multisnapshot" type snapshot0 from being resized:

int lv_is_accessible_hidden(const struct logical_volume *lv)
{
        if (lv->status & SNAPSHOT)
                return 0;

        if (lv_is_cow(lv))
                return (find_cow(lv)->lv->status & ACCESS_HIDDEN_LV) ? 1 : 0;

        return (lv->status & ACCESS_HIDDEN_LV) ? 1 : 0;
}





More information about the lvm-devel mailing list