[linux-lvm] Problem using lvreduce

Joe Thornber thornber at btconnect.com
Fri Aug 17 10:43:44 UTC 2001


Soohoon,

On Thu, Aug 16, 2001 at 01:06:39PM -0400, Soohoon Lee wrote:
> 
> That's the problem what I had.
> I posted fix and waiting verification but 
> mail traffic saying they are busy with 1.0 release and PE start point
> problem.

If you think we're not attending something important, please repost
and kick up a fuss.  I do forget/miss things on the list.

> And seems, this problem is also related to that PE start point problem.
> Anyway, quick and no warranty fix is
> 
> 
> --- pv_release_pe.c.old Thu Aug 16 09:23:35 2001
> +++ pv_release_pe.c     Wed Aug 15 09:09:06 2001
> @@ -85,7 +85,7 @@
>           }
>           pe_index = ( vg->lv[l]->lv_current_pe[p].pe - 
>                        LVM_VGDA_SIZE ( vg->pv[pv_num]) / SECTOR_SIZE) /
> -                      vg->pe_size;
> +                      vg->pe_size - 1;
>           debug ( "pv_release_pe -- pv_name: %s  pe: %lu  sector: %lu\n",
>                    vg->pv[pv_num]->pv_name,
>                    pe_index,


This patch looks wrong, I cant see why anyone would want to divide by
pe_size - 1, if it's working it's by accident.

I'm not familiar with this bit of code, but what I think it's doing
is converting the le number 'p' into a pe number.  I suspect that for your
system the le numbers map directly onto the pe numbers, hence your comment
wondering why we don't just use 'p'.  The pe location changed recently so
I could well believe this calculation is wrong.

Heinz, 

Please confirm this is what this bit of code does.

If so we should introduce a companion for get_pe_offset that does the
opposite in liblvm.h:

static inline ulong get_pe_from_offset(ulong offset, pv_t *pv)
{
	return (offset - pv->pe_start) / pv->pe_size;
}

- Joe



More information about the linux-lvm mailing list