mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
8ef2b021ed
Clear many compiler warnings (i386) & associated bugs - hopefully without introducing too many new bugs:-) (Same exercise required for other archs.) Default compilation has optimisation - or else use ./configure --enable-debug
62 lines
1.2 KiB
C
62 lines
1.2 KiB
C
/*
|
|
* Copyright (C) 2001 Sistina Software
|
|
*
|
|
* This file is released under the LGPL.
|
|
*/
|
|
|
|
#include "lib.h"
|
|
#include "metadata.h"
|
|
|
|
/*
|
|
* Returns success if the segments were
|
|
* successfully merged. If the do merge, 'first'
|
|
* will be adjusted to contain both areas.
|
|
*/
|
|
static int _merge(struct lv_segment *first, struct lv_segment *second)
|
|
{
|
|
unsigned int s;
|
|
uint32_t width;
|
|
|
|
if (!first ||
|
|
(first->type != SEG_STRIPED) ||
|
|
(first->type != second->type) ||
|
|
(first->stripes != second->stripes) ||
|
|
(first->stripe_size != second->stripe_size))
|
|
return 0;
|
|
|
|
for (s = 0; s < first->stripes; s++) {
|
|
width = first->len / first->stripes;
|
|
|
|
if ((first->area[s].pv != second->area[s].pv) ||
|
|
(first->area[s].pe + width != second->area[s].pe))
|
|
return 0;
|
|
}
|
|
|
|
/* we should merge */
|
|
first->len += second->len;
|
|
|
|
return 1;
|
|
}
|
|
|
|
int lv_merge_segments(struct logical_volume *lv)
|
|
{
|
|
struct list *segh;
|
|
struct lv_segment *current, *prev = NULL;
|
|
|
|
list_iterate(segh, &lv->segments) {
|
|
current = list_item(segh, struct lv_segment);
|
|
|
|
if (_merge(prev, current))
|
|
list_del(¤t->list);
|
|
else
|
|
prev = current;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int lv_check_segments(struct logical_volume *lv)
|
|
{
|
|
return 1;
|
|
}
|