mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
o Comparison function was sorting things in ascending rather than
descending order. o free off the sort array when finished with it.
This commit is contained in:
parent
488a58a998
commit
c0ca88c287
@ -94,10 +94,10 @@ static int _comp_area(const void *l, const void *r)
|
|||||||
struct pv_area *rhs = *((struct pv_area **) r);
|
struct pv_area *rhs = *((struct pv_area **) r);
|
||||||
|
|
||||||
if (lhs->count < rhs->count)
|
if (lhs->count < rhs->count)
|
||||||
return -1;
|
return 1;
|
||||||
|
|
||||||
else if (lhs->count > rhs->count)
|
else if (lhs->count > rhs->count)
|
||||||
return 1;
|
return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -106,6 +106,7 @@ static int _alloc_striped(struct logical_volume *lv,
|
|||||||
struct list *pvms, uint32_t allocated,
|
struct list *pvms, uint32_t allocated,
|
||||||
uint32_t stripes, uint32_t stripe_size)
|
uint32_t stripes, uint32_t stripe_size)
|
||||||
{
|
{
|
||||||
|
int r = 0;
|
||||||
struct list *pvmh;
|
struct list *pvmh;
|
||||||
struct pv_area **areas;
|
struct pv_area **areas;
|
||||||
int pv_count = 0, index;
|
int pv_count = 0, index;
|
||||||
@ -135,26 +136,27 @@ static int _alloc_striped(struct logical_volume *lv,
|
|||||||
struct pv_area);
|
struct pv_area);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index < stripes)
|
if (index < stripes) {
|
||||||
goto no_space;
|
log_error("Insufficient free extents (suitable for "
|
||||||
|
"striping) to allocate logical volume "
|
||||||
|
"%s: %u required",
|
||||||
|
lv->name, lv->le_count);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* sort the areas so we allocate from the biggest */
|
/* sort the areas so we allocate from the biggest */
|
||||||
qsort(areas, index, sizeof(*areas), _comp_area);
|
qsort(areas, index, sizeof(*areas), _comp_area);
|
||||||
|
|
||||||
if (!_alloc_stripe_area(lv, stripes, areas, &allocated)) {
|
if (!_alloc_stripe_area(lv, stripes, areas, &allocated)) {
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
r = 1;
|
||||||
|
|
||||||
return 1;
|
out:
|
||||||
|
dbg_free(areas);
|
||||||
no_space:
|
return r;
|
||||||
|
|
||||||
log_error("Insufficient free extents (suitable for striping) to "
|
|
||||||
"allocate logical volume %s: %u required",
|
|
||||||
lv->name, lv->le_count);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user