[lvm-devel] [PATCH] vg_validate support for pvmove LVs (BZ 662669)

Zdenek Kabelac zkabelac at redhat.com
Tue Dec 14 08:51:19 UTC 2010


Dne 13.12.2010 22:24, Petr Rockai napsal(a):
> Hi,
> 
> I am attaching patch that revs up vg_validate somewhat, to catch some
> malformed (internal) pvmoveN LVs. Currently, it checks that the segments
> in there are either linear or mirrored with 2 legs. Unfortunately, I
> haven't been able to come up with any further restrictions that wouldn't
> break the existing tests on some count. It seems that vg_validate is
> called on VGs where linear segments exist (although I have been unable
> to capture them at vg_commit time), and they are interspersed with
> mirrored segments in the same LV. I have already spent a lot of time on
> this, so if someone wants to come up with a stricter check, please feel
> free to do so.
> 
> Anyway, the attached patch does catch the bug triggered by kabi's test
> attached to BZ 654447. For the other bug (dangling reference) I will
> submit a separate BZ and a separate patch, hopefully tomorrow.
> 
> Yours,

>  
> +	dm_list_iterate_items(lvl, &vg->lvs) {
> +		if (!(lvl->lv->status & PVMOVE))
> +			continue;

Optionally - it could be put as call of local function into the same
dm_list_iterate_items() few lines above ?

i.e.
  if ((lvl->lv->status & PVMOVE) && !_validate_pvmove(lvl->lv))
	r = 0;

> +		dm_list_iterate_items(seg, &lvl->lv->segments) {
> +			if (seg_is_mirrored(seg)) {
> +				if (seg->area_count != 2) {
> +					log_error(INTERNAL_ERROR
> +						  "Segment %d in %s is not 2-way.",
> +						  loop_counter1, lvl->lv->name);
> +					r = 0;
> +				}
> +			} else if (seg->area_count != 1) {
> +				log_error(INTERNAL_ERROR
> +					  "Segment %d in %s has wrong number of areas: %d.",
> +					  loop_counter1, lvl->lv->name, seg->area_count);
> +				r = 0;
> +			}
> +		}

and move this into static _validate_pvmove().

Zdenek




More information about the lvm-devel mailing list