[lvm-devel] LVM2/lib/metadata merge.c
agk at sourceware.org
agk at sourceware.org
Thu Apr 1 12:14:21 UTC 2010
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk at sourceware.org 2010-04-01 12:14:21
Modified files:
lib/metadata : merge.c
Log message:
Limit number of error messages when checking LV segments.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/merge.c.diff?cvsroot=lvm2&r1=1.38&r2=1.39
--- LVM2/lib/metadata/merge.c 2010/03/31 17:23:19 1.38
+++ LVM2/lib/metadata/merge.c 2010/04/01 12:14:20 1.39
@@ -55,6 +55,11 @@
return 1;
}
+#define ERROR_MAX 100
+#define inc_error_count \
+ if (error_count++ > ERROR_MAX) \
+ goto out
+
/*
* Verify that an LV's segments are consecutive, complete and don't overlap.
*/
@@ -63,9 +68,9 @@
struct lv_segment *seg, *seg2;
uint32_t le = 0;
unsigned seg_count = 0, seg_found;
- int r = 1;
uint32_t area_multiplier, s;
struct seg_list *sl;
+ int error_count = 0;
dm_list_iterate_items(seg, &lv->segments) {
seg_count++;
@@ -73,7 +78,7 @@
log_error("LV %s invalid: segment %u should begin at "
"LE %" PRIu32 " (found %" PRIu32 ").",
lv->name, seg_count, le, seg->le);
- r = 0;
+ inc_error_count;
}
area_multiplier = segtype_is_striped(seg->segtype) ?
@@ -83,7 +88,7 @@
log_error("LV %s: segment %u has inconsistent "
"area_len %u",
lv->name, seg_count, seg->area_len);
- r = 0;
+ inc_error_count;
}
if (complete_vg && seg->log_lv) {
@@ -91,14 +96,14 @@
log_error("LV %s: segment %u has log LV but "
"is not mirrored",
lv->name, seg_count);
- r = 0;
+ inc_error_count;
}
if (!(seg->log_lv->status & MIRROR_LOG)) {
log_error("LV %s: segment %u log LV %s is not "
"a mirror log",
lv->name, seg_count, seg->log_lv->name);
- r = 0;
+ inc_error_count;
}
if (!(seg2 = first_seg(seg->log_lv)) ||
@@ -106,7 +111,7 @@
log_error("LV %s: segment %u log LV does not "
"point back to mirror segment",
lv->name, seg_count);
- r = 0;
+ inc_error_count;
}
}
@@ -116,7 +121,7 @@
log_error("LV %s: segment %u mirror image "
"is not mirrored",
lv->name, seg_count);
- r = 0;
+ inc_error_count;
}
}
@@ -125,7 +130,7 @@
log_error("LV %s: segment %u has same LV %s for "
"both origin and snapshot",
lv->name, seg_count, seg->cow->name);
- r = 0;
+ inc_error_count;
}
}
@@ -134,7 +139,7 @@
log_error("LV %s: segment %u has unassigned "
"area %u.",
lv->name, seg_count, s);
- r = 0;
+ inc_error_count;
} else if (seg_type(seg, s) == AREA_PV) {
if (!seg_pvseg(seg, s) ||
seg_pvseg(seg, s)->lvseg != seg ||
@@ -142,7 +147,7 @@
log_error("LV %s: segment %u has "
"inconsistent PV area %u",
lv->name, seg_count, s);
- r = 0;
+ inc_error_count;
}
} else {
if (!seg_lv(seg, s) ||
@@ -151,7 +156,7 @@
log_error("LV %s: segment %u has "
"inconsistent LV area %u",
lv->name, seg_count, s);
- r = 0;
+ inc_error_count;
}
if (complete_vg && seg_lv(seg, s) &&
@@ -162,7 +167,7 @@
log_error("LV %s: segment %u mirror "
"image %u missing mirror ptr",
lv->name, seg_count, s);
- r = 0;
+ inc_error_count;
}
/* FIXME I don't think this ever holds?
@@ -171,7 +176,7 @@
"inconsistent LV area %u "
"size",
lv->name, seg_count, s);
- r = 0;
+ inc_error_count;
}
*/
seg_found = 0;
@@ -184,13 +189,13 @@
lv->name, seg_count,
seg_lv(seg, s)->name,
seg_lv(seg, s)->name, lv->name);
- r = 0;
+ inc_error_count;
} else if (seg_found > 1) {
log_error("LV %s has duplicated links "
"to LV %s segment %d",
seg_lv(seg, s)->name,
lv->name, seg_count);
- r = 0;
+ inc_error_count;
}
}
}
@@ -215,14 +220,14 @@
lv->name, seg->lv->name, seg->le,
seg->le + seg->len - 1,
seg->lv->name, lv->name);
- r = 0;
+ inc_error_count;
} else if (seg_found != sl->count) {
log_error("Reference count mismatch: LV %s has %d "
"links to LV %s:%" PRIu32 "-%" PRIu32
", which has %d links",
lv->name, sl->count, seg->lv->name, seg->le,
seg->le + seg->len - 1, seg_found);
- r = 0;
+ inc_error_count;
}
seg_found = 0;
@@ -236,17 +241,18 @@
" is incorrectly listed as being used by LV %s",
seg->lv->name, seg->le, seg->le + seg->len - 1,
lv->name);
- r = 0;
+ inc_error_count;
}
}
if (le != lv->le_count) {
log_error("LV %s: inconsistent LE count %u != %u",
lv->name, le, lv->le_count);
- r = 0;
+ inc_error_count;
}
- return r;
+out:
+ return !error_count;
}
/*
More information about the lvm-devel
mailing list