mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-09 12:58:41 +03:00
o Tidy
This commit is contained in:
parent
01df2cf464
commit
d294d7604c
@ -21,8 +21,8 @@
|
||||
#define MIN_PE_SIZE (8192L / SECTOR_SIZE) /* 8 KB in sectors */
|
||||
#define MAX_PE_SIZE (16L * 1024L * 1024L / SECTOR_SIZE * 1024)
|
||||
#define PE_SIZE_PV_SIZE_REL 5 /* PV size must be at least 5 times PE size */
|
||||
#define MAX_LE_TOTAL ( ( 1 << ( sizeof ( uint16_t) * 8)) - 2)
|
||||
#define MAX_PE_TOTAL ( ( uint32_t) (-2) )
|
||||
#define MAX_LE_TOTAL 65534 /* 2^16 - 2 */
|
||||
#define MAX_PE_TOTAL ((uint32_t) -2)
|
||||
|
||||
|
||||
#define UNMAPPED_EXTENT 0
|
||||
|
@ -236,32 +236,16 @@ static int _read_linear(struct pool *mem, struct lv_map *lvm)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _check_for_stripe(struct lv_map *lvm, uint32_t base_le,
|
||||
uint32_t stripe, uint32_t length)
|
||||
{
|
||||
uint32_t next_pe, pe, base;
|
||||
struct physical_volume *next_pv;
|
||||
|
||||
base = base_le + stripe * length;
|
||||
|
||||
next_pe = lvm->map[base].pe;
|
||||
next_pv = lvm->map[base].pv;
|
||||
|
||||
for (pe = 1; pe < length; pe++) {
|
||||
if (lvm->map[base + pe].pe != next_pe + pe ||
|
||||
lvm->map[base + pe].pv != next_pv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _read_stripes(struct pool *mem, struct lv_map *lvm)
|
||||
{
|
||||
uint32_t st, le = 0, flag_warning = 0;
|
||||
struct stripe_segment *seg;
|
||||
const char *too_many_segments =
|
||||
"Logical volume appears to contain more than one segment, "
|
||||
"which is not allowed in format1.";
|
||||
|
||||
while (le < lvm->lv->le_count) {
|
||||
|
||||
struct stripe_segment *seg;
|
||||
struct pe_specifier *ps;
|
||||
uint32_t len, i, s;
|
||||
|
||||
if (!(seg = _alloc_seg(mem, lvm->stripes))) {
|
||||
stack;
|
||||
@ -269,47 +253,39 @@ static int _read_stripes(struct pool *mem, struct lv_map *lvm)
|
||||
}
|
||||
|
||||
seg->lv = lvm->lv;
|
||||
seg->le = le;
|
||||
seg->len = 0;
|
||||
seg->le = 0;
|
||||
seg->len = lvm->lv->le_count;
|
||||
seg->stripes = lvm->stripes;
|
||||
seg->stripe_size = lvm->stripe_size;
|
||||
st = 1;
|
||||
|
||||
seg->area[0].pv = lvm->map[le].pv;
|
||||
seg->area[0].pe = lvm->map[le].pe;
|
||||
|
||||
do
|
||||
seg->len++;
|
||||
while ((lvm->map[le + seg->len].pv == seg->area[0].pv) &&
|
||||
(lvm->map[le + seg->len].pe == seg->area[0].pe +
|
||||
seg->len));
|
||||
|
||||
while (st < lvm->stripes &&
|
||||
_check_for_stripe(lvm, le, st, seg->len)) {
|
||||
|
||||
seg->area[st].pv = lvm->map[le + st * seg->len].pv;
|
||||
seg->area[st].pe = lvm->map[le + st * seg->len].pe;
|
||||
|
||||
st++;
|
||||
/*
|
||||
* There can only be a single segment for format1.
|
||||
*/
|
||||
if (seg->len % seg->stripes) {
|
||||
log_err(too_many_segments);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (st != lvm->stripes)
|
||||
flag_warning++;
|
||||
len = seg->len / seg->stripes;
|
||||
for (s = 0; s < lvm->stripes; s++) {
|
||||
seg->area[s].pv = lvm->map[s * len].pv;
|
||||
seg->area[s].pe = lvm->map[s * len].pe;
|
||||
}
|
||||
|
||||
seg->stripes = st;
|
||||
seg->len *= seg->stripes;
|
||||
le += seg->len;
|
||||
/*
|
||||
* Check this assumption was correct.
|
||||
*/
|
||||
for (i = 1; i < len; i++)
|
||||
for (s = 0; s < lvm->stripes; s++) {
|
||||
ps = lvm->map + i + (s * len);
|
||||
if ((seg->area[s].pv != ps->pv) ||
|
||||
((seg->area[s].pe + i) != ps->pe)) {
|
||||
log_err(too_many_segments);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
list_add(&lvm->lv->segments, &seg->list);
|
||||
}
|
||||
|
||||
if (flag_warning) {
|
||||
log_error("WARNING: Found %d segments with different numbers "
|
||||
"of stripes.", flag_warning);
|
||||
log_error("Risk of data corruption.");
|
||||
log_error("Check the mapping is what you intended before you "
|
||||
"use %s!", seg->lv->name);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user