1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-30 01:47:56 +03:00

o Add extra parameter to lv_manip fns

This commit is contained in:
Joe Thornber 2002-01-24 17:15:49 +00:00
parent 168b7bf9e2
commit 0cf2445bb7
2 changed files with 45 additions and 18 deletions

View File

@ -165,10 +165,9 @@ static int _alloc_striped(struct logical_volume *lv,
/*
* The heart of the allocation code. This
* function takes a pv_area and allocates it to
* the lv. If the lv doesn't need the complete
* area then the area is split, otherwise the area
* The heart of the allocation code. This function takes a
* pv_area and allocates it to the lv. If the lv doesn't need
* the complete area then the area is split, otherwise the area
* is unlinked from the pv_map.
*/
static int _alloc_linear_area(struct logical_volume *lv, uint32_t *index,
@ -296,12 +295,10 @@ static int _allocate(struct volume_group *vg, struct logical_volume *lv,
}
/*
* Build the sets of available areas on
* the pv's.
* Build the sets of available areas on the pv's.
*/
if (!(pvms = create_pv_maps(scratch, vg, acceptable_pvs))) {
if (!(pvms = create_pv_maps(scratch, vg, acceptable_pvs)))
goto out;
}
if (stripes > 1)
r = _alloc_striped(lv, pvms, allocated, stripes, stripe_size);
@ -321,13 +318,16 @@ static int _allocate(struct volume_group *vg, struct logical_volume *lv,
if (r) {
vg->free_count -= lv->le_count - allocated;
/* Iterate through the new segments,
* updating pe counts in pv's. */
/*
* Iterate through the new segments, updating pe
* counts in pv's.
*/
for (segh = lv->segments.p; segh != old_tail; segh = segh->p)
_get_extents(list_item(segh, struct stripe_segment));
} else {
/* Put the segment list back how
* we found it. */
/*
* Put the segment list back how we found it.
*/
old_tail->n = &lv->segments;
lv->segments.p = old_tail;
}
@ -360,7 +360,8 @@ static char *_generate_lv_name(struct volume_group *vg,
return buffer;
}
struct logical_volume *lv_create(const char *name,
struct logical_volume *lv_create(struct format_instance *fi,
const char *name,
uint32_t status,
uint32_t stripes,
uint32_t stripe_size,
@ -433,6 +434,11 @@ struct logical_volume *lv_create(const char *name,
goto bad;
}
if (fi->ops->lv_setup && !fi->ops->lv_setup(fi, lv)) {
stack;
goto bad;
}
vg->lv_count++;
list_add(&vg->lvs, &ll->list);
@ -445,7 +451,8 @@ struct logical_volume *lv_create(const char *name,
return NULL;
}
int lv_reduce(struct logical_volume *lv, uint32_t extents)
int lv_reduce(struct format_instance *fi,
struct logical_volume *lv, uint32_t extents)
{
struct list *segh;
struct stripe_segment *seg;
@ -473,10 +480,16 @@ int lv_reduce(struct logical_volume *lv, uint32_t extents)
lv->le_count -= extents;
lv->size = lv->le_count * lv->vg->extent_size;
if (fi->ops->lv_setup && !fi->ops->lv_setup(fi, lv)) {
stack;
return 0;
}
return 1;
}
int lv_extend(struct logical_volume *lv,
int lv_extend(struct format_instance *fi,
struct logical_volume *lv,
uint32_t stripes, uint32_t stripe_size,
uint32_t extents,
struct list *acceptable_pvs)
@ -502,6 +515,11 @@ int lv_extend(struct logical_volume *lv,
return 0;
}
if (fi->ops->lv_setup && !fi->ops->lv_setup(fi, lv)) {
stack;
return 0;
}
return 1;
}

View File

@ -194,6 +194,12 @@ struct format_handler {
int (*pv_write)(struct format_instance *fi,
struct physical_volume *pv);
/*
* Tweak an already filled out a lv eg, check there
* aren't too many extents.
*/
int (*lv_setup)(struct format_instance *fi, struct logical_volume *lv);
/*
* Tweak an already filled out vg. eg, max_pv is format
* specific.
@ -252,7 +258,8 @@ int vg_extend(struct format_instance *fi,
* Create a new LV within a given volume group.
*
*/
struct logical_volume *lv_create(const char *name,
struct logical_volume *lv_create(struct format_instance *fi,
const char *name,
uint32_t status,
uint32_t stripes,
uint32_t stripe_size,
@ -260,9 +267,11 @@ struct logical_volume *lv_create(const char *name,
struct volume_group *vg,
struct list *acceptable_pvs);
int lv_reduce(struct logical_volume *lv, uint32_t extents);
int lv_reduce(struct format_instance *fi,
struct logical_volume *lv, uint32_t extents);
int lv_extend(struct logical_volume *lv,
int lv_extend(struct format_instance *fi,
struct logical_volume *lv,
uint32_t stripes,
uint32_t stripe_size,
uint32_t extents,