From: agk@sourceware.org <agk@sourceware.org>
To: lvm-devel@redhat.com
Subject: LVM2 ./WHATS_NEW lib/activate/activate.c lib/a ...
Date: 1 Oct 2009 00:35:32 -0000 [thread overview]
Message-ID: <20091001003532.11284.qmail@sourceware.org> (raw)
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk at sourceware.org 2009-10-01 00:35:30
Modified files:
. : WHATS_NEW
lib/activate : activate.c activate.h dev_manager.c
dev_manager.h
lib/display : display.c
lib/metadata : metadata-exported.h mirror.c segtype.h
lib/mirror : mirrored.c
lib/report : report.c
lib/snapshot : snapshot.c
tools : lvscan.c polldaemon.c
Log message:
Introduce percent_range_t and centralise snapshot full/mirror in-sync checks.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1284&r2=1.1285
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.c.diff?cvsroot=lvm2&r1=1.155&r2=1.156
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.h.diff?cvsroot=lvm2&r1=1.63&r2=1.64
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.158&r2=1.159
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.h.diff?cvsroot=lvm2&r1=1.29&r2=1.30
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/display/display.c.diff?cvsroot=lvm2&r1=1.104&r2=1.105
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.112&r2=1.113
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.89&r2=1.90
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/segtype.h.diff?cvsroot=lvm2&r1=1.24&r2=1.25
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/mirror/mirrored.c.diff?cvsroot=lvm2&r1=1.63&r2=1.64
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/report/report.c.diff?cvsroot=lvm2&r1=1.102&r2=1.103
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/snapshot/snapshot.c.diff?cvsroot=lvm2&r1=1.37&r2=1.38
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvscan.c.diff?cvsroot=lvm2&r1=1.39&r2=1.40
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/polldaemon.c.diff?cvsroot=lvm2&r1=1.26&r2=1.27
--- LVM2/WHATS_NEW 2009/09/30 17:43:51 1.1284
+++ LVM2/WHATS_NEW 2009/10/01 00:35:29 1.1285
@@ -1,5 +1,6 @@
Version 2.02.54 -
=====================================
+ Introduce percent_range_t and centralise snapshot full/mirror in-sync checks.
Factor out poll_mirror_progress and introduce progress_t.
Distinguish between powers of 1000 and powers of 1024 in unit suffixes.
Restart lvconverts in vgchange by sharing lv_spawn_background_polling.
--- LVM2/lib/activate/activate.c 2009/09/29 18:50:28 1.155
+++ LVM2/lib/activate/activate.c 2009/10/01 00:35:29 1.156
@@ -156,12 +156,14 @@
{
return 0;
}
-int lv_snapshot_percent(const struct logical_volume *lv, float *percent)
+int lv_snapshot_percent(const struct logical_volume *lv, float *percent,
+ percent_range_t *percent_range)
{
return 0;
}
int lv_mirror_percent(struct cmd_context *cmd, struct logical_volume *lv,
- int wait, float *percent, uint32_t *event_nr)
+ int wait, float *percent, percent_range_t *percent_range,
+ uint32_t *event_nr)
{
return 0;
}
@@ -495,7 +497,8 @@
/*
* Returns 1 if percent set, else 0 on failure.
*/
-int lv_snapshot_percent(const struct logical_volume *lv, float *percent)
+int lv_snapshot_percent(const struct logical_volume *lv, float *percent,
+ percent_range_t *percent_range)
{
int r;
struct dev_manager *dm;
@@ -506,7 +509,7 @@
if (!(dm = dev_manager_create(lv->vg->cmd, lv->vg->name)))
return_0;
- if (!(r = dev_manager_snapshot_percent(dm, lv, percent)))
+ if (!(r = dev_manager_snapshot_percent(dm, lv, percent, percent_range)))
stack;
dev_manager_destroy(dm);
@@ -516,7 +519,8 @@
/* FIXME Merge with snapshot_percent */
int lv_mirror_percent(struct cmd_context *cmd, struct logical_volume *lv,
- int wait, float *percent, uint32_t *event_nr)
+ int wait, float *percent, percent_range_t *percent_range,
+ uint32_t *event_nr)
{
int r;
struct dev_manager *dm;
@@ -541,7 +545,8 @@
if (!(dm = dev_manager_create(lv->vg->cmd, lv->vg->name)))
return_0;
- if (!(r = dev_manager_mirror_percent(dm, lv, wait, percent, event_nr)))
+ if (!(r = dev_manager_mirror_percent(dm, lv, wait, percent,
+ percent_range, event_nr)))
stack;
dev_manager_destroy(dm);
--- LVM2/lib/activate/activate.h 2009/02/28 00:54:06 1.63
+++ LVM2/lib/activate/activate.h 2009/10/01 00:35:29 1.64
@@ -81,9 +81,11 @@
/*
* Returns 1 if percent has been set, else 0.
*/
-int lv_snapshot_percent(const struct logical_volume *lv, float *percent);
+int lv_snapshot_percent(const struct logical_volume *lv, float *percent,
+ percent_range_t *percent_range);
int lv_mirror_percent(struct cmd_context *cmd, struct logical_volume *lv,
- int wait, float *percent, uint32_t *event_nr);
+ int wait, float *percent, percent_range_t *percent_range,
+ uint32_t *event_nr);
/*
* Return number of LVs in the VG that are active.
--- LVM2/lib/activate/dev_manager.c 2009/08/04 15:36:14 1.158
+++ LVM2/lib/activate/dev_manager.c 2009/10/01 00:35:29 1.159
@@ -327,10 +327,26 @@
return 0;
}
+static percent_range_t _combine_percent_ranges(percent_range_t a,
+ percent_range_t b)
+{
+ if (a == PERCENT_INVALID || b == PERCENT_INVALID)
+ return PERCENT_INVALID;
+
+ if (a == PERCENT_100 && b == PERCENT_100)
+ return PERCENT_100;
+
+ if (a == PERCENT_0 && b == PERCENT_0)
+ return PERCENT_0;
+
+ return PERCENT_0_TO_100;
+}
+
static int _percent_run(struct dev_manager *dm, const char *name,
const char *dlid,
const char *target_type, int wait,
struct logical_volume *lv, float *percent,
+ percent_range_t *overall_percent_range,
uint32_t *event_nr)
{
int r = 0;
@@ -343,10 +359,13 @@
struct dm_list *segh = &lv->segments;
struct lv_segment *seg = NULL;
struct segment_type *segtype;
+ percent_range_t percent_range, combined_percent_range;
+ int first_time = 1;
uint64_t total_numerator = 0, total_denominator = 0;
*percent = -1;
+ *overall_percent_range = PERCENT_INVALID;
if (!(dmt = _setup_task(name, dlid, event_nr,
wait ? DM_DEVICE_WAITEVENT : DM_DEVICE_STATUS, 0, 0)))
@@ -383,12 +402,20 @@
continue;
if (segtype->ops->target_percent &&
- !segtype->ops->target_percent(&dm->target_state, dm->mem,
+ !segtype->ops->target_percent(&dm->target_state,
+ &percent_range, dm->mem,
dm->cmd, seg, params,
&total_numerator,
&total_denominator))
goto_out;
+ if (first_time) {
+ combined_percent_range = percent_range;
+ first_time = 0;
+ } else
+ combined_percent_range =
+ _combine_percent_ranges(combined_percent_range,
+ percent_range);
} while (next);
if (lv && (segh = dm_list_next(&lv->segments, segh))) {
@@ -397,10 +424,16 @@
goto out;
}
- if (total_denominator)
+ if (total_denominator) {
*percent = (float) total_numerator *100 / total_denominator;
- else
+ *overall_percent_range = combined_percent_range;
+ } else {
*percent = 100;
+ if (first_time)
+ *overall_percent_range = PERCENT_100;
+ else
+ *overall_percent_range = combined_percent_range;
+ }
log_debug("LV percent: %f", *percent);
r = 1;
@@ -413,20 +446,20 @@
static int _percent(struct dev_manager *dm, const char *name, const char *dlid,
const char *target_type, int wait,
struct logical_volume *lv, float *percent,
- uint32_t *event_nr)
+ percent_range_t *overall_percent_range, uint32_t *event_nr)
{
if (dlid && *dlid) {
if (_percent_run(dm, NULL, dlid, target_type, wait, lv, percent,
- event_nr))
+ overall_percent_range, event_nr))
return 1;
else if (_percent_run(dm, NULL, dlid + sizeof(UUID_PREFIX) - 1,
target_type, wait, lv, percent,
- event_nr))
+ overall_percent_range, event_nr))
return 1;
}
if (name && _percent_run(dm, name, NULL, target_type, wait, lv, percent,
- event_nr))
+ overall_percent_range, event_nr))
return 1;
return 0;
@@ -481,7 +514,7 @@
int dev_manager_snapshot_percent(struct dev_manager *dm,
const struct logical_volume *lv,
- float *percent)
+ float *percent, percent_range_t *percent_range)
{
char *name;
const char *dlid;
@@ -500,7 +533,7 @@
*/
log_debug("Getting device status percentage for %s", name);
if (!(_percent(dm, name, dlid, "snapshot", 0, NULL, percent,
- NULL)))
+ percent_range, NULL)))
return_0;
/* FIXME dm_pool_free ? */
@@ -513,7 +546,8 @@
/* FIXME Cope with more than one target */
int dev_manager_mirror_percent(struct dev_manager *dm,
struct logical_volume *lv, int wait,
- float *percent, uint32_t *event_nr)
+ float *percent, percent_range_t *percent_range,
+ uint32_t *event_nr)
{
char *name;
const char *dlid;
@@ -533,7 +567,7 @@
log_debug("Getting device mirror status percentage for %s", name);
if (!(_percent(dm, name, dlid, "mirror", wait, lv, percent,
- event_nr)))
+ percent_range, event_nr)))
return_0;
return 1;
--- LVM2/lib/activate/dev_manager.h 2009/05/20 09:52:37 1.29
+++ LVM2/lib/activate/dev_manager.h 2009/10/01 00:35:29 1.30
@@ -16,6 +16,8 @@
#ifndef _LVM_DEV_MANAGER_H
#define _LVM_DEV_MANAGER_H
+#include "metadata-exported.h"
+
struct logical_volume;
struct volume_group;
struct cmd_context;
@@ -44,10 +46,12 @@
struct dm_info *info, uint32_t *read_ahead);
int dev_manager_snapshot_percent(struct dev_manager *dm,
const struct logical_volume *lv,
- float *percent);
+ float *percent,
+ percent_range_t *percent_range);
int dev_manager_mirror_percent(struct dev_manager *dm,
struct logical_volume *lv, int wait,
- float *percent, uint32_t *event_nr);
+ float *percent, percent_range_t *percent_range,
+ uint32_t *event_nr);
int dev_manager_suspend(struct dev_manager *dm, struct logical_volume *lv,
int lockfs, int flush_required);
int dev_manager_activate(struct dev_manager *dm, struct logical_volume *lv);
--- LVM2/lib/display/display.c 2009/09/30 14:19:01 1.104
+++ LVM2/lib/display/display.c 2009/10/01 00:35:29 1.105
@@ -482,6 +482,7 @@
char uuid[64] __attribute((aligned(8)));
struct lv_segment *snap_seg = NULL;
float snap_percent; /* fused, fsize; */
+ percent_range_t percent_range;
if (!id_write_format(&lv->lvid.id[1], uuid, sizeof(uuid)))
return_0;
@@ -506,24 +507,26 @@
origin_list) {
if (inkernel &&
(snap_active = lv_snapshot_percent(snap_seg->cow,
- &snap_percent)))
- if (snap_percent < 0 || snap_percent >= 100)
+ &snap_percent,
+ &percent_range)))
+ if (percent_range == PERCENT_INVALID)
snap_active = 0;
log_print(" %s%s/%s [%s]",
lv->vg->cmd->dev_dir, lv->vg->name,
snap_seg->cow->name,
- (snap_active > 0) ? "active" : "INACTIVE");
+ snap_active ? "active" : "INACTIVE");
}
snap_seg = NULL;
} else if ((snap_seg = find_cow(lv))) {
if (inkernel &&
(snap_active = lv_snapshot_percent(snap_seg->cow,
- &snap_percent)))
- if (snap_percent < 0 || snap_percent >= 100)
+ &snap_percent,
+ &percent_range)))
+ if (percent_range == PERCENT_INVALID)
snap_active = 0;
log_print("LV snapshot status %s destination for %s%s/%s",
- (snap_active > 0) ? "active" : "INACTIVE",
+ snap_active ? "active" : "INACTIVE",
lv->vg->cmd->dev_dir, lv->vg->name,
snap_seg->origin->name);
}
--- LVM2/lib/metadata/metadata-exported.h 2009/09/15 18:35:14 1.112
+++ LVM2/lib/metadata/metadata-exported.h 2009/10/01 00:35:29 1.113
@@ -136,6 +136,13 @@
DONT_PROMPT_OVERRIDE = 2 /* Skip prompt + override a second condition */
} force_t;
+typedef enum {
+ PERCENT_0 = 0,
+ PERCENT_0_TO_100 = 1,
+ PERCENT_100 = 2,
+ PERCENT_INVALID = 3
+} percent_range_t;
+
struct cmd_context;
struct format_handler;
struct labeller;
--- LVM2/lib/metadata/mirror.c 2009/06/01 14:43:28 1.89
+++ LVM2/lib/metadata/mirror.c 2009/10/01 00:35:29 1.90
@@ -701,17 +701,16 @@
static int _mirrored_lv_in_sync(struct logical_volume *lv)
{
float sync_percent;
+ percent_range_t percent_range;
- if (!lv_mirror_percent(lv->vg->cmd, lv, 0, &sync_percent, NULL)) {
+ if (!lv_mirror_percent(lv->vg->cmd, lv, 0, &sync_percent,
+ &percent_range, NULL)) {
log_error("Unable to determine mirror sync status of %s/%s.",
lv->vg->name, lv->name);
return 0;
}
- if (sync_percent >= 100.0)
- return 1;
-
- return 0;
+ return (percent_range == PERCENT_100) ? 1 : 0;
}
/*
@@ -1203,6 +1202,7 @@
struct dm_list *removable_pvs)
{
float sync_percent;
+ percent_range_t percent_range = PERCENT_0;
struct lvinfo info;
struct volume_group *vg = lv->vg;
@@ -1214,7 +1214,8 @@
/* Had disk log, switch to core. */
if (lv_info(cmd, lv, &info, 0, 0) && info.exists) {
- if (!lv_mirror_percent(cmd, lv, 0, &sync_percent, NULL)) {
+ if (!lv_mirror_percent(cmd, lv, 0, &sync_percent,
+ &percent_range, NULL)) {
log_error("Unable to determine mirror sync status.");
return 0;
}
@@ -1229,7 +1230,7 @@
else
return 0;
- if (sync_percent >= 100.0)
+ if (percent_range == PERCENT_100)
init_mirror_in_sync(1);
else {
/* A full resync will take place */
@@ -1353,6 +1354,7 @@
const struct segment_type *segtype;
struct dm_list *parallel_areas;
float sync_percent;
+ percent_range_t percent_range;
int in_sync;
struct logical_volume *log_lv;
struct lvinfo info;
@@ -1404,8 +1406,9 @@
}
/* check sync status */
- if (lv_mirror_percent(cmd, lv, 0, &sync_percent, NULL) &&
- sync_percent >= 100.0)
+ if (lv_mirror_percent(cmd, lv, 0, &sync_percent, &percent_range,
+ NULL) &&
+ (percent_range == PERCENT_100))
in_sync = 1;
else
in_sync = 0;
--- LVM2/lib/metadata/segtype.h 2009/07/08 12:36:01 1.24
+++ LVM2/lib/metadata/segtype.h 2009/10/01 00:35:29 1.25
@@ -16,6 +16,8 @@
#ifndef _SEGTYPES_H
#define _SEGTYPES_H
+#include "metadata-exported.h"
+
struct segtype_handler;
struct cmd_context;
struct config_tree;
@@ -73,7 +75,9 @@
struct lv_segment *seg,
struct dm_tree_node *node, uint64_t len,
uint32_t *pvmove_mirror_count);
- int (*target_percent) (void **target_state, struct dm_pool * mem,
+ int (*target_percent) (void **target_state,
+ percent_range_t *percent_range,
+ struct dm_pool * mem,
struct cmd_context *cmd,
struct lv_segment *seg, char *params,
uint64_t *total_numerator,
--- LVM2/lib/mirror/mirrored.c 2009/08/13 19:36:04 1.63
+++ LVM2/lib/mirror/mirrored.c 2009/10/01 00:35:30 1.64
@@ -178,10 +178,13 @@
return mirr_state;
}
-static int _mirrored_target_percent(void **target_state, struct dm_pool *mem,
- struct cmd_context *cmd, struct lv_segment *seg,
- char *params, uint64_t *total_numerator,
- uint64_t *total_denominator)
+static int _mirrored_target_percent(void **target_state,
+ percent_range_t *percent_range,
+ struct dm_pool *mem,
+ struct cmd_context *cmd,
+ struct lv_segment *seg, char *params,
+ uint64_t *total_numerator,
+ uint64_t *total_denominator)
{
struct mirror_state *mirr_state;
uint64_t numerator, denominator;
@@ -226,6 +229,13 @@
if (seg)
seg->extents_copied = seg->area_len * numerator / denominator;
+ if (numerator == denominator)
+ *percent_range = PERCENT_100;
+ else if (numerator == 0)
+ *percent_range = PERCENT_0;
+ else
+ *percent_range = PERCENT_0_TO_100;
+
return 1;
}
--- LVM2/lib/report/report.c 2009/09/15 18:35:14 1.102
+++ LVM2/lib/report/report.c 2009/10/01 00:35:30 1.103
@@ -275,18 +275,17 @@
static int _lv_mimage_in_sync(const struct logical_volume *lv)
{
float percent;
+ percent_range_t percent_range;
struct lv_segment *mirror_seg = find_mirror_seg(first_seg(lv));
if (!(lv->status & MIRROR_IMAGE) || !mirror_seg)
return_0;
- if (!lv_mirror_percent(lv->vg->cmd, mirror_seg->lv, 0, &percent, NULL))
+ if (!lv_mirror_percent(lv->vg->cmd, mirror_seg->lv, 0, &percent,
+ &percent_range, NULL))
return_0;
- if (percent >= 100.0)
- return 1;
-
- return 0;
+ return (percent_range == PERCENT_100) ? 1 : 0;
}
static int _lvstatus_disp(struct dm_report *rh __attribute((unused)), struct dm_pool *mem,
@@ -297,6 +296,7 @@
struct lvinfo info;
char *repstr;
float snap_percent;
+ percent_range_t percent_range;
if (!(repstr = dm_pool_zalloc(mem, 7))) {
log_error("dm_pool_alloc failed");
@@ -363,8 +363,8 @@
/* Snapshot dropped? */
if (info.live_table && lv_is_cow(lv) &&
- (!lv_snapshot_percent(lv, &snap_percent) ||
- snap_percent < 0 || snap_percent >= 100)) {
+ (!lv_snapshot_percent(lv, &snap_percent, &percent_range) ||
+ percent_range == PERCENT_INVALID)) {
repstr[0] = toupper(repstr[0]);
if (info.suspended)
repstr[4] = 'S'; /* Susp Inv snapshot */
@@ -1009,6 +1009,7 @@
const struct logical_volume *lv = (const struct logical_volume *) data;
struct lvinfo info;
float snap_percent;
+ percent_range_t percent_range;
uint64_t *sortval;
char *repstr;
@@ -1030,7 +1031,8 @@
return 1;
}
- if (!lv_snapshot_percent(lv, &snap_percent) || snap_percent < 0) {
+ if (!lv_snapshot_percent(lv, &snap_percent, &percent_range) ||
+ (percent_range == PERCENT_INVALID)) {
*sortval = UINT64_C(100);
dm_report_field_set_value(field, "100.00", sortval);
return 1;
@@ -1058,6 +1060,7 @@
{
struct logical_volume *lv = (struct logical_volume *) data;
float percent;
+ percent_range_t percent_range;
uint64_t *sortval;
char *repstr;
@@ -1067,7 +1070,8 @@
}
if ((!(lv->status & PVMOVE) && !(lv->status & MIRRORED)) ||
- !lv_mirror_percent(lv->vg->cmd, lv, 0, &percent, NULL)) {
+ !lv_mirror_percent(lv->vg->cmd, lv, 0, &percent, &percent_range,
+ NULL) || (percent_range == PERCENT_INVALID)) {
*sortval = UINT64_C(0);
dm_report_field_set_value(field, "", sortval);
return 1;
--- LVM2/lib/snapshot/snapshot.c 2009/05/13 21:21:58 1.37
+++ LVM2/lib/snapshot/snapshot.c 2009/10/01 00:35:30 1.38
@@ -88,11 +88,12 @@
#ifdef DEVMAPPER_SUPPORT
static int _snap_target_percent(void **target_state __attribute((unused)),
- struct dm_pool *mem __attribute((unused)),
- struct cmd_context *cmd __attribute((unused)),
- struct lv_segment *seg __attribute((unused)),
- char *params, uint64_t *total_numerator,
- uint64_t *total_denominator)
+ percent_range_t *percent_range,
+ struct dm_pool *mem __attribute((unused)),
+ struct cmd_context *cmd __attribute((unused)),
+ struct lv_segment *seg __attribute((unused)),
+ char *params, uint64_t *total_numerator,
+ uint64_t *total_denominator)
{
uint64_t numerator, denominator;
@@ -100,7 +101,16 @@
&numerator, &denominator) == 2) {
*total_numerator += numerator;
*total_denominator += denominator;
- }
+ if (!numerator)
+ *percent_range = PERCENT_0;
+ else if (numerator == denominator)
+ *percent_range = PERCENT_100;
+ else
+ *percent_range = PERCENT_0_TO_100;
+ } else if (!strcmp(params, "Invalid"))
+ *percent_range = PERCENT_INVALID;
+ else
+ return 0;
return 1;
}
--- LVM2/tools/lvscan.c 2009/07/01 17:00:52 1.39
+++ LVM2/tools/lvscan.c 2009/10/01 00:35:30 1.40
@@ -24,6 +24,7 @@
int inkernel, snap_active = 1;
struct lv_segment *snap_seg = NULL;
float snap_percent; /* fused, fsize; */
+ percent_range_t percent_range;
const char *active_str, *snapshot_str;
@@ -36,15 +37,17 @@
origin_list) {
if (inkernel &&
(snap_active = lv_snapshot_percent(snap_seg->cow,
- &snap_percent)))
- if (snap_percent < 0 || snap_percent >= 100)
+ &snap_percent,
+ &percent_range)))
+ if (percent_range == PERCENT_INVALID)
snap_active = 0;
}
snap_seg = NULL;
} else if (lv_is_cow(lv)) {
if (inkernel &&
- (snap_active = lv_snapshot_percent(lv, &snap_percent)))
- if (snap_percent < 0 || snap_percent >= 100)
+ (snap_active = lv_snapshot_percent(lv, &snap_percent,
+ &percent_range)))
+ if (percent_range == PERCENT_INVALID)
snap_active = 0;
}
--- LVM2/tools/polldaemon.c 2009/09/30 18:15:06 1.26
+++ LVM2/tools/polldaemon.c 2009/10/01 00:35:30 1.27
@@ -68,10 +68,12 @@
struct daemon_parms *parms)
{
float segment_percent = 0.0, overall_percent = 0.0;
+ percent_range_t percent_range;
uint32_t event_nr = 0;
if (!lv_mirror_percent(cmd, lv, !parms->interval, &segment_percent,
- &event_nr)) {
+ &percent_range, &event_nr) ||
+ (percent_range == PERCENT_INVALID)) {
log_error("ABORTING: Mirror percentage check failed.");
return PROGRESS_CHECK_FAILED;
}
@@ -84,7 +86,7 @@
log_verbose("%s: %s: %.1f%%", name, parms->progress_title,
overall_percent);
- if (segment_percent < 100.0)
+ if (percent_range != PERCENT_100)
return PROGRESS_UNFINISHED;
if (overall_percent >= 100.0)
next reply other threads:[~2009-10-01 0:35 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-01 0:35 agk [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-03-23 9:58 LVM2 ./WHATS_NEW lib/activate/activate.c lib/a zkabelac
2012-02-23 22:42 zkabelac
2012-01-25 13:10 zkabelac
2012-01-25 8:48 zkabelac
2011-11-18 19:31 zkabelac
2011-10-06 14:55 jbrassow
2011-10-03 18:37 zkabelac
2011-09-22 17:33 prajnoha
2011-06-30 18:25 agk
2011-06-22 21:31 jbrassow
2011-06-17 14:22 zkabelac
2011-06-17 14:14 zkabelac
2011-07-04 14:55 ` Alasdair G Kergon
2011-02-04 19:14 zkabelac
2011-02-03 1:24 zkabelac
2010-08-17 1:16 agk
2010-02-24 20:01 mbroz
2010-02-24 20:00 mbroz
2009-06-01 12:43 mbroz
2009-05-20 11:09 mbroz
2009-05-20 9:52 mbroz
2009-02-28 0:54 agk
2008-12-19 14:22 prajnoha
2008-12-19 14:58 ` Alasdair G Kergon
2008-04-07 10:23 mbroz
2008-01-30 14:00 agk
2007-11-12 20:51 agk
2007-07-02 11:17 wysochanski
2007-03-08 21:08 agk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091001003532.11284.qmail@sourceware.org \
--to=agk@sourceware.org \
--cc=lvm-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.