From agk@sourceware.org Thu Oct 1 00:35:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Thu, 01 Oct 2009 00:35:00 -0000 Subject: LVM2 ./WHATS_NEW lib/activate/activate.c lib/a ... Message-ID: <20091001003532.11284.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@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) From agk@sourceware.org Thu Oct 1 01:04:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Thu, 01 Oct 2009 01:04:00 -0000 Subject: LVM2 lib/metadata/metadata-exported.h lib/meta ... Message-ID: <20091001010428.2480.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-01 01:04:27 Modified files: lib/metadata : metadata-exported.h mirror.c lib/report : report.c tools : polldaemon.c Log message: Add percent_range to copy_percent too. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.113&r2=1.114 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.90&r2=1.91 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/report/report.c.diff?cvsroot=lvm2&r1=1.103&r2=1.104 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/polldaemon.c.diff?cvsroot=lvm2&r1=1.27&r2=1.28 --- LVM2/lib/metadata/metadata-exported.h 2009/10/01 00:35:29 1.113 +++ LVM2/lib/metadata/metadata-exported.h 2009/10/01 01:04:27 1.114 @@ -691,7 +691,8 @@ uint32_t lv_type); const char *get_pvmove_pvname_from_lv(struct logical_volume *lv); const char *get_pvmove_pvname_from_lv_mirr(struct logical_volume *lv_mirr); -float copy_percent(struct logical_volume *lv_mirr); +float copy_percent(struct logical_volume *lv_mirr, + percent_range_t *percent_range); struct dm_list *lvs_using_lv(struct cmd_context *cmd, struct volume_group *vg, struct logical_volume *lv); --- LVM2/lib/metadata/mirror.c 2009/10/01 00:35:29 1.90 +++ LVM2/lib/metadata/mirror.c 2009/10/01 01:04:27 1.91 @@ -1114,7 +1114,8 @@ return lvs; } -float copy_percent(struct logical_volume *lv_mirr) +float copy_percent(struct logical_volume *lv_mirr, + percent_range_t *percent_range) { uint32_t numerator = 0u, denominator = 0u; struct lv_segment *seg; @@ -1128,6 +1129,13 @@ numerator += seg->area_len; } + if (!denominator || (numerator == denominator)) + *percent_range = PERCENT_100; + else if (numerator == 0) + *percent_range = PERCENT_0; + else + *percent_range = PERCENT_0_TO_100; + return denominator ? (float) numerator *100 / denominator : 100.0; } --- LVM2/lib/report/report.c 2009/10/01 00:35:30 1.103 +++ LVM2/lib/report/report.c 2009/10/01 01:04:27 1.104 @@ -1054,7 +1054,8 @@ return 1; } -static int _copypercent_disp(struct dm_report *rh __attribute((unused)), struct dm_pool *mem, +static int _copypercent_disp(struct dm_report *rh __attribute((unused)), + struct dm_pool *mem, struct dm_report_field *field, const void *data, void *private __attribute((unused))) { @@ -1077,7 +1078,7 @@ return 1; } - percent = copy_percent(lv); + percent = copy_percent(lv, &percent_range); if (!(repstr = dm_pool_zalloc(mem, 8))) { log_error("dm_pool_alloc failed"); --- LVM2/tools/polldaemon.c 2009/10/01 00:35:30 1.27 +++ LVM2/tools/polldaemon.c 2009/10/01 01:04:27 1.28 @@ -68,7 +68,7 @@ struct daemon_parms *parms) { float segment_percent = 0.0, overall_percent = 0.0; - percent_range_t percent_range; + percent_range_t percent_range, overall_percent_range; uint32_t event_nr = 0; if (!lv_mirror_percent(cmd, lv, !parms->interval, &segment_percent, @@ -78,7 +78,7 @@ return PROGRESS_CHECK_FAILED; } - overall_percent = copy_percent(lv); + overall_percent = copy_percent(lv, &overall_percent_range); if (parms->progress_display) log_print("%s: %s: %.1f%%", name, parms->progress_title, overall_percent); @@ -89,7 +89,7 @@ if (percent_range != PERCENT_100) return PROGRESS_UNFINISHED; - if (overall_percent >= 100.0) + if (overall_percent_range == PERCENT_100) return PROGRESS_FINISHED_ALL; return PROGRESS_FINISHED_SEGMENT; From ccaulfield@sourceware.org Thu Oct 1 14:14:00 2009 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Thu, 01 Oct 2009 14:14:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/lvm-functions.c Message-ID: <20091001141418.8108.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: ccaulfield@sourceware.org 2009-10-01 14:14:18 Modified files: . : WHATS_NEW daemons/clvmd : lvm-functions.c Log message: Stop clvmd from automatically doing lock conversions. Now, if a lock is granted at one mode and an attempt to convert it wthout the LCK_CONVERT flag set then it will return errno=EBUSY. This fixes a pretty bad bug in which an LV could be activated exclusively on one node and lvchange -ay on another would convert it to shared! It might break some things in other areas, but I doubt it. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1285&r2=1.1286 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.68&r2=1.69 --- LVM2/WHATS_NEW 2009/10/01 00:35:29 1.1285 +++ LVM2/WHATS_NEW 2009/10/01 14:14:17 1.1286 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Only do lock conversions in clvmd if we are explicitly asked for one. 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. --- LVM2/daemons/clvmd/lvm-functions.c 2009/08/05 14:18:35 1.68 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/10/01 14:14:17 1.69 @@ -143,10 +143,11 @@ { static char buf[128]; - sprintf(buf, "0x%x (%s%s%s)", flags, + sprintf(buf, "0x%x (%s%s%s%s)", flags, flags & LCK_PARTIAL_MODE ? "PARTIAL_MODE " : "", flags & LCK_MIRROR_NOSYNC_MODE ? "MIRROR_NOSYNC " : "", - flags & LCK_DMEVENTD_MONITOR_MODE ? "DMEVENTD_MONITOR " : ""); + flags & LCK_DMEVENTD_MONITOR_MODE ? "DMEVENTD_MONITOR " : "", + flags & LCK_CONVERT ? "CONVERT " : ""); return buf; } @@ -239,13 +240,20 @@ int saved_errno; struct lv_info *lvi; - flags &= LKF_NOQUEUE; /* Only LKF_NOQUEUE is valid here */ + /* Mask off invalid options */ + flags &= LKF_NOQUEUE | LKF_CONVERT; - if ((lvi = lookup_info(resource))) { + lvi = lookup_info(resource); + + /* Only allow explicit conversions */ + if (lvi && !(flags & LKF_CONVERT)) { + errno = EBUSY; + return -1; + } + if (lvi) { /* Already exists - convert it */ status = - sync_lock(resource, mode, LKF_CONVERT | flags, - &lvi->lock_id); + sync_lock(resource, mode, flags, &lvi->lock_id); saved_errno = errno; if (!status) lvi->lock_mode = mode; @@ -337,7 +345,7 @@ /* Try to get the lock if it's a clustered volume group */ if (lock_flags & LCK_CLUSTER_VG) { - status = hold_lock(resource, mode, LKF_NOQUEUE); + status = hold_lock(resource, mode, LKF_NOQUEUE | (lock_flags & LCK_CONVERT?LKF_CONVERT:0)); if (status) { /* Return an LVM-sensible error for this. * Forcing EIO makes the upper level return this text @@ -538,7 +546,7 @@ DEBUGLOG("pre_lock_lv: resource '%s', cmd = %s, flags = %s\n", resource, decode_locking_cmd(command), decode_flags(lock_flags)); - if (hold_lock(resource, LKM_PWMODE, LKF_NOQUEUE)) + if (hold_lock(resource, LKM_PWMODE, LKF_NOQUEUE| (lock_flags & LCK_CONVERT?LKF_CONVERT:0))) return errno; } return 0; @@ -570,7 +578,7 @@ return EIO; if (lvi.exists) { - if (hold_lock(resource, LKM_CRMODE, 0)) + if (hold_lock(resource, LKM_CRMODE, lock_flags & LCK_CONVERT?LKF_CONVERT:0)) return errno; } else { if (hold_unlock(resource)) From ccaulfield@sourceware.org Thu Oct 1 14:15:00 2009 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Thu, 01 Oct 2009 14:15:00 -0000 Subject: LVM2/lib/locking locking.h Message-ID: <20091001141534.9497.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: ccaulfield@sourceware.org 2009-10-01 14:15:34 Modified files: lib/locking : locking.h Log message: Add LCK_CONVERT flag I missed on the last checkin. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/locking.h.diff?cvsroot=lvm2&r1=1.51&r2=1.52 --- LVM2/lib/locking/locking.h 2009/09/02 21:34:11 1.51 +++ LVM2/lib/locking/locking.h 2009/10/01 14:15:34 1.52 @@ -90,6 +90,7 @@ #define LCK_PARTIAL_MODE 0x00000001U /* Partial activation? */ #define LCK_MIRROR_NOSYNC_MODE 0x00000002U /* Mirrors don't require sync */ #define LCK_DMEVENTD_MONITOR_MODE 0x00000004U /* Register with dmeventd */ +#define LCK_CONVERT 0x00000008U /* Convert existing lock */ /* * Special cases of VG locks. From zkabelac@sourceware.org Fri Oct 2 09:47:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Fri, 02 Oct 2009 09:47:00 -0000 Subject: LVM2 Makefile.in Message-ID: <20091002094711.1079.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-10-02 09:47:11 Modified files: . : Makefile.in Log message: Run distclean also for daemons/cmirrord Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/Makefile.in.diff?cvsroot=lvm2&r1=1.39&r2=1.40 --- LVM2/Makefile.in 2009/09/22 13:32:39 1.39 +++ LVM2/Makefile.in 2009/10/02 09:47:11 1.40 @@ -35,6 +35,7 @@ ifeq ($(MAKECMDGOALS),distclean) SUBDIRS += daemons/clvmd \ daemons/clogd \ + daemons/cmirrord \ daemons/dmeventd/plugins \ daemons/dmeventd \ lib/format1 \ From zkabelac@sourceware.org Fri Oct 2 11:35:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Fri, 02 Oct 2009 11:35:00 -0000 Subject: LVM2 Makefile.in Message-ID: <20091002113526.3084.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-10-02 11:35:26 Modified files: . : Makefile.in Log message: Remove daemons/clogd from distclean dirs (replaced with cmirrord) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/Makefile.in.diff?cvsroot=lvm2&r1=1.40&r2=1.41 --- LVM2/Makefile.in 2009/10/02 09:47:11 1.40 +++ LVM2/Makefile.in 2009/10/02 11:35:25 1.41 @@ -34,7 +34,6 @@ ifeq ($(MAKECMDGOALS),distclean) SUBDIRS += daemons/clvmd \ - daemons/clogd \ daemons/cmirrord \ daemons/dmeventd/plugins \ daemons/dmeventd \ From zkabelac@sourceware.org Fri Oct 2 11:41:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Fri, 02 Oct 2009 11:41:00 -0000 Subject: LVM2 WHATS_NEW Message-ID: <20091002114155.5987.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-10-02 11:41:54 Modified files: . : WHATS_NEW Log message: Update distclean target for rename clogd to cmirrord. (2.02.52) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1286&r2=1.1287 --- LVM2/WHATS_NEW 2009/10/01 14:14:17 1.1286 +++ LVM2/WHATS_NEW 2009/10/02 11:41:54 1.1287 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Update distclean target for rename clogd to cmirrord. (2.02.52) Only do lock conversions in clvmd if we are explicitly asked for one. Introduce percent_range_t and centralise snapshot full/mirror in-sync checks. Factor out poll_mirror_progress and introduce progress_t. From agk@sourceware.org Fri Oct 2 19:10:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Fri, 02 Oct 2009 19:10:00 -0000 Subject: LVM2 ./Makefile.in ./WHATS_NEW ./configure ./c ... Message-ID: <20091002191043.13860.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-02 19:10:38 Modified files: . : Makefile.in WHATS_NEW configure configure.in make.tmpl.in daemons : Makefile.in daemons/clvmd : Makefile.in daemons/cmirrord: Makefile.in daemons/dmeventd: Makefile.in daemons/dmeventd/plugins: Makefile.in daemons/dmeventd/plugins/mirror: Makefile.in daemons/dmeventd/plugins/snapshot: Makefile.in doc : Makefile.in include : Makefile.in lib : Makefile.in lib/format1 : Makefile.in lib/format_pool: Makefile.in lib/locking : Makefile.in lib/mirror : Makefile.in lib/snapshot : Makefile.in libdm : Makefile.in liblvm : Makefile.in man : Makefile.in old-tests/device: Makefile.in old-tests/filters: Makefile.in old-tests/format1: Makefile.in old-tests/mm : Makefile.in old-tests/regex: Makefile.in po : Makefile.in scripts : Makefile.in test/api : Makefile.in tools : Makefile.in udev : Makefile.in Added files: include : .symlinks.in Removed files: include : .symlinks Log message: Allow for a build directory separate from the source. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/Makefile.in.diff?cvsroot=lvm2&r1=1.41&r2=1.42 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1287&r2=1.1288 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.diff?cvsroot=lvm2&r1=1.108&r2=1.109 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.in.diff?cvsroot=lvm2&r1=1.116&r2=1.117 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/make.tmpl.in.diff?cvsroot=lvm2&r1=1.71&r2=1.72 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/Makefile.in.diff?cvsroot=lvm2&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/Makefile.in.diff?cvsroot=lvm2&r1=1.30&r2=1.31 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/cmirrord/Makefile.in.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/Makefile.in.diff?cvsroot=lvm2&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/Makefile.in.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/mirror/Makefile.in.diff?cvsroot=lvm2&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/doc/Makefile.in.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/include/.symlinks.in.diff?cvsroot=lvm2&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/include/Makefile.in.diff?cvsroot=lvm2&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/include/.symlinks.diff?cvsroot=lvm2&r1=1.60&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/Makefile.in.diff?cvsroot=lvm2&r1=1.92&r2=1.93 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/Makefile.in.diff?cvsroot=lvm2&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/Makefile.in.diff?cvsroot=lvm2&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/Makefile.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/mirror/Makefile.in.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/snapshot/Makefile.in.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/Makefile.in.diff?cvsroot=lvm2&r1=1.45&r2=1.46 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/liblvm/Makefile.in.diff?cvsroot=lvm2&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/Makefile.in.diff?cvsroot=lvm2&r1=1.27&r2=1.28 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/old-tests/device/Makefile.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/old-tests/filters/Makefile.in.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/old-tests/format1/Makefile.in.diff?cvsroot=lvm2&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/old-tests/mm/Makefile.in.diff?cvsroot=lvm2&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/old-tests/regex/Makefile.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/po/Makefile.in.diff?cvsroot=lvm2&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/scripts/Makefile.in.diff?cvsroot=lvm2&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/api/Makefile.in.diff?cvsroot=lvm2&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/Makefile.in.diff?cvsroot=lvm2&r1=1.99&r2=1.100 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/Makefile.in.diff?cvsroot=lvm2&r1=1.2&r2=1.3 --- LVM2/Makefile.in 2009/10/02 11:35:25 1.41 +++ LVM2/Makefile.in 2009/10/02 19:10:31 1.42 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SUBDIRS = doc include man scripts --- LVM2/WHATS_NEW 2009/10/02 11:41:54 1.1287 +++ LVM2/WHATS_NEW 2009/10/02 19:10:31 1.1288 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Allow for a build directory separate from the source. Update distclean target for rename clogd to cmirrord. (2.02.52) Only do lock conversions in clvmd if we are explicitly asked for one. Introduce percent_range_t and centralise snapshot full/mirror in-sync checks. --- LVM2/configure 2009/09/28 21:23:02 1.108 +++ LVM2/configure 2009/10/02 19:10:31 1.109 @@ -15419,18 +15419,18 @@ $as_echo "$interface" >&6; } ################################################################################ -DM_LIB_VERSION="\"`cat VERSION_DM 2>/dev/null || echo Unknown`\"" +DM_LIB_VERSION="\"`cat "$srcdir"/VERSION_DM 2>/dev/null || echo Unknown`\"" cat >>confdefs.h <<_ACEOF #define DM_LIB_VERSION $DM_LIB_VERSION _ACEOF -DM_LIB_PATCHLEVEL=`cat VERSION_DM | $AWK -F '[-. ]' '{printf "%s.%s.%s",$1,$2,$3}'` +DM_LIB_PATCHLEVEL=`cat "$srcdir"/VERSION_DM | $AWK -F '[-. ]' '{printf "%s.%s.%s",$1,$2,$3}'` -LVM_VERSION="\"`cat VERSION 2>/dev/null || echo Unknown`\"" +LVM_VERSION="\"`cat "$srcdir"/VERSION 2>/dev/null || echo Unknown`\"" -VER=`cat VERSION` +VER=`cat "$srcdir"/VERSION` LVM_RELEASE_DATE="\"`echo $VER | $SED 's/.* (//;s/).*//'`\"" VER=`echo "$VER" | $AWK '{print $1}'` LVM_RELEASE="\"`echo "$VER" | $AWK -F '-' '{print $2}'`\"" @@ -15525,7 +15525,7 @@ ################################################################################ -ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/cmirrord/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile doc/Makefile include/Makefile lib/Makefile lib/format1/Makefile lib/format_pool/Makefile lib/locking/Makefile lib/mirror/Makefile lib/misc/lvm-version.h lib/snapshot/Makefile libdm/Makefile libdm/libdevmapper.pc liblvm/Makefile liblvm/liblvm2app.pc man/Makefile po/Makefile scripts/clvmd_init_red_hat scripts/lvm2_monitoring_init_red_hat scripts/Makefile test/Makefile test/api/Makefile tools/Makefile udev/Makefile" +ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/cmirrord/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile doc/Makefile include/.symlinks include/Makefile lib/Makefile lib/format1/Makefile lib/format_pool/Makefile lib/locking/Makefile lib/mirror/Makefile lib/misc/lvm-version.h lib/snapshot/Makefile libdm/Makefile libdm/libdevmapper.pc liblvm/Makefile liblvm/liblvm2app.pc man/Makefile po/Makefile scripts/clvmd_init_red_hat scripts/lvm2_monitoring_init_red_hat scripts/Makefile test/Makefile test/api/Makefile tools/Makefile udev/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -16135,6 +16135,7 @@ "daemons/dmeventd/plugins/mirror/Makefile") CONFIG_FILES="$CONFIG_FILES daemons/dmeventd/plugins/mirror/Makefile" ;; "daemons/dmeventd/plugins/snapshot/Makefile") CONFIG_FILES="$CONFIG_FILES daemons/dmeventd/plugins/snapshot/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "include/.symlinks") CONFIG_FILES="$CONFIG_FILES include/.symlinks" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "lib/format1/Makefile") CONFIG_FILES="$CONFIG_FILES lib/format1/Makefile" ;; --- LVM2/configure.in 2009/09/28 21:23:02 1.116 +++ LVM2/configure.in 2009/10/02 19:10:32 1.117 @@ -1040,14 +1040,14 @@ AC_MSG_RESULT($interface) ################################################################################ -DM_LIB_VERSION="\"`cat VERSION_DM 2>/dev/null || echo Unknown`\"" +DM_LIB_VERSION="\"`cat "$srcdir"/VERSION_DM 2>/dev/null || echo Unknown`\"" AC_DEFINE_UNQUOTED(DM_LIB_VERSION, $DM_LIB_VERSION, [Library version]) -DM_LIB_PATCHLEVEL=`cat VERSION_DM | $AWK -F '[[-. ]]' '{printf "%s.%s.%s",$1,$2,$3}'` +DM_LIB_PATCHLEVEL=`cat "$srcdir"/VERSION_DM | $AWK -F '[[-. ]]' '{printf "%s.%s.%s",$1,$2,$3}'` -LVM_VERSION="\"`cat VERSION 2>/dev/null || echo Unknown`\"" +LVM_VERSION="\"`cat "$srcdir"/VERSION 2>/dev/null || echo Unknown`\"" -VER=`cat VERSION` +VER=`cat "$srcdir"/VERSION` LVM_RELEASE_DATE="\"`echo $VER | $SED 's/.* (//;s/).*//'`\"" VER=`echo "$VER" | $AWK '{print $1}'` LVM_RELEASE="\"`echo "$VER" | $AWK -F '-' '{print $2}'`\"" @@ -1156,6 +1156,7 @@ daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile doc/Makefile +include/.symlinks include/Makefile lib/Makefile lib/format1/Makefile --- LVM2/make.tmpl.in 2009/09/11 15:52:22 1.71 +++ LVM2/make.tmpl.in 2009/10/02 19:10:32 1.72 @@ -85,12 +85,12 @@ DEFS += -DINTL_PACKAGE=\"@INTL_PACKAGE@\" -DLOCALEDIR=\"@LOCALEDIR@\" endif -LDFLAGS += -L$(top_srcdir)/libdm -L$(top_srcdir)/lib -CLDFLAGS += -L$(top_srcdir)/libdm -L$(top_srcdir)/lib +LDFLAGS += -L$(top_builddir)/libdm -L$(top_builddir)/lib +CLDFLAGS += -L$(top_builddir)/libdm -L$(top_builddir)/lib ifeq ("@DMEVENTD@", "yes") - LDFLAGS += -L$(top_srcdir)/daemons/dmeventd - CLDFLAGS += -L$(top_srcdir)/daemons/dmeventd + LDFLAGS += -L$(top_builddir)/daemons/dmeventd + CLDFLAGS += -L$(top_builddir)/daemons/dmeventd endif ifeq ("@DM_COMPAT@", "yes") @@ -121,11 +121,12 @@ LIB_VERSION_APP := $(shell cat $(top_srcdir)/VERSION | \ awk -F '[(). ]' '{printf "%s.%s",$$1,$$4}') -INCLUDES += -I. -I$(top_srcdir)/include +INCLUDES += -I. -I$(top_builddir)/include -INC_LNS = $(top_srcdir)/include/.symlinks_created +INC_LNS = $(top_builddir)/include/.symlinks_created -DEPS = $(top_srcdir)/make.tmpl $(top_srcdir)/VERSION Makefile $(INC_LNS) +DEPS = $(top_builddir)/make.tmpl $(top_srcdir)/VERSION \ + $(top_builddir)/Makefile $(INC_LNS) OBJECTS = $(SOURCES:%.c=%.o) POTFILES = $(SOURCES:%.c=%.pot) @@ -227,11 +228,12 @@ $(AR) rs $@ $(OBJECTS) %.d: %.c + $(MKDIR_P) $(dir $@); \ set -e; \ FILE=`echo $@ | sed 's/\\//\\\\\\//g;s/\\.d//g'`; \ DEPS=`echo $(DEPS) | sed -e 's/\\//\\\\\\//g'`; \ - $(CC) -MM $(INCLUDES) $(DEFS) $(CFLAGS) $< | \ - sed "s/\(.*\)\.o[ :]*/$$FILE.o $$FILE.d $$FILE.pot: $$DEPS /g" > $@; \ + $(CC) -MM $(INCLUDES) $(DEFS) $(CFLAGS) -o $@ $<; \ + sed -i "s/\(.*\)\.o[ :]*/$$FILE.o $$FILE.d $$FILE.pot: $$DEPS /g" $@; \ [ -s $@ ] || $(RM) $@ %.mo: %.po --- LVM2/daemons/Makefile.in 2009/09/02 17:36:46 1.11 +++ LVM2/daemons/Makefile.in 2009/10/02 19:10:32 1.12 @@ -13,6 +13,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ .PHONY: dmeventd clvmd cmirrord @@ -29,7 +30,7 @@ SUBDIRS += dmeventd endif -include $(top_srcdir)/make.tmpl +include ../make.tmpl ifeq ("@BUILD_DMEVENTD@", "yes") device-mapper: dmeventd.device-mapper --- LVM2/daemons/clvmd/Makefile.in 2009/08/28 19:22:05 1.30 +++ LVM2/daemons/clvmd/Makefile.in 2009/10/02 19:10:32 1.31 @@ -13,6 +13,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ CCS_LIBS = @CCS_LIBS@ @@ -85,12 +86,12 @@ DEFS += -D_REENTRANT CFLAGS += -fno-strict-aliasing -include $(top_srcdir)/make.tmpl +include ../../make.tmpl INSTALL_TARGETS = \ install_clvmd -clvmd: $(OBJECTS) $(top_srcdir)/lib/liblvm-internal.a +clvmd: $(OBJECTS) $(top_builddir)/lib/liblvm-internal.a $(CC) -o clvmd $(OBJECTS) $(CFLAGS) $(LDFLAGS) \ $(LVMLIBS) $(LMLIBS) $(LIBS) --- LVM2/daemons/cmirrord/Makefile.in 2009/09/14 22:57:46 1.3 +++ LVM2/daemons/cmirrord/Makefile.in 2009/10/02 19:10:32 1.4 @@ -13,6 +13,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ CPG_LIBS = @CPG_LIBS@ @@ -24,13 +25,13 @@ TARGETS = cmirrord -include $(top_srcdir)/make.tmpl +include ../../make.tmpl LIBS += -ldevmapper LMLIBS += $(CPG_LIBS) $(SACKPT_LIBS) CFLAGS += $(CPG_CFLAGS) $(SACKPT_CFLAGS) -cmirrord: $(OBJECTS) $(top_srcdir)/lib/liblvm-internal.a +cmirrord: $(OBJECTS) $(top_builddir)/lib/liblvm-internal.a $(CC) -o cmirrord $(OBJECTS) $(LDFLAGS) \ $(LVMLIBS) $(LMLIBS) $(LIBS) --- LVM2/daemons/dmeventd/Makefile.in 2009/05/11 10:12:35 1.25 +++ LVM2/daemons/dmeventd/Makefile.in 2009/10/02 19:10:32 1.26 @@ -13,6 +13,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES = libdevmapper-event.c @@ -36,7 +37,7 @@ SUBDIRS+=plugins endif -include $(top_srcdir)/make.tmpl +include ../../make.tmpl all: dmeventd device-mapper: dmeventd $(LIB_STATIC) @@ -66,7 +67,7 @@ install_device-mapper: $(INSTALL_TYPE) install_include install_dmeventd install_include: - $(INSTALL) -D $(OWNER) $(GROUP) -m 444 libdevmapper-event.h \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 444 $(srcdir)/libdevmapper-event.h \ $(includedir)/libdevmapper-event.h install_dynamic: libdevmapper-event.$(LIB_SUFFIX) --- LVM2/daemons/dmeventd/plugins/Makefile.in 2008/01/09 15:32:19 1.3 +++ LVM2/daemons/dmeventd/plugins/Makefile.in 2009/10/02 19:10:33 1.4 @@ -14,9 +14,10 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SUBDIRS += mirror snapshot -include $(top_srcdir)/make.tmpl +include ../../../make.tmpl --- LVM2/daemons/dmeventd/plugins/mirror/Makefile.in 2009/05/11 10:28:46 1.9 +++ LVM2/daemons/dmeventd/plugins/mirror/Makefile.in 2009/10/02 19:10:33 1.10 @@ -14,10 +14,11 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ INCLUDES += -I${top_srcdir}/tools -CLDFLAGS += -L${top_srcdir}/tools -ldevmapper @LVM2CMD_LIB@ +CLDFLAGS += -L${top_builddir}/tools -ldevmapper @LVM2CMD_LIB@ SOURCES = dmeventd_mirror.c @@ -29,7 +30,7 @@ LIB_VERSION = $(LIB_VERSION_LVM) -include $(top_srcdir)/make.tmpl +include $(top_builddir)/make.tmpl install_lvm2: libdevmapper-event-lvm2mirror.$(LIB_SUFFIX) $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in 2009/05/11 10:28:46 1.5 +++ LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in 2009/10/02 19:10:33 1.6 @@ -14,10 +14,11 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ INCLUDES += -I${top_srcdir}/tools -CLDFLAGS += -L${top_srcdir}/tools -ldevmapper @LVM2CMD_LIB@ +CLDFLAGS += -L${top_builddir}/tools -ldevmapper @LVM2CMD_LIB@ SOURCES = dmeventd_snapshot.c @@ -29,7 +30,7 @@ LIB_VERSION = $(LIB_VERSION_LVM) -include $(top_srcdir)/make.tmpl +include $(top_builddir)/make.tmpl install_lvm2: libdevmapper-event-lvm2snapshot.$(LIB_SUFFIX) $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/doc/Makefile.in 2009/05/11 10:28:46 1.5 +++ LVM2/doc/Makefile.in 2009/10/02 19:10:33 1.6 @@ -13,17 +13,18 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ CONFSRC=example.conf CONFDEST=lvm.conf -include $(top_srcdir)/make.tmpl +include ../make.tmpl -install_lvm2: +install_lvm2: $(CONFSRC) @if [ ! -e $(confdir)/$(CONFDEST) ]; then \ echo "Installing $(CONFSRC) as $(confdir)/$(CONFDEST)"; \ - @INSTALL@ -D $(OWNER) $(GROUP) -m 644 $(CONFSRC) \ + @INSTALL@ -D $(OWNER) $(GROUP) -m 644 $< \ $(confdir)/$(CONFDEST); \ fi /cvs/lvm2/LVM2/include/.symlinks.in,v --> standard output revision 1.1 --- LVM2/include/.symlinks.in +++ - 2009-10-02 19:10:40.280856000 +0000 @@ -0,0 +1,61 @@ +@top_srcdir@/daemons/clvmd/clvm.h +@top_srcdir@/daemons/dmeventd/libdevmapper-event.h +@top_srcdir@/liblvm/lvm2app.h +@top_srcdir@/lib/activate/activate.h +@top_srcdir@/lib/activate/targets.h +@top_srcdir@/lib/cache/lvmcache.h +@top_srcdir@/lib/commands/errors.h +@top_srcdir@/lib/commands/toolcontext.h +@top_srcdir@/lib/config/config.h +@top_srcdir@/lib/config/defaults.h +@top_srcdir@/lib/datastruct/btree.h +@top_srcdir@/lib/datastruct/lvm-types.h +@top_srcdir@/lib/datastruct/str_list.h +@top_srcdir@/lib/device/dev-cache.h +@top_srcdir@/lib/device/device.h +@top_srcdir@/lib/display/display.h +@top_srcdir@/lib/filters/filter-composite.h +@top_srcdir@/lib/filters/filter-md.h +@top_srcdir@/lib/filters/filter-persistent.h +@top_srcdir@/lib/filters/filter-regex.h +@top_srcdir@/lib/filters/filter-sysfs.h +@top_srcdir@/lib/filters/filter.h +@top_srcdir@/lib/format1/format1.h +@top_srcdir@/lib/format_pool/format_pool.h +@top_srcdir@/lib/format_text/archiver.h +@top_srcdir@/lib/format_text/format-text.h +@top_srcdir@/lib/format_text/text_export.h +@top_srcdir@/lib/format_text/text_import.h +@top_srcdir@/lib/label/label.h +@top_srcdir@/lib/locking/locking.h +@top_srcdir@/lib/log/log.h +@top_srcdir@/lib/log/lvm-logging.h +@top_srcdir@/lib/metadata/lv_alloc.h +@top_srcdir@/lib/metadata/metadata.h +@top_srcdir@/lib/metadata/metadata-exported.h +@top_srcdir@/lib/metadata/pv_alloc.h +@top_srcdir@/lib/metadata/segtype.h +@top_srcdir@/lib/mm/memlock.h +@top_srcdir@/lib/mm/xlate.h +@top_builddir@/lib/misc/configure.h +@top_srcdir@/lib/misc/crc.h +@top_srcdir@/lib/misc/intl.h +@top_srcdir@/lib/misc/util.h +@top_srcdir@/lib/misc/last-path-component.h +@top_srcdir@/lib/misc/lib.h +@top_srcdir@/lib/misc/lvm-exec.h +@top_srcdir@/lib/misc/lvm-file.h +@top_srcdir@/lib/misc/lvm-globals.h +@top_srcdir@/lib/misc/lvm-string.h +@top_builddir@/lib/misc/lvm-version.h +@top_srcdir@/lib/misc/lvm-wrappers.h +@top_srcdir@/lib/misc/sharedlib.h +@top_srcdir@/lib/report/report.h +@top_srcdir@/lib/uuid/uuid.h +@top_srcdir@/libdm/libdevmapper.h +@top_srcdir@/libdm/misc/dm-ioctl.h +@top_srcdir@/libdm/misc/dm-logging.h +@top_srcdir@/libdm/misc/dm-log-userspace.h +@top_srcdir@/libdm/misc/dmlib.h +@top_srcdir@/libdm/misc/kdev_t.h +@top_srcdir@/po/pogen.h --- LVM2/include/Makefile.in 2009/05/11 10:28:46 1.11 +++ LVM2/include/Makefile.in 2009/10/02 19:10:34 1.12 @@ -16,6 +16,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ LN_S = @LN_S@ @@ -24,14 +25,14 @@ all: .symlinks_created -.symlinks_created: .symlinks +.symlinks_created: .symlinks find . -maxdepth 1 -type l -exec $(RM) \{\} \; - for i in `cat .symlinks`; do $(LN_S) $$i ; done + for i in `cat $<`; do $(LN_S) $$i ; done touch $@ distclean: find . -maxdepth 1 -type l -exec $(RM) \{\} \; - $(RM) Makefile .include_symlinks .symlinks_created + $(RM) Makefile .include_symlinks .symlinks_created .symlinks pofile: all --- LVM2/lib/Makefile.in 2009/06/03 11:31:06 1.92 +++ LVM2/lib/Makefile.in 2009/10/02 19:10:34 1.93 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ ifeq ("@LVM1@", "shared") @@ -145,7 +146,7 @@ CLEAN_TARGETS += $(LIB_NAME).cflow -include $(top_srcdir)/make.tmpl +include ../make.tmpl $(SUBDIRS): $(LIB_STATIC) --- LVM2/lib/format1/Makefile.in 2008/11/03 22:14:28 1.10 +++ LVM2/lib/format1/Makefile.in 2009/10/02 19:10:34 1.11 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES =\ @@ -28,7 +29,7 @@ LIB_SHARED = liblvm2format1.so LIB_VERSION = $(LIB_VERSION_LVM) -include $(top_srcdir)/make.tmpl +include ../../make.tmpl install: liblvm2format1.so $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/lib/format_pool/Makefile.in 2008/11/03 22:14:28 1.6 +++ LVM2/lib/format_pool/Makefile.in 2009/10/02 19:10:35 1.7 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES =\ @@ -25,7 +26,7 @@ LIB_SHARED = liblvm2formatpool.so LIB_VERSION = $(LIB_VERSION_LVM) -include $(top_srcdir)/make.tmpl +include ../../make.tmpl install: liblvm2formatpool.so $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/lib/locking/Makefile.in 2008/11/03 22:14:29 1.4 +++ LVM2/lib/locking/Makefile.in 2009/10/02 19:10:35 1.5 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES = cluster_locking.c @@ -21,7 +22,7 @@ LIB_SHARED = liblvm2clusterlock.so LIB_VERSION = $(LIB_VERSION_LVM) -include $(top_srcdir)/make.tmpl +include ../../make.tmpl install install_cluster: liblvm2clusterlock.so $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/lib/mirror/Makefile.in 2008/11/03 22:14:29 1.5 +++ LVM2/lib/mirror/Makefile.in 2009/10/02 19:10:35 1.6 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES = mirrored.c @@ -21,7 +22,7 @@ LIB_SHARED = liblvm2mirror.so LIB_VERSION = $(LIB_VERSION_LVM) -include $(top_srcdir)/make.tmpl +include ../../make.tmpl install: liblvm2mirror.so $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/lib/snapshot/Makefile.in 2008/11/03 22:14:29 1.5 +++ LVM2/lib/snapshot/Makefile.in 2009/10/02 19:10:35 1.6 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES = snapshot.c @@ -21,7 +22,7 @@ LIB_SHARED = liblvm2snapshot.so LIB_VERSION = $(LIB_VERSION_LVM) -include $(top_srcdir)/make.tmpl +include ../../make.tmpl install: liblvm2snapshot.so $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/libdm/Makefile.in 2009/04/08 14:04:35 1.45 +++ LVM2/libdm/Makefile.in 2009/10/02 19:10:36 1.46 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES =\ @@ -32,7 +33,7 @@ regex/ttree.c \ $(interface)/libdm-iface.c -INCLUDES = -I$(interface) -I. +INCLUDES = -I$(srcdir)/$(interface) -I$(srcdir) ifeq ("@STATIC_LINK@", "yes") LIB_STATIC = $(interface)/libdevmapper.a @@ -72,7 +73,7 @@ install_device-mapper: install install_include: - $(INSTALL) -D $(OWNER) $(GROUP) -m 444 libdevmapper.h \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 444 $(srcdir)/libdevmapper.h \ $(includedir)/libdevmapper.h install_dynamic: install_@interface@ --- LVM2/liblvm/Makefile.in 2009/09/14 22:56:27 1.16 +++ LVM2/liblvm/Makefile.in 2009/10/02 19:10:36 1.17 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES =\ @@ -38,7 +39,7 @@ CLEAN_TARGETS += liblvm.cflow -include $(top_srcdir)/make.tmpl +include ../make.tmpl LIBS += -ldevmapper -llvm-internal @@ -66,7 +67,7 @@ install: $(INSTALL_TYPE) install_include install_include: - $(INSTALL) -D $(OWNER) $(GROUP) -m 444 lvm2app.h $(includedir)/lvm2app.h + $(INSTALL) -D $(OWNER) $(GROUP) -m 444 $(srcdir)/lvm2app.h $(includedir)/lvm2app.h install_dynamic: $(LIB_SHARED) $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ --- LVM2/man/Makefile.in 2009/05/14 16:46:13 1.27 +++ LVM2/man/Makefile.in 2009/10/02 19:10:36 1.28 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ ifeq ("@FSADM@", "yes") @@ -38,7 +39,7 @@ CLEAN_TARGETS=$(MAN5) $(MAN8) $(MAN8CLUSTER) $(FSADMMAN) $(MAN8DM) -include $(top_srcdir)/make.tmpl +include ../make.tmpl ifneq ("@CLVMD@", "none") install: install_cluster --- LVM2/old-tests/device/Makefile.in 2007/09/21 10:16:44 1.4 +++ LVM2/old-tests/device/Makefile.in 2009/10/02 19:10:36 1.5 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES=\ @@ -21,7 +22,7 @@ TARGETS=dev_cache_t -include $(top_srcdir)/make.tmpl +include ../../make.tmpl dev_cache_t: dev_cache_t.o $(top_srcdir)/lib/liblvm.a $(CC) -o dev_cache_t dev_cache_t.o -L$(top_srcdir)/lib -llvm --- LVM2/old-tests/filters/Makefile.in 2007/09/21 10:16:45 1.5 +++ LVM2/old-tests/filters/Makefile.in 2009/10/02 19:10:36 1.6 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES=\ @@ -24,7 +25,7 @@ rfilter_t \ pfilter_t -include $(top_srcdir)/make.tmpl +include ../../make.tmpl rfilter_t: rfilter_t.o $(top_srcdir)/lib/liblvm.a $(CC) -o rfilter_t rfilter_t.o -L$(top_srcdir)/lib -llvm --- LVM2/old-tests/format1/Makefile.in 2007/09/21 10:16:45 1.9 +++ LVM2/old-tests/format1/Makefile.in 2009/10/02 19:10:37 1.10 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES=\ @@ -31,7 +32,7 @@ read_pv_t \ get_vgs_t -include $(top_srcdir)/make.tmpl +include ../../make.tmpl read_vg_t: read_vg_t.o pretty_print.o $(top_srcdir)/lib/liblvm.a $(CC) -o read_vg_t read_vg_t.o pretty_print.o -L$(top_srcdir)/lib -llvm --- LVM2/old-tests/mm/Makefile.in 2007/09/21 10:16:45 1.6 +++ LVM2/old-tests/mm/Makefile.in 2009/10/02 19:10:37 1.7 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES=\ @@ -21,7 +22,7 @@ TARGETS=dbg_malloc_t -include $(top_srcdir)/make.tmpl +include ../../make.tmpl dbg_malloc_t: dbg_malloc_t.o $(CC) $(CFLAGS) -o dbg_malloc_t dbg_malloc_t.o \ --- LVM2/old-tests/regex/Makefile.in 2007/09/21 10:16:45 1.4 +++ LVM2/old-tests/regex/Makefile.in 2009/10/02 19:10:37 1.5 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES=\ @@ -24,7 +25,7 @@ parse_t \ matcher_t -include $(top_srcdir)/make.tmpl +include ../../make.tmpl parse_t: parse_t.o $(top_srcdir)/lib/liblvm.a $(CC) -o parse_t parse_t.o -L$(top_srcdir)/lib -llvm --- LVM2/po/Makefile.in 2008/11/01 02:19:18 1.6 +++ LVM2/po/Makefile.in 2009/10/02 19:10:37 1.7 @@ -13,6 +13,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ LANGS=de @@ -24,7 +25,7 @@ LVM_POSOURCES = $(top_srcdir)/tools/*.pot $(top_srcdir)/lib/*/*.pot -include $(top_srcdir)/make.tmpl +include ../make.tmpl lvm2.po: Makefile $(LVM_POSOURCES) @echo Compiling string table --- LVM2/scripts/Makefile.in 2009/09/16 23:22:40 1.10 +++ LVM2/scripts/Makefile.in 2009/10/02 19:10:37 1.11 @@ -13,17 +13,18 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ -include $(top_srcdir)/make.tmpl +include ../make.tmpl install: - $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) lvm_dump.sh \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(srcdir)/lvm_dump.sh \ $(sbindir)/lvmdump - $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) vgimportclone.sh \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(srcdir)/vgimportclone.sh \ $(sbindir)/vgimportclone ifeq ("@FSADM@", "yes") - $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) fsadm.sh \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(srcdir)/fsadm.sh \ $(sbindir)/fsadm endif --- LVM2/test/api/Makefile.in 2009/09/14 22:56:27 1.9 +++ LVM2/test/api/Makefile.in 2009/10/02 19:10:38 1.10 @@ -13,6 +13,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ ifeq ("@DEBUG@", "yes") @@ -22,7 +23,7 @@ TARGETS = vgtest test_SOURCES = test.c vgtest_SOURCES = vgtest.c -INCLUDES += -I${top_srcdir}/include +INCLUDES += -I../../include LVMLIBS = @LVM2APP_LIB@ -ldevmapper DEPLIBS = $(top_srcdir)/liblvm/liblvm2app.so $(top_srcdir)/libdm/libdevmapper.so --- LVM2/tools/Makefile.in 2009/09/11 15:52:23 1.99 +++ LVM2/tools/Makefile.in 2009/10/02 19:10:38 1.100 @@ -14,6 +14,7 @@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ VPATH = @srcdir@ SOURCES =\ @@ -104,13 +105,13 @@ DEFS += -DLVM_SHARED_PATH=\"$(exec_prefix)/sbin/lvm\" -include $(top_srcdir)/make.tmpl +include ../make.tmpl device-mapper: $(TARGETS_DM) -dmsetup: dmsetup.o $(top_srcdir)/libdm/libdevmapper.$(LIB_SUFFIX) +dmsetup: dmsetup.o $(top_builddir)/libdm/libdevmapper.$(LIB_SUFFIX) $(CC) -o $@ dmsetup.o $(CFLAGS) $(LDFLAGS) \ - -L$(top_srcdir)/libdm -ldevmapper $(LIBS) + -L$(top_builddir)/libdm -ldevmapper $(LIBS) dmsetup.static: dmsetup.o $(interfacedir)/libdevmapper.a $(CC) -o $@ dmsetup.o $(CFLAGS) $(LDFLAGS) -static \ @@ -119,27 +120,27 @@ all: device-mapper -lvm: $(OBJECTS) lvm.o $(top_srcdir)/lib/liblvm-internal.a +lvm: $(OBJECTS) lvm.o $(top_builddir)/lib/liblvm-internal.a $(CC) -o $@ $(CFLAGS) $(OBJECTS) lvm.o \ $(LDFLAGS) $(LVMLIBS) $(LIBS) -rdynamic LIB_PTHREAD = @LIB_PTHREAD@ -lvm.static: $(OBJECTS) lvm-static.o $(top_srcdir)/lib/liblvm-internal.a $(interfacedir)/libdevmapper.a +lvm.static: $(OBJECTS) lvm-static.o $(top_builddir)/lib/liblvm-internal.a $(interfacedir)/libdevmapper.a $(CC) -o $@ $(CFLAGS) $(OBJECTS) lvm-static.o -static \ -L$(interfacedir) $(LDFLAGS) $(LVMLIBS) $(LIBS) $(LIB_PTHREAD) -rdynamic -liblvm2cmd.a: $(top_srcdir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o - cat $(top_srcdir)/lib/liblvm-internal.a > $@ +liblvm2cmd.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o + cat $(top_builddir)/lib/liblvm-internal.a > $@ $(AR) rs $@ $(OBJECTS) lvmcmdlib.o lvm2cmd.o -liblvm2cmd-static.a: $(top_srcdir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd-static.o - cat $(top_srcdir)/lib/liblvm-internal.a > $@ +liblvm2cmd-static.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd-static.o + cat $(top_builddir)/lib/liblvm-internal.a > $@ $(AR) rs $@ $(OBJECTS) lvmcmdlib.o lvm2cmd-static.o liblvm2cmd.$(LIB_SUFFIX): liblvm2cmd.a $(LDDEPS) .commands: commands.h cmdnames.h Makefile - $(CC) -E -P cmdnames.h 2> /dev/null | \ + $(CC) -E -P $(srcdir)/cmdnames.h 2> /dev/null | \ egrep -v '^ *(|#.*|dumpconfig|formats|help|pvdata|segtypes|version) *$$' > .commands .PHONY: install_cmdlib_dynamic install_cmdlib_static \ @@ -163,17 +164,17 @@ endif install_cmdlib_dynamic: liblvm2cmd.$(LIB_SUFFIX) - $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) liblvm2cmd.$(LIB_SUFFIX) \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ $(libdir)/liblvm2cmd.$(LIB_SUFFIX).$(LIB_VERSION) $(LN_S) -f liblvm2cmd.$(LIB_SUFFIX).$(LIB_VERSION) $(libdir)/liblvm2cmd.$(LIB_SUFFIX) - $(INSTALL) -D $(OWNER) $(GROUP) -m 444 lvm2cmd.h \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 444 $(srcdir)/lvm2cmd.h \ $(includedir)/lvm2cmd.h install_cmdlib_static: liblvm2cmd-static.a - $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) liblvm2cmd-static.a \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ $(libdir)/liblvm2cmd.a.$(LIB_VERSION) $(LN_S) -f liblvm2cmd.a.$(LIB_VERSION) $(libdir)/liblvm2cmd.a - $(INSTALL) -D $(OWNER) $(GROUP) -m 444 lvm2cmd.h \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 444 $(srcdir)/lvm2cmd.h \ $(includedir)/lvm2cmd.h install_tools_dynamic: lvm .commands @@ -181,14 +182,14 @@ $(sbindir)/lvm @echo Creating symbolic links for individual commands in $(sbindir) @( \ - for v in `cat .commands`; do \ + for v in `cat $(srcdir)/.commands`; do \ cd $(sbindir); \ $(LN_S) -f lvm $$v; \ done; \ ) install_tools_static: lvm.static - $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) lvm.static \ + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ $(staticdir)/lvm.static install_dmsetup_dynamic: dmsetup --- LVM2/udev/Makefile.in 2009/08/03 18:44:54 1.2 +++ LVM2/udev/Makefile.in 2009/10/02 19:10:38 1.3 @@ -11,9 +11,10 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -srcdir = . -top_srcdir = .. - +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ +VPATH = @srcdir@ DM_RULES=10-dm.rules 12-dm-disk.rules 95-dm-notify.rules LVM_RULES=11-lvm.rules @@ -21,7 +22,7 @@ CLEAN_TARGETS=10-dm.rules -include $(top_srcdir)/make.tmpl +include ../make.tmpl %: %.in $(SED) -e "s/(DM_DIR)/$(DM_DIR)/" $< >$@ @@ -31,7 +32,7 @@ @for f in $(LVM_RULES); \ do \ $(RM) $(udevdir)/$$f; \ - $(INSTALL) -c -D $(OWNER) $(GROUP) -m 644 $$f $(udevdir)/$$f; \ + $(INSTALL) -c -D $(OWNER) $(GROUP) -m 644 $(srcdir)/$$f $(udevdir)/$$f; \ done install_device-mapper: $(DM_RULES) @@ -39,7 +40,7 @@ @for f in $(DM_RULES); \ do \ $(RM) $(udevdir)/$$f; \ - $(INSTALL) -c -D $(OWNER) $(GROUP) -m 644 $$f $(udevdir)/$$f; \ + $(INSTALL) -c -D $(OWNER) $(GROUP) -m 644 $(srcdir)/$$f $(udevdir)/$$f; \ done install: install_lvm2 install_device-mapper From agk@sourceware.org Mon Oct 5 12:11:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Mon, 05 Oct 2009 12:11:00 -0000 Subject: LVM2 ./WHATS_NEW ./configure ./configure.in li ... Message-ID: <20091005121131.5800.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-05 12:11:31 Modified files: . : WHATS_NEW configure configure.in libdm : libdevmapper.pc.in Log message: Only include selinux libs in libdevmapper.pc when selinux build enabled. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1288&r2=1.1289 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.diff?cvsroot=lvm2&r1=1.109&r2=1.110 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.in.diff?cvsroot=lvm2&r1=1.117&r2=1.118 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdevmapper.pc.in.diff?cvsroot=lvm2&r1=1.2&r2=1.3 --- LVM2/WHATS_NEW 2009/10/02 19:10:31 1.1288 +++ LVM2/WHATS_NEW 2009/10/05 12:11:30 1.1289 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Only include selinux libs in libdevmapper.pc when selinux build enabled. Allow for a build directory separate from the source. Update distclean target for rename clogd to cmirrord. (2.02.52) Only do lock conversions in clvmd if we are explicitly asked for one. --- LVM2/configure 2009/10/02 19:10:31 1.109 +++ LVM2/configure 2009/10/05 12:11:30 1.110 @@ -651,6 +651,7 @@ STATIC_LINK STATICDIR SNAPSHOTS +SELINUX_LIBS POOL PKGCONFIG OWNER @@ -12910,7 +12911,7 @@ #define HAVE_SEPOL 1 _ACEOF - LIBS="-lsepol $LIBS" + SELINUX_LIBS="-lsepol $SELINUX_LIBS" fi { $as_echo "$as_me:$LINENO: checking for is_selinux_enabled in -lselinux" >&5 @@ -12991,11 +12992,12 @@ #define HAVE_SELINUX 1 _ACEOF - LIBS="-lselinux $LIBS" + SELINUX_LIBS="-lselinux $SELINUX_LIBS" else { $as_echo "$as_me:$LINENO: WARNING: Disabling selinux" >&5 $as_echo "$as_me: WARNING: Disabling selinux" >&2;} fi + LIBS="$SELINUX_LIBS $LIBS" # With --enable-static_link and selinux enabled, linking # fails on at least Debian unstable due to unsatisfied references @@ -15524,6 +15526,7 @@ + ################################################################################ ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/cmirrord/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile doc/Makefile include/.symlinks include/Makefile lib/Makefile lib/format1/Makefile lib/format_pool/Makefile lib/locking/Makefile lib/mirror/Makefile lib/misc/lvm-version.h lib/snapshot/Makefile libdm/Makefile libdm/libdevmapper.pc liblvm/Makefile liblvm/liblvm2app.pc man/Makefile po/Makefile scripts/clvmd_init_red_hat scripts/lvm2_monitoring_init_red_hat scripts/Makefile test/Makefile test/api/Makefile tools/Makefile udev/Makefile" --- LVM2/configure.in 2009/10/02 19:10:32 1.117 +++ LVM2/configure.in 2009/10/05 12:11:30 1.118 @@ -841,17 +841,18 @@ if test x$HAVE_SEPOL = xyes; then AC_DEFINE([HAVE_SEPOL], 1, [Define to 1 if sepol_check_context is available.]) - LIBS="-lsepol $LIBS" + SELINUX_LIBS="-lsepol $SELINUX_LIBS" fi AC_CHECK_LIB(selinux, is_selinux_enabled, HAVE_SELINUX=yes, HAVE_SELINUX=no) if test x$HAVE_SELINUX = xyes; then AC_DEFINE([HAVE_SELINUX], 1, [Define to 1 to include support for selinux.]) - LIBS="-lselinux $LIBS" + SELINUX_LIBS="-lselinux $SELINUX_LIBS" else AC_MSG_WARN(Disabling selinux) fi + LIBS="$SELINUX_LIBS $LIBS" # With --enable-static_link and selinux enabled, linking # fails on at least Debian unstable due to unsatisfied references @@ -1126,6 +1127,7 @@ AC_SUBST(SACKPT_LIBS) AC_SUBST(SALCK_CFLAGS) AC_SUBST(SALCK_LIBS) +AC_SUBST(SELINUX_LIBS) AC_SUBST(SNAPSHOTS) AC_SUBST(STATICDIR) AC_SUBST(STATIC_LINK) --- LVM2/libdm/libdevmapper.pc.in 2008/11/01 20:48:09 1.2 +++ LVM2/libdm/libdevmapper.pc.in 2009/10/05 12:11:30 1.3 @@ -8,4 +8,4 @@ Version: @DM_LIB_PATCHLEVEL@ Cflags: -I${includedir} Libs: -L${libdir} -ldevmapper -Libs.private: -lselinux -lsepol +Libs.private: @SELINUX_LIBS@ From agk@sourceware.org Mon Oct 5 12:44:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Mon, 05 Oct 2009 12:44:00 -0000 Subject: LVM2 ./WHATS_NEW doc/example.conf lib/config/d ... Message-ID: <20091005124421.16478.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-05 12:44:21 Modified files: . : WHATS_NEW doc : example.conf lib/config : defaults.h Log message: Correct example.conf to indicate that lvm2 not lvm1 is the default format. Remove an unused stray LVM1_SUPPORT ifdef. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1289&r2=1.1290 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/doc/example.conf.diff?cvsroot=lvm2&r1=1.50&r2=1.51 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/defaults.h.diff?cvsroot=lvm2&r1=1.52&r2=1.53 --- LVM2/WHATS_NEW 2009/10/05 12:11:30 1.1289 +++ LVM2/WHATS_NEW 2009/10/05 12:44:20 1.1290 @@ -1,5 +1,7 @@ Version 2.02.54 - ===================================== + Correct example.conf to indicate that lvm2 not lvm1 is the default format. + Remove an unused stray LVM1_SUPPORT ifdef. Only include selinux libs in libdevmapper.pc when selinux build enabled. Allow for a build directory separate from the source. Update distclean target for rename clogd to cmirrord. (2.02.52) --- LVM2/doc/example.conf 2009/09/28 16:23:45 1.50 +++ LVM2/doc/example.conf 2009/10/05 12:44:21 1.51 @@ -262,8 +262,8 @@ # The default metadata format that commands should use - "lvm1" or "lvm2". # The command line override is -M1 or -M2. - # Defaults to "lvm1" if compiled in, else "lvm2". - # format = "lvm1" + # Defaults to "lvm2". + # format = "lvm2" # Location of proc filesystem proc = "/proc" --- LVM2/lib/config/defaults.h 2009/09/28 16:23:46 1.52 +++ LVM2/lib/config/defaults.h 2009/10/05 12:44:21 1.53 @@ -58,11 +58,7 @@ # define DEFAULT_FALLBACK_TO_LVM1 0 #endif -#ifdef LVM1_SUPPORT -# define DEFAULT_FORMAT "lvm1" -#else -# define DEFAULT_FORMAT "lvm2" -#endif +#define DEFAULT_FORMAT "lvm2" #define DEFAULT_STRIPESIZE 64 /* KB */ #define DEFAULT_PVMETADATASIZE 255 From agk@sourceware.org Mon Oct 5 13:46:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Mon, 05 Oct 2009 13:46:00 -0000 Subject: LVM2 daemons/clvmd/Makefile.in daemons/cmirror ... Message-ID: <20091005134605.16426.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-05 13:46:03 Modified files: daemons/clvmd : Makefile.in daemons/cmirrord: Makefile.in daemons/dmeventd: Makefile.in daemons/dmeventd/plugins/mirror: Makefile.in daemons/dmeventd/plugins/snapshot: Makefile.in lib : Makefile.in tools : Makefile.in Log message: More makefile cleaning up and fixing. (gentoo) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/Makefile.in.diff?cvsroot=lvm2&r1=1.31&r2=1.32 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/cmirrord/Makefile.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/Makefile.in.diff?cvsroot=lvm2&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/mirror/Makefile.in.diff?cvsroot=lvm2&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in.diff?cvsroot=lvm2&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/Makefile.in.diff?cvsroot=lvm2&r1=1.93&r2=1.94 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/Makefile.in.diff?cvsroot=lvm2&r1=1.100&r2=1.101 --- LVM2/daemons/clvmd/Makefile.in 2009/10/02 19:10:32 1.31 +++ LVM2/daemons/clvmd/Makefile.in 2009/10/05 13:46:00 1.32 @@ -92,7 +92,7 @@ install_clvmd clvmd: $(OBJECTS) $(top_builddir)/lib/liblvm-internal.a - $(CC) -o clvmd $(OBJECTS) $(CFLAGS) $(LDFLAGS) \ + $(CC) $(CFLAGS) $(LDFLAGS) -o clvmd $(OBJECTS) \ $(LVMLIBS) $(LMLIBS) $(LIBS) .PHONY: install_clvmd --- LVM2/daemons/cmirrord/Makefile.in 2009/10/02 19:10:32 1.4 +++ LVM2/daemons/cmirrord/Makefile.in 2009/10/05 13:46:01 1.5 @@ -32,7 +32,7 @@ CFLAGS += $(CPG_CFLAGS) $(SACKPT_CFLAGS) cmirrord: $(OBJECTS) $(top_builddir)/lib/liblvm-internal.a - $(CC) -o cmirrord $(OBJECTS) $(LDFLAGS) \ + $(CC) $(CFLAGS) $(LDFLAGS) -o cmirrord $(OBJECTS) \ $(LVMLIBS) $(LMLIBS) $(LIBS) install: $(TARGETS) --- LVM2/daemons/dmeventd/Makefile.in 2009/10/02 19:10:32 1.26 +++ LVM2/daemons/dmeventd/Makefile.in 2009/10/05 13:46:01 1.27 @@ -42,11 +42,10 @@ all: dmeventd device-mapper: dmeventd $(LIB_STATIC) -LDFLAGS += -ldl -ldevmapper -lpthread -CLDFLAGS += -ldl -ldevmapper -lpthread +LIBS += -ldl -ldevmapper -lpthread dmeventd: $(LIB_SHARED) $(VERSIONED_SHLIB) dmeventd.o - $(CC) -o $@ dmeventd.o $(CFLAGS) $(LDFLAGS) \ + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ dmeventd.o \ -L. -ldevmapper-event $(LIBS) -rdynamic .PHONY: install_dynamic install_static install_include \ --- LVM2/daemons/dmeventd/plugins/mirror/Makefile.in 2009/10/02 19:10:33 1.10 +++ LVM2/daemons/dmeventd/plugins/mirror/Makefile.in 2009/10/05 13:46:01 1.11 @@ -18,7 +18,8 @@ VPATH = @srcdir@ INCLUDES += -I${top_srcdir}/tools -CLDFLAGS += -L${top_builddir}/tools -ldevmapper @LVM2CMD_LIB@ +CLDFLAGS += -L${top_builddir}/tools +LIBS += -ldevmapper @LIB_PTHREAD@ @LVM2CMD_LIB@ SOURCES = dmeventd_mirror.c --- LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in 2009/10/02 19:10:33 1.6 +++ LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in 2009/10/05 13:46:02 1.7 @@ -18,7 +18,8 @@ VPATH = @srcdir@ INCLUDES += -I${top_srcdir}/tools -CLDFLAGS += -L${top_builddir}/tools -ldevmapper @LVM2CMD_LIB@ +CLDFLAGS += -L${top_builddir}/tools +LIBS += -ldevmapper @LIB_PTHREAD@ @LVM2CMD_LIB@ SOURCES = dmeventd_snapshot.c --- LVM2/lib/Makefile.in 2009/10/02 19:10:34 1.93 +++ LVM2/lib/Makefile.in 2009/10/05 13:46:02 1.94 @@ -138,7 +138,8 @@ endif ifeq ("@DMEVENTD@", "yes") - CLDFLAGS += -ldevmapper-event + CLDFLAGS += -L../daemons/dmeventd + LIBS += -ldevmapper-event endif LIB_NAME = liblvm-internal --- LVM2/tools/Makefile.in 2009/10/02 19:10:38 1.100 +++ LVM2/tools/Makefile.in 2009/10/05 13:46:03 1.101 @@ -17,6 +17,8 @@ top_builddir = @top_builddir@ VPATH = @srcdir@ +LIB_PTHREAD = @LIB_PTHREAD@ + SOURCES =\ dumpconfig.c \ formats.c \ @@ -110,24 +112,23 @@ device-mapper: $(TARGETS_DM) dmsetup: dmsetup.o $(top_builddir)/libdm/libdevmapper.$(LIB_SUFFIX) - $(CC) -o $@ dmsetup.o $(CFLAGS) $(LDFLAGS) \ - -L$(top_builddir)/libdm -ldevmapper $(LIBS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ dmsetup.o \ + -L$(top_builddir)/libdm -ldevmapper $(LIBS) $(LIB_PTHREAD) dmsetup.static: dmsetup.o $(interfacedir)/libdevmapper.a - $(CC) -o $@ dmsetup.o $(CFLAGS) $(LDFLAGS) -static \ + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ dmsetup.o -static \ -L$(interfacedir) -ldevmapper $(LIBS) \ $(LIB_PTHREAD) all: device-mapper lvm: $(OBJECTS) lvm.o $(top_builddir)/lib/liblvm-internal.a - $(CC) -o $@ $(CFLAGS) $(OBJECTS) lvm.o \ - $(LDFLAGS) $(LVMLIBS) $(LIBS) -rdynamic + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) lvm.o \ + $(LVMLIBS) $(LIBS) $(LIB_PTHREAD) -rdynamic -LIB_PTHREAD = @LIB_PTHREAD@ lvm.static: $(OBJECTS) lvm-static.o $(top_builddir)/lib/liblvm-internal.a $(interfacedir)/libdevmapper.a - $(CC) -o $@ $(CFLAGS) $(OBJECTS) lvm-static.o -static \ - -L$(interfacedir) $(LDFLAGS) $(LVMLIBS) $(LIBS) $(LIB_PTHREAD) -rdynamic + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) lvm-static.o -static \ + -L$(interfacedir) $(LVMLIBS) $(LIBS) $(LIB_PTHREAD) -rdynamic liblvm2cmd.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o cat $(top_builddir)/lib/liblvm-internal.a > $@ From wysochanski@sourceware.org Mon Oct 5 20:02:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:02:00 -0000 Subject: LVM2/lib/metadata metadata.c Message-ID: <20091005200231.15759.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:02:30 Modified files: lib/metadata : metadata.c Log message: Add pvcreate_params to vg_extend_single_pv. Should be no functional change. If this parameter is set to NULL, just fail the extend if the device is not already a PV. If non-NULL, try pvcreate_single before failing. Note that pvcreate_single() handles the log_error in case of failure so we just return 0 if pvcreate_single() fails. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.285&r2=1.286 --- LVM2/lib/metadata/metadata.c 2009/10/05 20:02:04 1.285 +++ LVM2/lib/metadata/metadata.c 2009/10/05 20:02:30 1.286 @@ -559,16 +559,23 @@ * Parameters: * - vg: handle of volume group to extend by 'pv_name' * - pv_name: device path of PV to add to VG + * - pp: parameters to pass to implicit pvcreate; if NULL, do not pvcreate * */ -static int vg_extend_single_pv(struct volume_group *vg, char *pv_name) +static int vg_extend_single_pv(struct volume_group *vg, char *pv_name, + struct pvcreate_params *pp) { struct physical_volume *pv; - if (!(pv = pv_by_path(vg->fid->fmt->cmd, pv_name))) { + pv = pv_by_path(vg->fid->fmt->cmd, pv_name); + if (!pv && !pp) { log_error("%s not identified as an existing " "physical volume", pv_name); return 0; + } else if (!pv && pp) { + pv = pvcreate_single(vg->cmd, pv_name, pp); + if (!pv) + return 0; } if (!add_pv_to_vg(vg, pv_name, pv)) return 0; @@ -584,7 +591,7 @@ /* attach each pv */ for (i = 0; i < pv_count; i++) { - if (!vg_extend_single_pv(vg, pv_names[i])) + if (!vg_extend_single_pv(vg, pv_names[i], NULL)) goto bad; } From wysochanski@sourceware.org Mon Oct 5 20:02:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:02:00 -0000 Subject: LVM2 lib/metadata/metadata-exported.h lib/meta ... Message-ID: <20091005200249.17056.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:02:49 Modified files: lib/metadata : metadata-exported.h metadata.c liblvm : lvm_vg.c tools : vgcreate.c vgextend.c Log message: Add pvcreate_params to vg_extend. Another refactoring for implicit pvcreate support. We need to get the pvcreate parameters somehow to the vg_extend routine. Options seemed to be: 1. Attach the parameters to struct volume_group. I personally did not like this idea in most cases, though one could make an agrument why it might be ok at least for some of the parameters (e.g. metadatacopies). 2. Pass them in to the extend routine. This second route seemed to be the best approach given the constraints. Future patches will parse the command line and fill in the actual values for the pvcreate_single call. Should be no functional change. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.114&r2=1.115 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.286&r2=1.287 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/liblvm/lvm_vg.c.diff?cvsroot=lvm2&r1=1.30&r2=1.31 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.66&r2=1.67 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgextend.c.diff?cvsroot=lvm2&r1=1.50&r2=1.51 --- LVM2/lib/metadata/metadata-exported.h 2009/10/01 01:04:27 1.114 +++ LVM2/lib/metadata/metadata-exported.h 2009/10/05 20:02:48 1.115 @@ -453,7 +453,8 @@ int vg_remove(struct volume_group *vg); int vg_rename(struct cmd_context *cmd, struct volume_group *vg, const char *new_name); -int vg_extend(struct volume_group *vg, int pv_count, char **pv_names); +int vg_extend(struct volume_group *vg, int pv_count, char **pv_names, + struct pvcreate_params *pp); int vg_reduce(struct volume_group *vg, char *pv_name); int vg_set_extent_size(struct volume_group *vg, uint32_t new_extent_size); int vg_set_max_lv(struct volume_group *vg, uint32_t max_lv); --- LVM2/lib/metadata/metadata.c 2009/10/05 20:02:30 1.286 +++ LVM2/lib/metadata/metadata.c 2009/10/05 20:02:48 1.287 @@ -582,7 +582,18 @@ return 1; } -int vg_extend(struct volume_group *vg, int pv_count, char **pv_names) +/* + * Extend a VG by a single PV / device path + * + * Parameters: + * - vg: handle of volume group to extend by 'pv_name' + * - pv_count: count of device paths of PVs + * - pv_names: device paths of PVs to add to VG + * - pp: parameters to pass to implicit pvcreate; if NULL, do not pvcreate + * + */ +int vg_extend(struct volume_group *vg, int pv_count, char **pv_names, + struct pvcreate_params *pp) { int i; @@ -591,7 +602,7 @@ /* attach each pv */ for (i = 0; i < pv_count; i++) { - if (!vg_extend_single_pv(vg, pv_names[i], NULL)) + if (!vg_extend_single_pv(vg, pv_names[i], pp)) goto bad; } --- LVM2/liblvm/lvm_vg.c 2009/09/14 19:43:12 1.30 +++ LVM2/liblvm/lvm_vg.c 2009/10/05 20:02:48 1.31 @@ -60,7 +60,7 @@ return -1; } - if (!vg_extend(vg, 1, (char **) &device)) { + if (!vg_extend(vg, 1, (char **) &device, NULL)) { unlock_vg(vg->cmd, VG_ORPHANS); return -1; } --- LVM2/tools/vgcreate.c 2009/09/14 22:47:50 1.66 +++ LVM2/tools/vgcreate.c 2009/10/05 20:02:48 1.67 @@ -63,7 +63,7 @@ } /* attach the pv's */ - if (!vg_extend(vg, argc - 1, argv + 1)) + if (!vg_extend(vg, argc - 1, argv + 1, NULL)) goto_bad; if (vp_new.max_lv != vg->max_lv) --- LVM2/tools/vgextend.c 2009/09/14 22:47:50 1.50 +++ LVM2/tools/vgextend.c 2009/10/05 20:02:49 1.51 @@ -54,7 +54,7 @@ goto_bad; /* extend vg */ - if (!vg_extend(vg, argc, argv)) + if (!vg_extend(vg, argc, argv, NULL)) goto_bad; /* ret > 0 */ From wysochanski@sourceware.org Mon Oct 5 20:02:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:02:00 -0000 Subject: LVM2/lib/metadata metadata.c Message-ID: <20091005200204.8403.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:02:04 Modified files: lib/metadata : metadata.c Log message: Refactor vg_extend - add vg_extend_single_pv. Simple refactor to setup future changes related to implicit pvcreates. Should be no functional change. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.284&r2=1.285 --- LVM2/lib/metadata/metadata.c 2009/09/15 18:35:14 1.284 +++ LVM2/lib/metadata/metadata.c 2009/10/05 20:02:04 1.285 @@ -553,22 +553,38 @@ return ret; } +/* + * Extend a VG by a single PV / device path + * + * Parameters: + * - vg: handle of volume group to extend by 'pv_name' + * - pv_name: device path of PV to add to VG + * + */ +static int vg_extend_single_pv(struct volume_group *vg, char *pv_name) +{ + struct physical_volume *pv; + + if (!(pv = pv_by_path(vg->fid->fmt->cmd, pv_name))) { + log_error("%s not identified as an existing " + "physical volume", pv_name); + return 0; + } + if (!add_pv_to_vg(vg, pv_name, pv)) + return 0; + return 1; +} + int vg_extend(struct volume_group *vg, int pv_count, char **pv_names) { int i; - struct physical_volume *pv; if (_vg_bad_status_bits(vg, RESIZEABLE_VG)) return 0; /* attach each pv */ for (i = 0; i < pv_count; i++) { - if (!(pv = pv_by_path(vg->fid->fmt->cmd, pv_names[i]))) { - log_error("%s not identified as an existing " - "physical volume", pv_names[i]); - goto bad; - } - if (!add_pv_to_vg(vg, pv_names[i], pv)) + if (!vg_extend_single_pv(vg, pv_names[i])) goto bad; } From wysochanski@sourceware.org Mon Oct 5 20:03:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:03:00 -0000 Subject: LVM2/tools vgcreate.c vgextend.c Message-ID: <20091005200338.22737.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:03:37 Modified files: tools : vgcreate.c vgextend.c Log message: Refactor vgcreate/vgextend validation of vgname/pvname(s). Decrement argc and increment argv in a consistent way to allow for later code-sharing. Should be no functional change. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.67&r2=1.68 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgextend.c.diff?cvsroot=lvm2&r1=1.51&r2=1.52 --- LVM2/tools/vgcreate.c 2009/10/05 20:02:48 1.67 +++ LVM2/tools/vgcreate.c 2009/10/05 20:03:37 1.68 @@ -22,6 +22,7 @@ struct volume_group *vg; const char *tag; const char *clustered_message = ""; + char *vg_name; if (!argc) { log_error("Please provide volume group name and " @@ -29,7 +30,11 @@ return EINVALID_CMD_LINE; } - if (argc == 1) { + vg_name = argv[0]; + argc--; + argv++; + + if (argc == 0) { log_error("Please enter physical volume name(s)"); return EINVALID_CMD_LINE; } @@ -40,7 +45,7 @@ vp_def.max_lv = DEFAULT_MAX_LV; vp_def.alloc = DEFAULT_ALLOC_POLICY; vp_def.clustered = DEFAULT_CLUSTERED; - if (fill_vg_create_params(cmd, argv[0], &vp_new, &vp_def)) + if (fill_vg_create_params(cmd, vg_name, &vp_new, &vp_def)) return EINVALID_CMD_LINE; if (validate_vg_create_params(cmd, &vp_new)) @@ -63,7 +68,7 @@ } /* attach the pv's */ - if (!vg_extend(vg, argc - 1, argv + 1, NULL)) + if (!vg_extend(vg, argc, argv, NULL)) goto_bad; if (vp_new.max_lv != vg->max_lv) --- LVM2/tools/vgextend.c 2009/10/05 20:02:49 1.51 +++ LVM2/tools/vgextend.c 2009/10/05 20:03:37 1.52 @@ -27,15 +27,15 @@ return EINVALID_CMD_LINE; } - if (argc == 1) { - log_error("Please enter physical volume(s)"); - return EINVALID_CMD_LINE; - } - vg_name = skip_dev_dir(cmd, argv[0], NULL); argc--; argv++; + if (argc == 0) { + log_error("Please enter physical volume(s)"); + return EINVALID_CMD_LINE; + } + log_verbose("Checking for volume group \"%s\"", vg_name); vg = vg_read_for_update(cmd, vg_name, NULL, 0); if (vg_read_error(vg)) { From wysochanski@sourceware.org Mon Oct 5 20:03:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:03:00 -0000 Subject: LVM2 lib/metadata/metadata-exported.h lib/meta ... Message-ID: <20091005200309.18629.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:03:08 Modified files: lib/metadata : metadata-exported.h metadata.c liblvm : lvm_vg.c Log message: Allow calling fill_default_pvcreate_params from tools. We need defaults for pvcreate_params at a higher level - this will allow us to use a common function from the tools to take defaults, then fill in any non-defaults from the commandline. Future patches will refactor vgcreate/vgextend to call this function if one or more pvcreate parameters are given on the commandline. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.115&r2=1.116 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.287&r2=1.288 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/liblvm/lvm_vg.c.diff?cvsroot=lvm2&r1=1.31&r2=1.32 --- LVM2/lib/metadata/metadata-exported.h 2009/10/05 20:02:48 1.115 +++ LVM2/lib/metadata/metadata-exported.h 2009/10/05 20:03:08 1.116 @@ -371,6 +371,7 @@ struct physical_volume *pvcreate_single(struct cmd_context *cmd, const char *pv_name, struct pvcreate_params *pp); +void fill_default_pvcreate_params(struct pvcreate_params *pp); /* * Utility functions --- LVM2/lib/metadata/metadata.c 2009/10/05 20:02:48 1.287 +++ LVM2/lib/metadata/metadata.c 2009/10/05 20:03:08 1.288 @@ -1272,7 +1272,7 @@ return 1; } -static void fill_default_pvcreate_params(struct pvcreate_params *pp) +void fill_default_pvcreate_params(struct pvcreate_params *pp) { memset(pp, 0, sizeof(*pp)); pp->zero = 0; --- LVM2/liblvm/lvm_vg.c 2009/10/05 20:02:48 1.31 +++ LVM2/liblvm/lvm_vg.c 2009/10/05 20:03:08 1.32 @@ -41,6 +41,8 @@ int lvm_vg_extend(vg_t vg, const char *device) { + struct pvcreate_params pp; + if (vg_read_error(vg)) return -1; @@ -52,15 +54,8 @@ return -1; } - /* If device not initialized, pvcreate it */ - if (!pv_by_path(vg->cmd, device) && - (!pvcreate_single(vg->cmd, device, NULL))) { - log_error("Unable to initialize device for LVM use"); - unlock_vg(vg->cmd, VG_ORPHANS); - return -1; - } - - if (!vg_extend(vg, 1, (char **) &device, NULL)) { + fill_default_pvcreate_params(&pp); + if (!vg_extend(vg, 1, (char **) &device, &pp)) { unlock_vg(vg->cmd, VG_ORPHANS); return -1; } From wysochanski@sourceware.org Mon Oct 5 20:03:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:03:00 -0000 Subject: LVM2 lib/metadata/metadata.c tools/pvcreate.c Message-ID: <20091005200325.20640.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:03:25 Modified files: lib/metadata : metadata.c tools : pvcreate.c Log message: Refactor pvcreate - split pvcreate_validate_params into recovery/non-recovery. Split pvcreate_validate_params into recovery and non-recovery parameters. This is necessary so we can call the non-recovery validate function from vgextend / vgcreate. Note in the pvcreate tool case, we must call the recovery validation function first (see treatment of pe_start and --zero), and that we add a call to fill_default_pvcreate_params before the validation functions. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.288&r2=1.289 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvcreate.c.diff?cvsroot=lvm2&r1=1.85&r2=1.86 --- LVM2/lib/metadata/metadata.c 2009/10/05 20:03:08 1.288 +++ LVM2/lib/metadata/metadata.c 2009/10/05 20:03:25 1.289 @@ -1275,7 +1275,7 @@ void fill_default_pvcreate_params(struct pvcreate_params *pp) { memset(pp, 0, sizeof(*pp)); - pp->zero = 0; + pp->zero = 1; pp->size = 0; pp->data_alignment = UINT64_C(0); pp->data_alignment_offset = UINT64_C(0); --- LVM2/tools/pvcreate.c 2009/09/14 22:47:49 1.85 +++ LVM2/tools/pvcreate.c 2009/10/05 20:03:25 1.86 @@ -1,6 +1,6 @@ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -17,29 +17,20 @@ #include "metadata-exported.h" /* - * Intial sanity checking of command-line arguments and fill in 'pp' fields. - * - * Input arguments: - * cmd, argc, argv + * Intial sanity checking of recovery-related command-line arguments. + * These args are: --restorefile, --uuid, and --physicalvolumesize * * Output arguments: * pp: structure allocated by caller, fields written / validated here */ -static int pvcreate_validate_params(struct cmd_context *cmd, - int argc, char **argv, - struct pvcreate_params *pp) +static int pvcreate_validate_restore_params(struct cmd_context *cmd, + int argc, char **argv, + struct pvcreate_params *pp) { const char *uuid = NULL; void *existing_pv; struct volume_group *vg; - memset(pp, 0, sizeof(*pp)); - - if (!argc) { - log_error("Please enter a physical volume path"); - return 0; - } - if (arg_count(cmd, restorefile_ARG) && !arg_count(cmd, uuidstr_ARG)) { log_error("--uuid is required with --restorefile"); return 0; @@ -76,6 +67,32 @@ vg_release(vg); } + if (arg_sign_value(cmd, physicalvolumesize_ARG, 0) == SIGN_MINUS) { + log_error("Physical volume size may not be negative"); + return 0; + } + pp->size = arg_uint64_value(cmd, physicalvolumesize_ARG, UINT64_C(0)); + + if (arg_count(cmd, restorefile_ARG) || arg_count(cmd, uuidstr_ARG)) + pp->zero = 0; + return 1; +} + +/* + * Intial sanity checking of non-recovery related command-line arguments. + * + * Output arguments: + * pp: structure allocated by caller, fields written / validated here + */ +static int pvcreate_validate_params(struct cmd_context *cmd, + int argc, char **argv, + struct pvcreate_params *pp) +{ + if (!argc) { + log_error("Please enter a physical volume path"); + return 0; + } + if (arg_count(cmd, yes_ARG) && !arg_count(cmd, force_ARG)) { log_error("Option y can only be given with option f"); return 0; @@ -111,16 +128,6 @@ if (arg_count(cmd, zero_ARG)) pp->zero = strcmp(arg_str_value(cmd, zero_ARG, "y"), "n"); - else if (arg_count(cmd, restorefile_ARG) || arg_count(cmd, uuidstr_ARG)) - pp->zero = 0; - else - pp->zero = 1; - - if (arg_sign_value(cmd, physicalvolumesize_ARG, 0) == SIGN_MINUS) { - log_error("Physical volume size may not be negative"); - return 0; - } - pp->size = arg_uint64_value(cmd, physicalvolumesize_ARG, UINT64_C(0)); if (arg_sign_value(cmd, dataalignment_ARG, 0) == SIGN_MINUS) { log_error("Physical volume data alignment may not be negative"); @@ -185,6 +192,11 @@ int ret = ECMD_PROCESSED; struct pvcreate_params pp; + fill_default_pvcreate_params(&pp); + + if (!pvcreate_validate_restore_params(cmd, argc, argv, &pp)) { + return EINVALID_CMD_LINE; + } if (!pvcreate_validate_params(cmd, argc, argv, &pp)) { return EINVALID_CMD_LINE; } From wysochanski@sourceware.org Mon Oct 5 20:03:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:03:00 -0000 Subject: LVM2/tools pvcreate.c toollib.c toollib.h Message-ID: <20091005200355.25378.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:03:55 Modified files: tools : pvcreate.c toollib.c toollib.h Log message: Move pvcreate_validate_params into toollib to allow calling from mutiple tools. For implicit pvcreate support, we need to call this from vgcreate and vgextend, so move it into toollib. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvcreate.c.diff?cvsroot=lvm2&r1=1.86&r2=1.87 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.c.diff?cvsroot=lvm2&r1=1.172&r2=1.173 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.h.diff?cvsroot=lvm2&r1=1.64&r2=1.65 --- LVM2/tools/pvcreate.c 2009/10/05 20:03:25 1.86 +++ LVM2/tools/pvcreate.c 2009/10/05 20:03:54 1.87 @@ -78,114 +78,6 @@ return 1; } -/* - * Intial sanity checking of non-recovery related command-line arguments. - * - * Output arguments: - * pp: structure allocated by caller, fields written / validated here - */ -static int pvcreate_validate_params(struct cmd_context *cmd, - int argc, char **argv, - struct pvcreate_params *pp) -{ - if (!argc) { - log_error("Please enter a physical volume path"); - return 0; - } - - if (arg_count(cmd, yes_ARG) && !arg_count(cmd, force_ARG)) { - log_error("Option y can only be given with option f"); - return 0; - } - - pp->yes = arg_count(cmd, yes_ARG); - pp->force = arg_count(cmd, force_ARG); - - if (arg_int_value(cmd, labelsector_ARG, 0) >= LABEL_SCAN_SECTORS) { - log_error("labelsector must be less than %lu", - LABEL_SCAN_SECTORS); - return 0; - } else { - pp->labelsector = arg_int64_value(cmd, labelsector_ARG, - DEFAULT_LABELSECTOR); - } - - if (!(cmd->fmt->features & FMT_MDAS) && - (arg_count(cmd, metadatacopies_ARG) || - arg_count(cmd, metadatasize_ARG) || - arg_count(cmd, dataalignment_ARG) || - arg_count(cmd, dataalignmentoffset_ARG))) { - log_error("Metadata and data alignment parameters only " - "apply to text format."); - return 0; - } - - if (arg_count(cmd, metadatacopies_ARG) && - arg_int_value(cmd, metadatacopies_ARG, -1) > 2) { - log_error("Metadatacopies may only be 0, 1 or 2"); - return 0; - } - - if (arg_count(cmd, zero_ARG)) - pp->zero = strcmp(arg_str_value(cmd, zero_ARG, "y"), "n"); - - if (arg_sign_value(cmd, dataalignment_ARG, 0) == SIGN_MINUS) { - log_error("Physical volume data alignment may not be negative"); - return 0; - } - pp->data_alignment = arg_uint64_value(cmd, dataalignment_ARG, UINT64_C(0)); - - if (pp->data_alignment > ULONG_MAX) { - log_error("Physical volume data alignment is too big."); - return 0; - } - - if (pp->data_alignment && pp->pe_start) { - if (pp->pe_start % pp->data_alignment) - log_warn("WARNING: Ignoring data alignment %" PRIu64 - " incompatible with --restorefile value (%" - PRIu64").", pp->data_alignment, pp->pe_start); - pp->data_alignment = 0; - } - - if (arg_sign_value(cmd, dataalignmentoffset_ARG, 0) == SIGN_MINUS) { - log_error("Physical volume data alignment offset may not be negative"); - return 0; - } - pp->data_alignment_offset = arg_uint64_value(cmd, dataalignmentoffset_ARG, UINT64_C(0)); - - if (pp->data_alignment_offset > ULONG_MAX) { - log_error("Physical volume data alignment offset is too big."); - return 0; - } - - if (pp->data_alignment_offset && pp->pe_start) { - log_warn("WARNING: Ignoring data alignment offset %" PRIu64 - " incompatible with --restorefile value (%" - PRIu64").", pp->data_alignment_offset, pp->pe_start); - pp->data_alignment_offset = 0; - } - - if (arg_sign_value(cmd, metadatasize_ARG, 0) == SIGN_MINUS) { - log_error("Metadata size may not be negative"); - return 0; - } - - pp->pvmetadatasize = arg_uint64_value(cmd, metadatasize_ARG, UINT64_C(0)); - if (!pp->pvmetadatasize) - pp->pvmetadatasize = find_config_tree_int(cmd, - "metadata/pvmetadatasize", - DEFAULT_PVMETADATASIZE); - - pp->pvmetadatacopies = arg_int_value(cmd, metadatacopies_ARG, -1); - if (pp->pvmetadatacopies < 0) - pp->pvmetadatacopies = find_config_tree_int(cmd, - "metadata/pvmetadatacopies", - DEFAULT_PVMETADATACOPIES); - - return 1; -} - int pvcreate(struct cmd_context *cmd, int argc, char **argv) { int i; --- LVM2/tools/toollib.c 2009/09/29 20:33:49 1.172 +++ LVM2/tools/toollib.c 2009/10/05 20:03:54 1.173 @@ -1271,3 +1271,112 @@ lvconvert_poll(cmd, lv, 1); } } + +/* + * Intial sanity checking of non-recovery related command-line arguments. + * + * Output arguments: + * pp: structure allocated by caller, fields written / validated here + */ +int pvcreate_validate_params(struct cmd_context *cmd, + int argc, char **argv, + struct pvcreate_params *pp) +{ + if (!argc) { + log_error("Please enter a physical volume path"); + return 0; + } + + if (arg_count(cmd, yes_ARG) && !arg_count(cmd, force_ARG)) { + log_error("Option y can only be given with option f"); + return 0; + } + + pp->yes = arg_count(cmd, yes_ARG); + pp->force = arg_count(cmd, force_ARG); + + if (arg_int_value(cmd, labelsector_ARG, 0) >= LABEL_SCAN_SECTORS) { + log_error("labelsector must be less than %lu", + LABEL_SCAN_SECTORS); + return 0; + } else { + pp->labelsector = arg_int64_value(cmd, labelsector_ARG, + DEFAULT_LABELSECTOR); + } + + if (!(cmd->fmt->features & FMT_MDAS) && + (arg_count(cmd, metadatacopies_ARG) || + arg_count(cmd, metadatasize_ARG) || + arg_count(cmd, dataalignment_ARG) || + arg_count(cmd, dataalignmentoffset_ARG))) { + log_error("Metadata and data alignment parameters only " + "apply to text format."); + return 0; + } + + if (arg_count(cmd, metadatacopies_ARG) && + arg_int_value(cmd, metadatacopies_ARG, -1) > 2) { + log_error("Metadatacopies may only be 0, 1 or 2"); + return 0; + } + + if (arg_count(cmd, zero_ARG)) + pp->zero = strcmp(arg_str_value(cmd, zero_ARG, "y"), "n"); + + if (arg_sign_value(cmd, dataalignment_ARG, 0) == SIGN_MINUS) { + log_error("Physical volume data alignment may not be negative"); + return 0; + } + pp->data_alignment = arg_uint64_value(cmd, dataalignment_ARG, UINT64_C(0)); + + if (pp->data_alignment > ULONG_MAX) { + log_error("Physical volume data alignment is too big."); + return 0; + } + + if (pp->data_alignment && pp->pe_start) { + if (pp->pe_start % pp->data_alignment) + log_warn("WARNING: Ignoring data alignment %" PRIu64 + " incompatible with --restorefile value (%" + PRIu64").", pp->data_alignment, pp->pe_start); + pp->data_alignment = 0; + } + + if (arg_sign_value(cmd, dataalignmentoffset_ARG, 0) == SIGN_MINUS) { + log_error("Physical volume data alignment offset may not be negative"); + return 0; + } + pp->data_alignment_offset = arg_uint64_value(cmd, dataalignmentoffset_ARG, UINT64_C(0)); + + if (pp->data_alignment_offset > ULONG_MAX) { + log_error("Physical volume data alignment offset is too big."); + return 0; + } + + if (pp->data_alignment_offset && pp->pe_start) { + log_warn("WARNING: Ignoring data alignment offset %" PRIu64 + " incompatible with --restorefile value (%" + PRIu64").", pp->data_alignment_offset, pp->pe_start); + pp->data_alignment_offset = 0; + } + + if (arg_sign_value(cmd, metadatasize_ARG, 0) == SIGN_MINUS) { + log_error("Metadata size may not be negative"); + return 0; + } + + pp->pvmetadatasize = arg_uint64_value(cmd, metadatasize_ARG, UINT64_C(0)); + if (!pp->pvmetadatasize) + pp->pvmetadatasize = find_config_tree_int(cmd, + "metadata/pvmetadatasize", + DEFAULT_PVMETADATASIZE); + + pp->pvmetadatacopies = arg_int_value(cmd, metadatacopies_ARG, -1); + if (pp->pvmetadatacopies < 0) + pp->pvmetadatacopies = find_config_tree_int(cmd, + "metadata/pvmetadatacopies", + DEFAULT_PVMETADATACOPIES); + + return 1; +} + --- LVM2/tools/toollib.h 2009/09/29 20:22:35 1.64 +++ LVM2/tools/toollib.h 2009/10/05 20:03:55 1.65 @@ -107,5 +107,8 @@ int vg_refresh_visible(struct cmd_context *cmd, struct volume_group *vg); void lv_spawn_background_polling(struct cmd_context *cmd, struct logical_volume *lv); +int pvcreate_validate_params(struct cmd_context *cmd, + int argc, char **argv, + struct pvcreate_params *pp); #endif From wysochanski@sourceware.org Mon Oct 5 20:04:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:04:00 -0000 Subject: LVM2/tools commands.h vgcreate.c vgextend.c Message-ID: <20091005200409.27381.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:04:08 Modified files: tools : commands.h vgcreate.c vgextend.c Log message: Add implicit pvcreate support to vgcreate and vgextend. Adds implicit pvcreate support when calling vgcreate or vgextend with device paths that are not yet PVs. This changes the behavior of vgcreate and vgextend from failing with an error message to implicitly pvcreating. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/commands.h.diff?cvsroot=lvm2&r1=1.131&r2=1.132 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.68&r2=1.69 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgextend.c.diff?cvsroot=lvm2&r1=1.52&r2=1.53 --- LVM2/tools/commands.h 2009/08/04 15:53:04 1.131 +++ LVM2/tools/commands.h 2009/10/05 20:04:08 1.132 @@ -757,7 +757,9 @@ "\tVolumeGroupName PhysicalVolume [PhysicalVolume...]\n", addtag_ARG, alloc_ARG, autobackup_ARG, clustered_ARG, maxlogicalvolumes_ARG, - maxphysicalvolumes_ARG, metadatatype_ARG, physicalextentsize_ARG, test_ARG) + maxphysicalvolumes_ARG, metadatatype_ARG, physicalextentsize_ARG, test_ARG, + force_ARG, yes_ARG, zero_ARG, labelsector_ARG, metadatasize_ARG, + metadatacopies_ARG, dataalignment_ARG, dataalignmentoffset_ARG) xx(vgdisplay, "Display volume group information", @@ -820,7 +822,10 @@ "\t[--version]" "\n" "\tVolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]\n", - autobackup_ARG, test_ARG) + autobackup_ARG, test_ARG, + force_ARG, yes_ARG, zero_ARG, labelsector_ARG, metadatatype_ARG, + metadatasize_ARG, metadatacopies_ARG, dataalignment_ARG, + dataalignmentoffset_ARG) xx(vgimport, "Register exported volume group with system", --- LVM2/tools/vgcreate.c 2009/10/05 20:03:37 1.68 +++ LVM2/tools/vgcreate.c 2009/10/05 20:04:08 1.69 @@ -23,6 +23,7 @@ const char *tag; const char *clustered_message = ""; char *vg_name; + struct pvcreate_params pp; if (!argc) { log_error("Please provide volume group name and " @@ -34,8 +35,8 @@ argc--; argv++; - if (argc == 0) { - log_error("Please enter physical volume name(s)"); + fill_default_pvcreate_params(&pp); + if (!pvcreate_validate_params(cmd, argc, argv, &pp)) { return EINVALID_CMD_LINE; } @@ -68,7 +69,7 @@ } /* attach the pv's */ - if (!vg_extend(vg, argc, argv, NULL)) + if (!vg_extend(vg, argc, argv, &pp)) goto_bad; if (vp_new.max_lv != vg->max_lv) --- LVM2/tools/vgextend.c 2009/10/05 20:03:37 1.52 +++ LVM2/tools/vgextend.c 2009/10/05 20:04:08 1.53 @@ -20,6 +20,7 @@ char *vg_name; struct volume_group *vg = NULL; int r = ECMD_FAILED; + struct pvcreate_params pp; if (!argc) { log_error("Please enter volume group name and " @@ -31,8 +32,8 @@ argc--; argv++; - if (argc == 0) { - log_error("Please enter physical volume(s)"); + fill_default_pvcreate_params(&pp); + if (!pvcreate_validate_params(cmd, argc, argv, &pp)) { return EINVALID_CMD_LINE; } @@ -54,7 +55,7 @@ goto_bad; /* extend vg */ - if (!vg_extend(vg, argc, argv, NULL)) + if (!vg_extend(vg, argc, argv, &pp)) goto_bad; /* ret > 0 */ From wysochanski@sourceware.org Mon Oct 5 20:04:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:04:00 -0000 Subject: LVM2 ./WHATS_NEW test/t-vgcreate-usage.sh Message-ID: <20091005200441.425.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:04:41 Modified files: . : WHATS_NEW test : t-vgcreate-usage.sh Log message: Add implicit tests for implicit pvcreate during vgcreate and vgextend. Update tests and WHATS_NEW for implicit pvcreate support. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1290&r2=1.1291 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgcreate-usage.sh.diff?cvsroot=lvm2&r1=1.10&r2=1.11 --- LVM2/WHATS_NEW 2009/10/05 12:44:20 1.1290 +++ LVM2/WHATS_NEW 2009/10/05 20:04:40 1.1291 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Add implict pvcreate support to vgcreate and vgextend. Correct example.conf to indicate that lvm2 not lvm1 is the default format. Remove an unused stray LVM1_SUPPORT ifdef. Only include selinux libs in libdevmapper.pc when selinux build enabled. --- LVM2/test/t-vgcreate-usage.sh 2009/09/30 16:13:53 1.10 +++ LVM2/test/t-vgcreate-usage.sh 2009/10/05 20:04:40 1.11 @@ -87,3 +87,60 @@ check_vg_field_ $vg max_pv 0 check_vg_field_ $vg vg_attr "wz--n-" vgremove -ff $vg + +# Implicit pvcreate tests, test pvcreate options on vgcreate +# --force, --yes, --metadata{size|copies|type}, --zero +# --dataalignment[offset] +pvremove $dev1 $dev2 +vgcreate --force --yes --zero y $vg $dev1 $dev2 +vgremove -f $vg +pvremove -f $dev1 + +for i in 0 1 2 3 +do +# vgcreate (lvm2) succeeds writing LVM label at sector $i + vgcreate --labelsector $i $vg $dev1 + dd if=$dev1 bs=512 skip=$i count=1 2>/dev/null | strings | grep -q LABELONE; + vgremove -f $vg + pvremove -f $dev1 +done + +# metadatacopies +for i in 1 2 +do + vgcreate --metadatacopies $i $vg $dev1 + check_pv_field_ $dev1 pv_mda_count $i + vgremove -f $vg + pvremove -f $dev1 +done +not vgcreate --metadatacopies 0 $vg $dev1 +pvcreate --metadatacopies 1 $dev2 +vgcreate --metadatacopies 0 $vg $dev1 $dev2 +check_pv_field_ $dev1 pv_mda_count 0 +check_pv_field_ $dev2 pv_mda_count 1 +vgremove -f $vg +pvremove -f $dev1 + +# metadatasize, dataalignment, dataalignmentoffset +#COMM 'pvcreate sets data offset next to mda area' +vgcreate --metadatasize 100k --dataalignment 100k $vg $dev1 +check_pv_field_ $dev1 pe_start 200.00k +vgremove -f $vg +pvremove -f $dev1 + +# data area is aligned to 64k by default, +# data area start is shifted by the specified alignment_offset +pv_align="195.50k" +vgcreate --metadatasize 128k --dataalignmentoffset 7s $vg $dev1 +check_pv_field_ $dev1 pe_start $pv_align +vgremove -f $vg +pvremove -f $dev1 + +# metadatatype +for i in 1 2 +do + vgcreate -M $i $vg $dev1 + check_vg_field_ $vg vg_fmt lvm$i + vgremove -f $vg + pvremove -f $dev1 +done From wysochanski@sourceware.org Mon Oct 5 20:04:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:04:00 -0000 Subject: LVM2/man vgcreate.8.in vgextend.8.in Message-ID: <20091005200421.29373.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:04:21 Modified files: man : vgcreate.8.in vgextend.8.in Log message: Update vgcreate and vgextend man pages to clarify implicit pvcreate. vgcreate and vgextend now implicitly call pvcreate on devices not currently initialized for LVM use. Previously these commands would fail with an error, so clarify the new behavior in the man page. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgcreate.8.in.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgextend.8.in.diff?cvsroot=lvm2&r1=1.2&r2=1.3 --- LVM2/man/vgcreate.8.in 2009/07/13 11:25:36 1.3 +++ LVM2/man/vgcreate.8.in 2009/10/05 20:04:21 1.4 @@ -21,16 +21,24 @@ .RB [ \-t | \-\-test ] .RB [ \-v | \-\-verbose ] .RB [ \-\-version ] -.I VolumeGroupName PhysicalVolumePath -.RI [ PhysicalVolumePath ...] +.RB [ PHYSICAL DEVICE OPTIONS ] +.I VolumeGroupName PhysicalDevicePath +.RI [ PhysicalDevicePath ...] .SH DESCRIPTION .B vgcreate creates a new volume group called .I VolumeGroupName -using the block special device -.IR PhysicalVolumePath -previously configured for LVM with -.BR pvcreate (8). +using the block special device \fIPhysicalDevicePath\fP. +.sp +If \fIPhysicalDevicePath\fP was not previously configured for LVM with +\fBpvcreate (8)\fP, the device will be initialized with the same +default values used with \fBpvcreate\fP. If non-default +\fPpvcreate\fP values are are desired, they may be given on the +commandline with the same options as \fPpvcreate\fP. See +\fBPHYSICAL DEVICE OPTIONS\fP for available options. Note +that the restore-related options such as --restorefile, --uuid, +and --physicalvolumesize are not available. If a restore operation +is needed, use \fBpvcreate (8)\fP and \fBvgcfgrestore (8)\fP. .SH OPTIONS See \fBlvm\fP for common options. .TP @@ -86,6 +94,25 @@ impact on I/O performance to the logical volume. The smallest PE is 1KB. The 2.4 kernel has a limitation of 2TB per block device. +.SH PHYSICAL DEVICE OPTIONS +The following options are available for initializing physical devices in the +volume group. These options are further described in the pvcreate man page. +.TP +.BR \-f ", " \-\-force +.TP +.BR \-y ", " \-\-yes +.TP +.BR \-Z ", " \-\-zero " y|n" +.TP +.BR \-\-labelsector " sector" +.TP +.BR \-\-metadatasize " size" +.TP +.BR \-\-metadatacopies " copies" +.TP +.BR \-\-dataalignment " alignment" +.TP +.BR \-\-dataalignmentoffset " alignment_offset" .SH EXAMPLES To create a volume group named .B test_vg --- LVM2/man/vgextend.8.in 2008/11/12 15:01:36 1.2 +++ LVM2/man/vgextend.8.in 2009/10/05 20:04:21 1.3 @@ -6,13 +6,47 @@ [\-A|\-\-autobackup y|n] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-t|\-\-test] [\-v|\-\-verbose] +.RB [ PHYSICAL DEVICE OPTIONS ] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] .SH DESCRIPTION vgextend allows you to add one or more initialized physical volumes ( see .B pvcreate(8) ) to an existing volume group to extend it in size. +.sp +If \fIPhysicalDevicePath\fP was not previously configured for LVM with +\fBpvcreate (8)\fP, the device will be initialized with the same +default values used with \fBpvcreate\fP. If non-default +\fPpvcreate\fP values are are desired, they may be given on the +commandline with the same options as \fPpvcreate\fP. See +\fBPHYSICAL DEVICE OPTIONS\fP for available options. Note +that the restore-related options such as --restorefile, --uuid, +and --physicalvolumesize are not available. If a restore operation +is needed, use \fBpvcreate (8)\fP and \fBvgcfgrestore (8)\fP. +\fBpvcreate (8)\fP, the device will be initialized with the same +default values used with \fBpvcreate\fP. If non-default +\fPpvcreate\fP values are are desired, \fBpvcreate\fP should be explicitly +called prior to calling \fBvgcreate\fP. .SH OPTIONS See \fBlvm\fP for common options. +.SH PHYSICAL DEVICE OPTIONS +The following options are available for initializing physical devices in the +volume group. These options are further described in the pvcreate man page. +.TP +.BR \-f ", " \-\-force +.TP +.BR \-y ", " \-\-yes +.TP +.BR \-Z ", " \-\-zero " y|n" +.TP +.BR \-\-labelsector " sector" +.TP +.BR \-\-metadatasize " size" +.TP +.BR \-\-metadatacopies " copies" +.TP +.BR \-\-dataalignment " alignment" +.TP +.BR \-\-dataalignmentoffset " alignment_offset" .SH Examples "vgextend vg00 /dev/sda4 /dev/sdn1" tries to extend the existing volume group "vg00" by the new physical volumes (see From wysochanski@sourceware.org Mon Oct 5 20:23:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:23:00 -0000 Subject: LVM2/tools commands.h Message-ID: <20091005202259.29250.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:22:59 Modified files: tools : commands.h Log message: Update help messages for vgextend / vgcreate to mention PHYSICAL DEVICE OPTIONS. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/commands.h.diff?cvsroot=lvm2&r1=1.132&r2=1.133 --- LVM2/tools/commands.h 2009/10/05 20:04:08 1.132 +++ LVM2/tools/commands.h 2009/10/05 20:22:58 1.133 @@ -754,7 +754,8 @@ "\t[-t|--test] " "\n" "\t[-v|--verbose]" "\n" "\t[--version] " "\n" - "\tVolumeGroupName PhysicalVolume [PhysicalVolume...]\n", + "\t[ PHYSICAL DEVICE OPTIONS ] " "\n" + "\tVolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]\n", addtag_ARG, alloc_ARG, autobackup_ARG, clustered_ARG, maxlogicalvolumes_ARG, maxphysicalvolumes_ARG, metadatatype_ARG, physicalextentsize_ARG, test_ARG, @@ -820,6 +821,7 @@ "\t[-t|--test]\n" "\t[-v|--verbose]\n" "\t[--version]" "\n" + "\t[ PHYSICAL DEVICE OPTIONS ] " "\n" "\tVolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]\n", autobackup_ARG, test_ARG, From wysochanski@sourceware.org Mon Oct 5 20:53:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:53:00 -0000 Subject: LVM2/test t-vgextend-usage.sh Message-ID: <20091005205342.11080.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:53:41 Added files: test : t-vgextend-usage.sh Log message: Add --pvmetadatacopies as a synonym for --metadatacopies in various commands. Going forward, we would like to allow users to specify the total number of metadatacopies in a VG rather than on a per-PV basis. In order to facilitate that, introduce --pvmetadatacopes to replace --metadatacopies everywhere. We still allow --metadatacopies for pv commands, but require --pvmetadatacopies for vg commands. Eventually we will introduce --vgmetadatacopies. Once we do that, we should either deprecate --metadatacopies or make it a synonym based on the command (pvmetadatacopies for pv commands, and vgmetadatacopies for vg commands). The latter option would likely just require a simple 'strncpy' check against cmd->command->name to qualify the merge_synonym call. Update nightly tests to cover the pvmetadatacopies synonym. Note that this patch is the result of an eariler review comment for the implicit pvcreate patches. Should apply cleanly on top of the implicit pvcreate patches (I applied after patch 10/10 in that series). NOTE: This patch will require --pvmetadatacopies for vgconvert as --metadatacopies is no longer accepted. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgextend-usage.sh.diff?cvsroot=lvm2&r1=NONE&r2=1.1 /cvs/lvm2/LVM2/test/t-vgextend-usage.sh,v --> standard output revision 1.1 --- LVM2/test/t-vgextend-usage.sh +++ - 2009-10-05 20:53:42.159932000 +0000 @@ -0,0 +1,77 @@ +# Copyright (C) 2008 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions +# of the GNU General Public License v.2. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +# +# Exercise various vgextend commands +# + +. ./test-utils.sh + +aux prepare_devs 5 + +for mdatype in 1 2 +do + +# Explicit pvcreate +pvcreate -M$mdatype $dev1 $dev2 $dev3 $dev4 $dev5 +vgcreate -M$mdatype $vg1 $dev1 $dev2 +vgextend $vg1 $dev3 $dev4 $dev5 +vgremove -ff $vg1 + +# Implicit pvcreate +pvremove $dev1 $dev2 $dev3 $dev4 $dev5 +vgcreate -M$mdatype $vg1 $dev1 $dev2 +vgextend -M$mdatype $vg1 $dev3 $dev4 $dev5 +vgremove -ff $vg1 +pvremove $dev1 $dev2 $dev3 $dev4 $dev5 + +done + +# Implicit pvcreate tests, test pvcreate options on vgcreate +# --force, --yes, --metadata{size|copies|type}, --zero +# --dataalignment[offset] +vgcreate $vg $dev2 +vgextend --force --yes --zero y $vg $dev1 +vgreduce $vg $dev1 +pvremove -f $dev1 + +for i in 0 1 2 3 +do +# vgcreate (lvm2) succeeds writing LVM label at sector $i + vgextend --labelsector $i $vg $dev1 + dd if=$dev1 bs=512 skip=$i count=1 2>/dev/null | strings | grep -q LABELONE; + vgreduce $vg $dev1 + pvremove -f $dev1 +done + +# metadatacopies +for i in 0 1 2 +do + vgextend --metadatacopies $i $vg $dev1 + check_pv_field_ $dev1 pv_mda_count $i + vgreduce $vg $dev1 + pvremove -f $dev1 +done + +# metadatasize, dataalignment, dataalignmentoffset +#COMM 'pvcreate sets data offset next to mda area' +vgextend --metadatasize 100k --dataalignment 100k $vg $dev1 +check_pv_field_ $dev1 pe_start 200.00k +vgreduce $vg $dev1 +pvremove -f $dev1 + +# data area is aligned to 64k by default, +# data area start is shifted by the specified alignment_offset +pv_align="195.50k" +vgextend --metadatasize 128k --dataalignmentoffset 7s $vg $dev1 +check_pv_field_ $dev1 pe_start $pv_align +vgremove -f $vg +pvremove -f $dev1 + From wysochanski@sourceware.org Mon Oct 5 20:55:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 05 Oct 2009 20:55:00 -0000 Subject: LVM2 ./WHATS_NEW man/pvcreate.8.in man/vgchang ... Message-ID: <20091005205559.12017.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-05 20:55:57 Modified files: . : WHATS_NEW man : pvcreate.8.in vgchange.8.in vgconvert.8.in vgcreate.8.in vgextend.8.in test : t-pvcreate-usage.sh t-vgcreate-usage.sh t-vgextend-usage.sh tools : args.h commands.h lvmcmdline.c toollib.c vgconvert.c vgcreate.c vgextend.c Log message: Add --pvmetadatacopies as a synonym for --metadatacopies in various commands. Going forward, we would like to allow users to specify the total number of metadatacopies in a VG rather than on a per-PV basis. In order to facilitate that, introduce --pvmetadatacopes to replace --metadatacopies everywhere. We still allow --metadatacopies for pv commands, but require --pvmetadatacopies for vg commands. Eventually we will introduce --vgmetadatacopies. Once we do that, we should either deprecate --metadatacopies or make it a synonym based on the command (pvmetadatacopies for pv commands, and vgmetadatacopies for vg commands). The latter option would likely just require a simple 'strncpy' check against cmd->command->name to qualify the merge_synonym call. Update nightly tests to cover the pvmetadatacopies synonym. Note that this patch is the result of an eariler review comment for the implicit pvcreate patches. Should apply cleanly on top of the implicit pvcreate patches (I applied after patch 10/10 in that series). NOTE: This patch will require --pvmetadatacopies for vgconvert as --metadatacopies is no longer accepted. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1291&r2=1.1292 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/pvcreate.8.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgchange.8.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgconvert.8.in.diff?cvsroot=lvm2&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgcreate.8.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgextend.8.in.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-pvcreate-usage.sh.diff?cvsroot=lvm2&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgcreate-usage.sh.diff?cvsroot=lvm2&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgextend-usage.sh.diff?cvsroot=lvm2&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/args.h.diff?cvsroot=lvm2&r1=1.67&r2=1.68 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/commands.h.diff?cvsroot=lvm2&r1=1.133&r2=1.134 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvmcmdline.c.diff?cvsroot=lvm2&r1=1.106&r2=1.107 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.c.diff?cvsroot=lvm2&r1=1.173&r2=1.174 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgconvert.c.diff?cvsroot=lvm2&r1=1.40&r2=1.41 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.69&r2=1.70 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgextend.c.diff?cvsroot=lvm2&r1=1.53&r2=1.54 --- LVM2/WHATS_NEW 2009/10/05 20:04:40 1.1291 +++ LVM2/WHATS_NEW 2009/10/05 20:55:56 1.1292 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Add --pvmetadatacopies for pvcreate, vgcreate, vgextend, vgconvert. Add implict pvcreate support to vgcreate and vgextend. Correct example.conf to indicate that lvm2 not lvm1 is the default format. Remove an unused stray LVM1_SUPPORT ifdef. --- LVM2/man/pvcreate.8.in 2009/07/30 17:45:29 1.4 +++ LVM2/man/pvcreate.8.in 2009/10/05 20:55:57 1.5 @@ -11,7 +11,7 @@ .RB [ \-v | \-\-verbose ] .RB [ \-\-labelsector ] .RB [ \-M | \-\-metadatatype type ] -.RB [ \-\-metadatacopies #copies ] +.RB [ \-\-[pv]metadatacopies #copies ] .RB [ \-\-metadatasize size ] .RB [ \-\-dataalignment alignment ] .RB [ \-\-dataalignmentoffset alignment_offset ] @@ -105,7 +105,7 @@ .BR \-\-dataalignmentoffset " alignment_offset" Shift the start of the data area by this additional \fBalignment_offset\fP. .TP -.BR \-\-metadatacopies " copies" +.BR \-\-[pv]metadatacopies " copies" The number of metadata areas to set aside on each PV. Currently this can be 0, 1 or 2. If set to 2, two copies of the volume group metadata --- LVM2/man/vgchange.8.in 2009/08/04 08:09:52 1.4 +++ LVM2/man/vgchange.8.in 2009/10/05 20:55:57 1.5 @@ -113,7 +113,7 @@ If you have a large number of physical volumes in a volume group with metadata in lvm2 format, for tool performance reasons, you should consider -some use of \fB--metadatacopies 0\fP +some use of \fB--pvmetadatacopies 0\fP as described in \fBpvcreate(8)\fP. .TP .BR \-s ", " \-\-physicalextentsize " " \fIPhysicalExtentSize\fR[\fBbBsSkKmMgGtTpPeE\fR] --- LVM2/man/vgconvert.8.in 2008/10/08 12:50:13 1.1 +++ LVM2/man/vgconvert.8.in 2009/10/05 20:55:57 1.2 @@ -9,7 +9,7 @@ .RB [ \-v | \-\-verbose ] .RB [ \-\-labelsector ] .RB [ \-M | \-\-metadatatype type ] -.RB [ \-\-metadatacopies #copies ] +.RB [ \-\-pvmetadatacopies #copies ] .RB [ \-\-metadatasize size ] .RB [ \-\-version ] .IR VolumeGroupName " [" VolumeGroupName ...] --- LVM2/man/vgcreate.8.in 2009/10/05 20:04:21 1.4 +++ LVM2/man/vgcreate.8.in 2009/10/05 20:55:57 1.5 @@ -71,7 +71,7 @@ If you have a large number of physical volumes in a volume group with metadata in lvm2 format, for tool performance reasons, you should consider -some use of \fB--metadatacopies 0\fP +some use of \fB--pvmetadatacopies 0\fP as described in \fBpvcreate(8)\fP. .TP .BR \-s ", " \-\-physicalextentsize " " \fIPhysicalExtentSize\fR[\fBbBsSkKmMgGtTpPeE\fR] @@ -108,7 +108,7 @@ .TP .BR \-\-metadatasize " size" .TP -.BR \-\-metadatacopies " copies" +.BR \-\-pvmetadatacopies " copies" .TP .BR \-\-dataalignment " alignment" .TP --- LVM2/man/vgextend.8.in 2009/10/05 20:04:21 1.3 +++ LVM2/man/vgextend.8.in 2009/10/05 20:55:57 1.4 @@ -42,7 +42,7 @@ .TP .BR \-\-metadatasize " size" .TP -.BR \-\-metadatacopies " copies" +.BR \-\-pvmetadatacopies " copies" .TP .BR \-\-dataalignment " alignment" .TP --- LVM2/test/t-pvcreate-usage.sh 2009/09/30 16:13:53 1.13 +++ LVM2/test/t-pvcreate-usage.sh 2009/10/05 20:55:57 1.14 @@ -46,15 +46,18 @@ not pvcreate --metadatacopies -1 $dev1 #COMM 'pvcreate accepts metadatacopies = 0, 1, 2' -pvcreate --metadatacopies 0 $dev1 -pvcreate --metadatacopies 1 $dev2 -pvcreate --metadatacopies 2 $dev3 -check_pv_field_ $dev1 pv_mda_count 0 -check_pv_field_ $dev2 pv_mda_count 1 -check_pv_field_ $dev3 pv_mda_count 2 +for j in metadatacopies pvmetadatacopies +do +pvcreate --$j 0 $dev1 +pvcreate --$j 1 $dev2 +pvcreate --$j 2 $dev3 +check_pv_field_ $dev1 pv_mda_count 0 +check_pv_field_ $dev2 pv_mda_count 1 +check_pv_field_ $dev3 pv_mda_count 2 pvremove $dev1 pvremove $dev2 pvremove $dev3 +done #COMM 'pvcreate rejects metadatacopies > 2' not pvcreate --metadatacopies 3 $dev1 --- LVM2/test/t-vgcreate-usage.sh 2009/10/05 20:04:40 1.11 +++ LVM2/test/t-vgcreate-usage.sh 2009/10/05 20:55:57 1.12 @@ -105,17 +105,17 @@ pvremove -f $dev1 done -# metadatacopies +# pvmetadatacopies for i in 1 2 do - vgcreate --metadatacopies $i $vg $dev1 + vgcreate --pvmetadatacopies $i $vg $dev1 check_pv_field_ $dev1 pv_mda_count $i vgremove -f $vg pvremove -f $dev1 done not vgcreate --metadatacopies 0 $vg $dev1 pvcreate --metadatacopies 1 $dev2 -vgcreate --metadatacopies 0 $vg $dev1 $dev2 +vgcreate --pvmetadatacopies 0 $vg $dev1 $dev2 check_pv_field_ $dev1 pv_mda_count 0 check_pv_field_ $dev2 pv_mda_count 1 vgremove -f $vg --- LVM2/test/t-vgextend-usage.sh 2009/10/05 20:53:41 1.1 +++ LVM2/test/t-vgextend-usage.sh 2009/10/05 20:55:57 1.2 @@ -51,10 +51,10 @@ pvremove -f $dev1 done -# metadatacopies +# pvmetadatacopies for i in 0 1 2 do - vgextend --metadatacopies $i $vg $dev1 + vgextend --pvmetadatacopies $i $vg $dev1 check_pv_field_ $dev1 pv_mda_count $i vgreduce $vg $dev1 pvremove -f $dev1 --- LVM2/tools/args.h 2009/08/04 15:53:04 1.67 +++ LVM2/tools/args.h 2009/10/05 20:55:57 1.68 @@ -23,6 +23,7 @@ arg(physicalvolumesize_ARG, '\0', "setphysicalvolumesize", size_mb_arg, 0) arg(ignorelockingfailure_ARG, '\0', "ignorelockingfailure", NULL, 0) arg(nolocking_ARG, '\0', "nolocking", NULL, 0) +arg(pvmetadatacopies_ARG, '\0', "pvmetadatacopies", int_arg, 0) arg(metadatacopies_ARG, '\0', "metadatacopies", int_arg, 0) arg(metadatasize_ARG, '\0', "metadatasize", size_mb_arg, 0) arg(restorefile_ARG, '\0', "restorefile", string_arg, 0) --- LVM2/tools/commands.h 2009/10/05 20:22:58 1.133 +++ LVM2/tools/commands.h 2009/10/05 20:55:57 1.134 @@ -479,7 +479,7 @@ "\t[-h|-?|--help] " "\n" "\t[--labelsector sector] " "\n" "\t[-M|--metadatatype 1|2]" "\n" - "\t[--metadatacopies #copies]" "\n" + "\t[--pvmetadatacopies #copies]" "\n" "\t[--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]]" "\n" "\t[--dataalignment Alignment[bBsSkKmMgGtTpPeE]]" "\n" "\t[--dataalignmentoffset AlignmentOffset[bBsSkKmMgGtTpPeE]]" "\n" @@ -493,8 +493,9 @@ "\tPhysicalVolume [PhysicalVolume...]\n", dataalignment_ARG, dataalignmentoffset_ARG, force_ARG, test_ARG, - labelsector_ARG, metadatatype_ARG, metadatacopies_ARG, metadatasize_ARG, - physicalvolumesize_ARG, restorefile_ARG, uuidstr_ARG, yes_ARG, zero_ARG) + labelsector_ARG, metadatatype_ARG, metadatacopies_ARG, pvmetadatacopies_ARG, + metadatasize_ARG, physicalvolumesize_ARG, restorefile_ARG, uuidstr_ARG, + yes_ARG, zero_ARG) xx(pvdata, "Display the on-disk metadata for physical volume(s)", @@ -727,7 +728,7 @@ "\t[-h|--help] " "\n" "\t[--labelsector sector] " "\n" "\t[-M|--metadatatype 1|2]" "\n" - "\t[--metadatacopies #copies]" "\n" + "\t[--pvmetadatacopies #copies]" "\n" "\t[--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]]" "\n" "\t[-t|--test] " "\n" "\t[-v|--verbose] " "\n" @@ -735,7 +736,7 @@ "\tVolumeGroupName [VolumeGroupName...]\n", force_ARG, test_ARG, labelsector_ARG, metadatatype_ARG, metadatacopies_ARG, - metadatasize_ARG ) + pvmetadatacopies_ARG, metadatasize_ARG ) xx(vgcreate, "Create a volume group", @@ -760,7 +761,8 @@ addtag_ARG, alloc_ARG, autobackup_ARG, clustered_ARG, maxlogicalvolumes_ARG, maxphysicalvolumes_ARG, metadatatype_ARG, physicalextentsize_ARG, test_ARG, force_ARG, yes_ARG, zero_ARG, labelsector_ARG, metadatasize_ARG, - metadatacopies_ARG, dataalignment_ARG, dataalignmentoffset_ARG) + pvmetadatacopies_ARG, metadatacopies_ARG, dataalignment_ARG, + dataalignmentoffset_ARG) xx(vgdisplay, "Display volume group information", @@ -826,8 +828,8 @@ autobackup_ARG, test_ARG, force_ARG, yes_ARG, zero_ARG, labelsector_ARG, metadatatype_ARG, - metadatasize_ARG, metadatacopies_ARG, dataalignment_ARG, - dataalignmentoffset_ARG) + metadatasize_ARG, pvmetadatacopies_ARG, metadatacopies_ARG, + dataalignment_ARG, dataalignmentoffset_ARG) xx(vgimport, "Register exported volume group with system", --- LVM2/tools/lvmcmdline.c 2009/09/14 22:47:49 1.106 +++ LVM2/tools/lvmcmdline.c 2009/10/05 20:55:57 1.107 @@ -837,7 +837,8 @@ if (!_merge_synonym(cmd, resizable_ARG, resizeable_ARG) || !_merge_synonym(cmd, allocation_ARG, allocatable_ARG) || !_merge_synonym(cmd, allocation_ARG, resizeable_ARG) || - !_merge_synonym(cmd, virtualoriginsize_ARG, virtualsize_ARG)) + !_merge_synonym(cmd, virtualoriginsize_ARG, virtualsize_ARG) || + !_merge_synonym(cmd, metadatacopies_ARG, pvmetadatacopies_ARG)) return EINVALID_CMD_LINE; /* Zero indicates success */ --- LVM2/tools/toollib.c 2009/10/05 20:03:54 1.173 +++ LVM2/tools/toollib.c 2009/10/05 20:55:57 1.174 @@ -1305,7 +1305,7 @@ } if (!(cmd->fmt->features & FMT_MDAS) && - (arg_count(cmd, metadatacopies_ARG) || + (arg_count(cmd, pvmetadatacopies_ARG) || arg_count(cmd, metadatasize_ARG) || arg_count(cmd, dataalignment_ARG) || arg_count(cmd, dataalignmentoffset_ARG))) { @@ -1314,8 +1314,8 @@ return 0; } - if (arg_count(cmd, metadatacopies_ARG) && - arg_int_value(cmd, metadatacopies_ARG, -1) > 2) { + if (arg_count(cmd, pvmetadatacopies_ARG) && + arg_int_value(cmd, pvmetadatacopies_ARG, -1) > 2) { log_error("Metadatacopies may only be 0, 1 or 2"); return 0; } @@ -1371,7 +1371,7 @@ "metadata/pvmetadatasize", DEFAULT_PVMETADATASIZE); - pp->pvmetadatacopies = arg_int_value(cmd, metadatacopies_ARG, -1); + pp->pvmetadatacopies = arg_int_value(cmd, pvmetadatacopies_ARG, -1); if (pp->pvmetadatacopies < 0) pp->pvmetadatacopies = find_config_tree_int(cmd, "metadata/pvmetadatacopies", --- LVM2/tools/vgconvert.c 2009/09/15 01:38:59 1.40 +++ LVM2/tools/vgconvert.c 2009/10/05 20:55:57 1.41 @@ -57,7 +57,7 @@ "metadata/pvmetadatasize", DEFAULT_PVMETADATASIZE); - pvmetadatacopies = arg_int_value(cmd, metadatacopies_ARG, -1); + pvmetadatacopies = arg_int_value(cmd, pvmetadatacopies_ARG, -1); if (pvmetadatacopies < 0) pvmetadatacopies = find_config_tree_int(cmd, @@ -211,15 +211,20 @@ return EINVALID_CMD_LINE; } + if (arg_count(cmd, metadatacopies_ARG)) { + log_error("Invalid option --metadatacopies, " + "use --pvmetadatacopies instead."); + return EINVALID_CMD_LINE; + } if (!(cmd->fmt->features & FMT_MDAS) && - (arg_count(cmd, metadatacopies_ARG) || + (arg_count(cmd, pvmetadatacopies_ARG) || arg_count(cmd, metadatasize_ARG))) { log_error("Metadata parameters only apply to text format"); return EINVALID_CMD_LINE; } - if (arg_count(cmd, metadatacopies_ARG) && - arg_int_value(cmd, metadatacopies_ARG, -1) > 2) { + if (arg_count(cmd, pvmetadatacopies_ARG) && + arg_int_value(cmd, pvmetadatacopies_ARG, -1) > 2) { log_error("Metadatacopies may only be 0, 1 or 2"); return EINVALID_CMD_LINE; } --- LVM2/tools/vgcreate.c 2009/10/05 20:04:08 1.69 +++ LVM2/tools/vgcreate.c 2009/10/05 20:55:57 1.70 @@ -35,6 +35,11 @@ argc--; argv++; + if (arg_count(cmd, metadatacopies_ARG)) { + log_error("Invalid option --metadatacopies, " + "use --pvmetadatacopies instead."); + return EINVALID_CMD_LINE; + } fill_default_pvcreate_params(&pp); if (!pvcreate_validate_params(cmd, argc, argv, &pp)) { return EINVALID_CMD_LINE; --- LVM2/tools/vgextend.c 2009/10/05 20:04:08 1.53 +++ LVM2/tools/vgextend.c 2009/10/05 20:55:57 1.54 @@ -32,6 +32,11 @@ argc--; argv++; + if (arg_count(cmd, metadatacopies_ARG)) { + log_error("Invalid option --metadatacopies, " + "use --pvmetadatacopies instead."); + return EINVALID_CMD_LINE; + } fill_default_pvcreate_params(&pp); if (!pvcreate_validate_params(cmd, argc, argv, &pp)) { return EINVALID_CMD_LINE; From wysochanski@sourceware.org Tue Oct 6 16:00:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Tue, 06 Oct 2009 16:00:00 -0000 Subject: LVM2 lib/metadata/metadata.c tools/toollib.c Message-ID: <20091006160039.28847.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-06 16:00:38 Modified files: lib/metadata : metadata.c tools : toollib.c Log message: Cleanup comment and some whitespace. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.289&r2=1.290 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.c.diff?cvsroot=lvm2&r1=1.174&r2=1.175 --- LVM2/lib/metadata/metadata.c 2009/10/05 20:03:25 1.289 +++ LVM2/lib/metadata/metadata.c 2009/10/06 16:00:38 1.290 @@ -67,7 +67,7 @@ if (data_alignment) pv->pe_align = data_alignment; - else + else pv->pe_align = MAX(65536UL, lvm_getpagesize()) >> SECTOR_SHIFT; if (!pv->dev) @@ -1292,18 +1292,19 @@ } /* - * pvcreate_single() - initialize a device with PV label and metadata + * pvcreate_single() - initialize a device with PV label and metadata area * * Parameters: * - pv_name: device path to initialize - * - handle: options to pass to pv_create; NULL indicates use defaults + * - pp: parameters to pass to pv_create; if NULL, use default values * * Returns: * NULL: error * struct physical_volume * (non-NULL): handle to physical volume created */ -struct physical_volume * pvcreate_single(struct cmd_context *cmd, const char *pv_name, - struct pvcreate_params *pp) +struct physical_volume * pvcreate_single(struct cmd_context *cmd, + const char *pv_name, + struct pvcreate_params *pp) { void *pv; struct device *dev; --- LVM2/tools/toollib.c 2009/10/05 20:55:57 1.174 +++ LVM2/tools/toollib.c 2009/10/06 16:00:38 1.175 @@ -1021,7 +1021,7 @@ new_pvl = pvl2; break; } - + if (!new_pvl) { if (!(new_pvl = dm_pool_alloc(mem, sizeof(*new_pvl)))) { log_error("Unable to allocate physical volume list."); @@ -1239,12 +1239,12 @@ { struct lv_list *lvl; int r = 1; - + dm_list_iterate_items(lvl, &vg->lvs) if (lv_is_visible(lvl->lv)) if (!lv_refresh(cmd, lvl->lv)) r = 0; - + return r; } From agk@sourceware.org Fri Oct 9 15:55:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Fri, 09 Oct 2009 15:55:00 -0000 Subject: LVM2 make.tmpl.in Message-ID: <20091009155533.1886.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-09 15:55:32 Modified files: . : make.tmpl.in Log message: linking parms missing from o->so conversion. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/make.tmpl.in.diff?cvsroot=lvm2&r1=1.72&r2=1.73 --- LVM2/make.tmpl.in 2009/10/02 19:10:32 1.72 +++ LVM2/make.tmpl.in 2009/10/09 15:55:31 1.73 @@ -204,7 +204,7 @@ $(DEFS) $(CFLAGS) $< > $@ %.so: %.o - $(CC) -c $(INCLUDES) $(DEFS) $(CFLAGS) $< -o $@ + $(CC) -c $(INCLUDES) $(DEFS) $(CFLAGS) $(CLDFLAGS) $< $(LIBS) -o $@ ifeq ("@LIB_SUFFIX@","so") $(LIB_SHARED): $(OBJECTS) $(LDDEPS) From agk@sourceware.org Fri Oct 9 16:04:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Fri, 09 Oct 2009 16:04:00 -0000 Subject: LVM2/daemons/dmeventd/plugins mirror/Makefile. ... Message-ID: <20091009160455.30336.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-09 16:04:54 Modified files: daemons/dmeventd/plugins/mirror: Makefile.in daemons/dmeventd/plugins/snapshot: Makefile.in Log message: Extra libs must be appended, not defined first. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/mirror/Makefile.in.diff?cvsroot=lvm2&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in.diff?cvsroot=lvm2&r1=1.7&r2=1.8 --- LVM2/daemons/dmeventd/plugins/mirror/Makefile.in 2009/10/05 13:46:01 1.11 +++ LVM2/daemons/dmeventd/plugins/mirror/Makefile.in 2009/10/09 16:04:54 1.12 @@ -19,7 +19,6 @@ INCLUDES += -I${top_srcdir}/tools CLDFLAGS += -L${top_builddir}/tools -LIBS += -ldevmapper @LIB_PTHREAD@ @LVM2CMD_LIB@ SOURCES = dmeventd_mirror.c @@ -33,6 +32,8 @@ include $(top_builddir)/make.tmpl +LIBS += -ldevmapper @LIB_PTHREAD@ @LVM2CMD_LIB@ + install_lvm2: libdevmapper-event-lvm2mirror.$(LIB_SUFFIX) $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ $(libdir)/$<.$(LIB_VERSION) --- LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in 2009/10/05 13:46:02 1.7 +++ LVM2/daemons/dmeventd/plugins/snapshot/Makefile.in 2009/10/09 16:04:54 1.8 @@ -19,7 +19,6 @@ INCLUDES += -I${top_srcdir}/tools CLDFLAGS += -L${top_builddir}/tools -LIBS += -ldevmapper @LIB_PTHREAD@ @LVM2CMD_LIB@ SOURCES = dmeventd_snapshot.c @@ -33,6 +32,8 @@ include $(top_builddir)/make.tmpl +LIBS += -ldevmapper @LIB_PTHREAD@ @LVM2CMD_LIB@ + install_lvm2: libdevmapper-event-lvm2snapshot.$(LIB_SUFFIX) $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ $(libdir)/$<.$(LIB_VERSION) From fabbione@sourceware.org Mon Oct 12 04:06:00 2009 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 12 Oct 2009 04:06:00 -0000 Subject: LVM2 ./WHATS_NEW_DM lib/activate/fs.c libdm/li ... Message-ID: <20091012040643.16710.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: fabbione@sourceware.org 2009-10-12 04:06:42 Modified files: . : WHATS_NEW_DM lib/activate : fs.c libdm : libdm-common.c Log message: Merge Debian patch 05 debian: keep libdm-abi consistent. This appears to be the only user visible feature that can change libdm ABI at build time. Thanks to Bastian Blank for the patch. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.304&r2=1.305 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/fs.c.diff?cvsroot=lvm2&r1=1.48&r2=1.49 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.c.diff?cvsroot=lvm2&r1=1.85&r2=1.86 --- LVM2/WHATS_NEW_DM 2009/09/26 00:42:47 1.304 +++ LVM2/WHATS_NEW_DM 2009/10/12 04:06:42 1.305 @@ -1,5 +1,6 @@ Version 1.02.39 - ===================================== + Make libdm ABI consistent when built with/without selinux support. Version 1.02.38 - 25th September 2009 ===================================== --- LVM2/lib/activate/fs.c 2009/09/25 11:58:00 1.48 +++ LVM2/lib/activate/fs.c 2009/10/12 04:06:42 1.49 @@ -201,10 +201,8 @@ return 0; } -#ifdef HAVE_SELINUX if (!dm_set_selinux_context(lv_path, S_IFLNK)) return_0; -#endif return 1; } --- LVM2/libdm/libdm-common.c 2009/09/25 19:06:05 1.85 +++ LVM2/libdm/libdm-common.c 2009/10/12 04:06:42 1.86 @@ -373,9 +373,9 @@ return 1; } -#ifdef HAVE_SELINUX int dm_set_selinux_context(const char *path, mode_t mode) { +#ifdef HAVE_SELINUX security_context_t scontext; if (is_selinux_enabled() <= 0) @@ -396,9 +396,9 @@ } freecon(scontext); +#endif return 1; } -#endif static int _add_dev_node(const char *dev_name, uint32_t major, uint32_t minor, uid_t uid, gid_t gid, mode_t mode) @@ -445,10 +445,8 @@ log_debug("Created %s", path); -#ifdef HAVE_SELINUX if (!dm_set_selinux_context(path, S_IFBLK)) return 0; -#endif return 1; } From ccaulfield@sourceware.org Mon Oct 12 08:33:00 2009 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Mon, 12 Oct 2009 08:33:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/clvmd.c Message-ID: <20091012083331.20044.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: ccaulfield@sourceware.org 2009-10-12 08:33:30 Modified files: . : WHATS_NEW daemons/clvmd : clvmd.c Log message: Make clvmd return 0 on success rather than 1. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1292&r2=1.1293 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/clvmd.c.diff?cvsroot=lvm2&r1=1.61&r2=1.62 --- LVM2/WHATS_NEW 2009/10/05 20:55:56 1.1292 +++ LVM2/WHATS_NEW 2009/10/12 08:33:30 1.1293 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Make clvmd return 0 on success rather than 1. Add --pvmetadatacopies for pvcreate, vgcreate, vgextend, vgconvert. Add implict pvcreate support to vgcreate and vgextend. Correct example.conf to indicate that lvm2 not lvm1 is the default format. --- LVM2/daemons/clvmd/clvmd.c 2009/09/01 09:48:01 1.61 +++ LVM2/daemons/clvmd/clvmd.c 2009/10/12 08:33:30 1.62 @@ -303,7 +303,7 @@ exit(0); case 'R': - return refresh_clvmd(); + return refresh_clvmd()==1?0:1; case 'C': clusterwide_opt = 1; @@ -354,7 +354,7 @@ /* Sending to stderr makes no sense for a detached daemon */ if (debug == DEBUG_STDERR) debug = DEBUG_SYSLOG; - return debug_clvmd(debug, clusterwide_opt); + return debug_clvmd(debug, clusterwide_opt)==1?0:1; } /* Fork into the background (unless requested not to) */ From fabbione@sourceware.org Mon Oct 12 16:59:00 2009 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 12 Oct 2009 16:59:00 -0000 Subject: LVM2 ./WHATS_NEW ./configure ./configure.in li ... Message-ID: <20091012165921.21424.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: fabbione@sourceware.org 2009-10-12 16:59:20 Modified files: . : WHATS_NEW configure configure.in lib : Makefile.in Log message: Disable realtime support by default. This code is used only in a under development feature and it's not used anywhere in the tree. Allow to build it conditionally. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1293&r2=1.1294 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.diff?cvsroot=lvm2&r1=1.110&r2=1.111 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.in.diff?cvsroot=lvm2&r1=1.118&r2=1.119 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/Makefile.in.diff?cvsroot=lvm2&r1=1.94&r2=1.95 --- LVM2/WHATS_NEW 2009/10/12 08:33:30 1.1293 +++ LVM2/WHATS_NEW 2009/10/12 16:59:20 1.1294 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Disable realtime support code by default. Make clvmd return 0 on success rather than 1. Add --pvmetadatacopies for pvcreate, vgcreate, vgextend, vgconvert. Add implict pvcreate support to vgcreate and vgextend. --- LVM2/configure 2009/10/05 12:11:30 1.110 +++ LVM2/configure 2009/10/12 16:59:20 1.111 @@ -1508,7 +1508,7 @@ --enable-lvm1_fallback Use this to fall back and use LVM1 binaries if device-mapper is missing from the kernel --disable-readline Disable readline support - --disable-realtime Disable realtime clock support + --enable-realtime Enable realtime clock support --enable-cmirrord Enable the cluster mirror log daemon --enable-debug Enable debugging --enable-profiling Gather gcov profiling data @@ -2226,7 +2226,6 @@ ODIRECT=yes DM_IOCTLS=yes SELINUX=yes - REALTIME=yes CLUSTER=internal FSADM=yes ;; @@ -2241,7 +2240,6 @@ ODIRECT=no DM_IOCTLS=no SELINUX=no - REALTIME=no CLUSTER=none FSADM=no ;; --- LVM2/configure.in 2009/10/05 12:11:30 1.118 +++ LVM2/configure.in 2009/10/12 16:59:20 1.119 @@ -40,7 +40,6 @@ ODIRECT=yes DM_IOCTLS=yes SELINUX=yes - REALTIME=yes CLUSTER=internal FSADM=yes ;; @@ -55,7 +54,6 @@ ODIRECT=no DM_IOCTLS=no SELINUX=no - REALTIME=no CLUSTER=none FSADM=no ;; @@ -318,7 +316,7 @@ ################################################################################ dnl -- Disable realtime clock support AC_MSG_CHECKING(whether to enable realtime support) -AC_ARG_ENABLE(realtime, [ --disable-realtime Disable realtime clock support], +AC_ARG_ENABLE(realtime, [ --enable-realtime Enable realtime clock support], REALTIME=$enableval) AC_MSG_RESULT($REALTIME) --- LVM2/lib/Makefile.in 2009/10/05 13:46:02 1.94 +++ LVM2/lib/Makefile.in 2009/10/12 16:59:20 1.95 @@ -82,7 +82,6 @@ misc/lvm-globals.c \ misc/lvm-string.c \ misc/lvm-wrappers.c \ - misc/timestamp.c \ misc/util.c \ mm/memlock.c \ report/report.c \ @@ -90,6 +89,11 @@ uuid/uuid.c \ zero/zero.c +ifeq ("@HAVE_REALTIME@", "yes") + SOURCES +=\ + misc/timestamp.c +endif + ifeq ("@LVM1@", "internal") SOURCES +=\ format1/disk-rep.c \ From agk@sourceware.org Tue Oct 13 01:31:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Tue, 13 Oct 2009 01:31:00 -0000 Subject: LVM2 daemons/dmeventd/Makefile.in tools/Makefi ... Message-ID: <20091013013111.23965.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-13 01:31:10 Modified files: daemons/dmeventd: Makefile.in tools : Makefile.in Log message: More build cleanups (linker parameter ordering). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/Makefile.in.diff?cvsroot=lvm2&r1=1.27&r2=1.28 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/Makefile.in.diff?cvsroot=lvm2&r1=1.101&r2=1.102 --- LVM2/daemons/dmeventd/Makefile.in 2009/10/05 13:46:01 1.27 +++ LVM2/daemons/dmeventd/Makefile.in 2009/10/13 01:31:10 1.28 @@ -45,8 +45,8 @@ LIBS += -ldl -ldevmapper -lpthread dmeventd: $(LIB_SHARED) $(VERSIONED_SHLIB) dmeventd.o - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ dmeventd.o \ - -L. -ldevmapper-event $(LIBS) -rdynamic + $(CC) $(CFLAGS) $(LDFLAGS) -L. -o $@ dmeventd.o \ + -ldevmapper-event $(LIBS) -rdynamic .PHONY: install_dynamic install_static install_include \ install_pkgconfig install_dmeventd --- LVM2/tools/Makefile.in 2009/10/05 13:46:03 1.101 +++ LVM2/tools/Makefile.in 2009/10/13 01:31:10 1.102 @@ -112,13 +112,12 @@ device-mapper: $(TARGETS_DM) dmsetup: dmsetup.o $(top_builddir)/libdm/libdevmapper.$(LIB_SUFFIX) - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ dmsetup.o \ - -L$(top_builddir)/libdm -ldevmapper $(LIBS) $(LIB_PTHREAD) + $(CC) $(CFLAGS) $(LDFLAGS) -L$(top_builddir)/libdm \ + -o $@ dmsetup.o -ldevmapper $(LIBS) $(LIB_PTHREAD) dmsetup.static: dmsetup.o $(interfacedir)/libdevmapper.a - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ dmsetup.o -static \ - -L$(interfacedir) -ldevmapper $(LIBS) \ - $(LIB_PTHREAD) + $(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacedir) \ + -o $@ dmsetup.o -ldevmapper $(LIBS) $(LIB_PTHREAD) all: device-mapper @@ -127,8 +126,9 @@ $(LVMLIBS) $(LIBS) $(LIB_PTHREAD) -rdynamic lvm.static: $(OBJECTS) lvm-static.o $(top_builddir)/lib/liblvm-internal.a $(interfacedir)/libdevmapper.a - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) lvm-static.o -static \ - -L$(interfacedir) $(LVMLIBS) $(LIBS) $(LIB_PTHREAD) -rdynamic + $(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacedir) -o $@ \ + $(OBJECTS) lvm-static.o $(LVMLIBS) $(LIBS) $(LIB_PTHREAD) \ + -rdynamic liblvm2cmd.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o cat $(top_builddir)/lib/liblvm-internal.a > $@ From agk@sourceware.org Tue Oct 13 02:35:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Tue, 13 Oct 2009 02:35:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/dmeventd/Makefile.in Message-ID: <20091013023527.1495.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-13 02:35:26 Modified files: . : WHATS_NEW daemons/dmeventd: Makefile.in Log message: Attempt to build dmeventd.static. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1294&r2=1.1295 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/Makefile.in.diff?cvsroot=lvm2&r1=1.28&r2=1.29 --- LVM2/WHATS_NEW 2009/10/12 16:59:20 1.1294 +++ LVM2/WHATS_NEW 2009/10/13 02:35:26 1.1295 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Add dmeventd.static to the build. Disable realtime support code by default. Make clvmd return 0 on success rather than 1. Add --pvmetadatacopies for pvcreate, vgcreate, vgextend, vgconvert. --- LVM2/daemons/dmeventd/Makefile.in 2009/10/13 01:31:10 1.28 +++ LVM2/daemons/dmeventd/Makefile.in 2009/10/13 02:35:26 1.29 @@ -17,10 +17,22 @@ VPATH = @srcdir@ SOURCES = libdevmapper-event.c +TARGETS = dmeventd + +.PHONY: install_lib_dynamic install_lib_static install_include \ + install_pkgconfig install_dmeventd_dynamic install_dmeventd_static \ + install_lib install_dmeventd + +INSTALL_DMEVENTD_TARGETS = install_dmeventd_dynamic +INSTALL_LIB_TARGETS = install_lib_dynamic ifeq ("@STATIC_LINK@", "yes") -LIB_STATIC = libdevmapper-event.a + LIB_STATIC = libdevmapper-event.a + TARGETS += dmeventd.static + INSTALL_DMEVENTD_TARGETS += install_dmeventd_static + INSTALL_LIB_TARGETS += install_lib_static endif + LIB_VERSION = $(LIB_VERSION_DM) ifeq ("@LIB_SUFFIX@","dylib") @@ -30,8 +42,7 @@ VERSIONED_SHLIB = $(LIB_SHARED).$(LIB_VERSION) endif -TARGETS = dmeventd -CLEAN_TARGETS = dmeventd.o +CLEAN_TARGETS = dmeventd.o dmeventd.static ifneq ($(MAKECMDGOALS),device-mapper) SUBDIRS+=plugins @@ -39,57 +50,60 @@ include ../../make.tmpl -all: dmeventd -device-mapper: dmeventd $(LIB_STATIC) +all: device-mapper +device-mapper: $(TARGETS) -LIBS += -ldl -ldevmapper -lpthread +LIBS += -ldl +LVMLIBS += -ldevmapper-event -lpthread -ldevmapper + +$(VERSIONED_SHLIB): $(LIB_SHARED) + $(RM) -f $@ + $(LN_S) $(LIB_SHARED) $@ dmeventd: $(LIB_SHARED) $(VERSIONED_SHLIB) dmeventd.o $(CC) $(CFLAGS) $(LDFLAGS) -L. -o $@ dmeventd.o \ - -ldevmapper-event $(LIBS) -rdynamic + $(LVMLIBS) $(LIBS) -rdynamic -.PHONY: install_dynamic install_static install_include \ - install_pkgconfig install_dmeventd - -INSTALL_TYPE = install_dynamic - -ifeq ("@STATIC_LINK@", "yes") - INSTALL_TYPE += install_static -endif +dmeventd.static: $(LIB_STATIC) dmeventd.o $(interfacedir)/libdevmapper.a + $(CC) $(CFLAGS) $(LDFLAGS) -static -L. -L$(interfacedir) -o $@ \ + dmeventd.o $(LVMLIBS) $(LIBS) -rdynamic ifeq ("@PKGCONFIG@", "yes") - INSTALL_TYPE += install_pkgconfig + INSTALL_LIB_TARGETS += install_pkgconfig endif -install: $(INSTALL_TYPE) install_include install_dmeventd - -install_device-mapper: $(INSTALL_TYPE) install_include install_dmeventd - install_include: $(INSTALL) -D $(OWNER) $(GROUP) -m 444 $(srcdir)/libdevmapper-event.h \ $(includedir)/libdevmapper-event.h -install_dynamic: libdevmapper-event.$(LIB_SUFFIX) +install_pkgconfig: + $(INSTALL) -D $(OWNER) $(GROUP) -m 444 libdevmapper-event.pc \ + $(usrlibdir)/pkgconfig/devmapper-event.pc + +install_lib_dynamic: libdevmapper-event.$(LIB_SUFFIX) $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ $(libdir)/libdevmapper-event.$(LIB_SUFFIX).$(LIB_VERSION) $(LN_S) -f libdevmapper-event.$(LIB_SUFFIX).$(LIB_VERSION) \ $(libdir)/libdevmapper-event.$(LIB_SUFFIX) -install_dmeventd: dmeventd - $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< $(sbindir)/$< - -install_pkgconfig: - $(INSTALL) -D $(OWNER) $(GROUP) -m 444 libdevmapper-event.pc \ - $(usrlibdir)/pkgconfig/devmapper-event.pc - -install_static: libdevmapper-event.a +install_lib_static: libdevmapper-event.a $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< \ $(libdir)/libdevmapper-event.a.$(LIB_VERSION) $(LN_S) -f libdevmapper-event.a.$(LIB_VERSION) $(libdir)/libdevmapper-event.a -$(VERSIONED_SHLIB): $(LIB_SHARED) - $(RM) -f $@ - $(LN_S) $(LIB_SHARED) $@ +install_lib: $(INSTALL_LIB_TARGETS) + +install_dmeventd_dynamic: dmeventd + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< $(sbindir)/$< + +install_dmeventd_static: dmeventd.static + $(INSTALL) -D $(OWNER) $(GROUP) -m 555 $(STRIP) $< $(sbindir)/$< + +install_dmeventd: $(INSTALL_DMEVENTD_TARGETS) + +install: install_include install_lib install_dmeventd + +install_device-mapper: install .PHONY: distclean_lib distclean From fabbione@sourceware.org Wed Oct 14 04:10:00 2009 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 14 Oct 2009 04:10:00 -0000 Subject: LVM2 WHATS_NEW configure configure.in Message-ID: <20091014041042.28270.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: fabbione@sourceware.org 2009-10-14 04:10:41 Modified files: . : WHATS_NEW configure configure.in Log message: configure.in: don't set default file owner and group Per discussion on lvm-devel mailing list and part of debian patch set, don't set defaults for owner and group, since nobody seems to use them, and still allow override. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1295&r2=1.1296 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.diff?cvsroot=lvm2&r1=1.111&r2=1.112 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/configure.in.diff?cvsroot=lvm2&r1=1.119&r2=1.120 --- LVM2/WHATS_NEW 2009/10/13 02:35:26 1.1295 +++ LVM2/WHATS_NEW 2009/10/14 04:10:41 1.1296 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Set default owner and group to null. Add dmeventd.static to the build. Disable realtime support code by default. Make clvmd return 0 on success rather than 1. --- LVM2/configure 2009/10/12 16:59:20 1.111 +++ LVM2/configure 2009/10/14 04:10:41 1.112 @@ -1531,8 +1531,8 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-user=USER Set the owner of installed files [USER=root] - --with-group=GROUP Set the group owner of installed files [GROUP=root] + --with-user=USER Set the owner of installed files [USER=] + --with-group=GROUP Set the group owner of installed files [GROUP=] --with-device-uid=UID Set the owner used for new device nodes [UID=0] --with-device-gid=UID Set the group used for new device nodes [GID=0] --with-device-mode=MODE Set the mode used for new device nodes [MODE=0600] @@ -9078,7 +9078,7 @@ ################################################################################ { $as_echo "$as_me:$LINENO: checking file owner" >&5 $as_echo_n "checking file owner... " >&6; } -OWNER="root" +OWNER="" # Check whether --with-user was given. @@ -9096,7 +9096,7 @@ ################################################################################ { $as_echo "$as_me:$LINENO: checking group owner" >&5 $as_echo_n "checking group owner... " >&6; } -GROUP="root" +GROUP="" # Check whether --with-group was given. if test "${with_group+set}" = set; then --- LVM2/configure.in 2009/10/12 16:59:20 1.119 +++ LVM2/configure.in 2009/10/14 04:10:41 1.120 @@ -144,10 +144,10 @@ ################################################################################ dnl -- Setup the ownership of the files AC_MSG_CHECKING(file owner) -OWNER="root" +OWNER="" AC_ARG_WITH(user, - [ --with-user=USER Set the owner of installed files [[USER=root]] ], + [ --with-user=USER Set the owner of installed files [[USER=]] ], [ OWNER="$withval" ]) AC_MSG_RESULT($OWNER) @@ -158,9 +158,9 @@ ################################################################################ dnl -- Setup the group ownership of the files AC_MSG_CHECKING(group owner) -GROUP="root" +GROUP="" AC_ARG_WITH(group, - [ --with-group=GROUP Set the group owner of installed files [[GROUP=root]] ], + [ --with-group=GROUP Set the group owner of installed files [[GROUP=]] ], [ GROUP="$withval" ]) AC_MSG_RESULT($GROUP) From jbrassow@sourceware.org Wed Oct 14 14:55:00 2009 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 14 Oct 2009 14:55:00 -0000 Subject: LVM2/lib/metadata mirror.c Message-ID: <20091014145546.10036.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: jbrassow@sourceware.org 2009-10-14 14:55:45 Modified files: lib/metadata : mirror.c Log message: I saw this in a bug report: [root@xxxx-01 ~]# lvconvert -m 1 --corelog VG/cmirror Unable to convert the log of inactive cluster mirror cmirror I've tried to clean-up the message a little more, so the name of the mirror stands out more while preserving the sense that it's not a problem with the specific device, but the fact that it is inactive that is causing the problem. New msg: Unable to convert the log of an inactive cluster mirror, cmirror Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.91&r2=1.92 --- LVM2/lib/metadata/mirror.c 2009/10/01 01:04:27 1.91 +++ LVM2/lib/metadata/mirror.c 2009/10/14 14:55:44 1.92 @@ -1228,8 +1228,8 @@ return 0; } } else if (vg_is_clustered(vg)) { - log_error("Unable to convert the log of inactive " - "cluster mirror %s", lv->name); + log_error("Unable to convert the log of an inactive " + "cluster mirror, %s", lv->name); return 0; } else if (yes_no_prompt("Full resync required to convert " "inactive mirror %s to core log. " From mornfall@sourceware.org Fri Oct 16 17:34:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Fri, 16 Oct 2009 17:34:00 -0000 Subject: LVM2/lib/unknown Message-ID: <20091016173443.9958.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-10-16 17:34:43 LVM2/lib/unknown Update of /cvs/lvm2/LVM2/lib/unknown In directory sourceware.org:/tmp/cvs-serv9950/lib/unknown Log Message: Directory /cvs/lvm2/LVM2/lib/unknown added to the repository From mornfall@sourceware.org Fri Oct 16 17:41:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Fri, 16 Oct 2009 17:41:00 -0000 Subject: LVM2 ./WHATS_NEW lib/Makefile.in lib/activate/ ... Message-ID: <20091016174158.13829.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-10-16 17:41:53 Modified files: . : WHATS_NEW lib : Makefile.in lib/activate : activate.c lib/commands : toolcontext.c toolcontext.h lib/config : config.c config.h lib/format_text: export.c text_export.h lib/metadata : metadata-exported.h metadata.c segtype.c segtype.h tools : vgcfgrestore.c Added files: lib/unknown : unknown.c test : t-unknown-segment.sh Log message: Handle metadata with unknown segment types more gracefully. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1296&r2=1.1297 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/Makefile.in.diff?cvsroot=lvm2&r1=1.95&r2=1.96 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.c.diff?cvsroot=lvm2&r1=1.156&r2=1.157 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/commands/toolcontext.c.diff?cvsroot=lvm2&r1=1.85&r2=1.86 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/commands/toolcontext.h.diff?cvsroot=lvm2&r1=1.34&r2=1.35 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/config.c.diff?cvsroot=lvm2&r1=1.75&r2=1.76 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/config.h.diff?cvsroot=lvm2&r1=1.28&r2=1.29 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/export.c.diff?cvsroot=lvm2&r1=1.69&r2=1.70 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/text_export.h.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.116&r2=1.117 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.290&r2=1.291 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/segtype.c.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/segtype.h.diff?cvsroot=lvm2&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/unknown/unknown.c.diff?cvsroot=lvm2&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-unknown-segment.sh.diff?cvsroot=lvm2&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcfgrestore.c.diff?cvsroot=lvm2&r1=1.23&r2=1.24 --- LVM2/WHATS_NEW 2009/10/14 04:10:41 1.1296 +++ LVM2/WHATS_NEW 2009/10/16 17:41:49 1.1297 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Handle metadata with unknown segment types more gracefully. Set default owner and group to null. Add dmeventd.static to the build. Disable realtime support code by default. --- LVM2/lib/Makefile.in 2009/10/12 16:59:20 1.95 +++ LVM2/lib/Makefile.in 2009/10/16 17:41:50 1.96 @@ -47,6 +47,7 @@ device/device.c \ display/display.c \ error/errseg.c \ + unknown/unknown.c \ filters/filter-composite.c \ filters/filter-persistent.c \ filters/filter-regex.c \ --- LVM2/lib/activate/activate.c 2009/10/01 00:35:29 1.156 +++ LVM2/lib/activate/activate.c 2009/10/16 17:41:50 1.157 @@ -1112,6 +1112,12 @@ goto_out; } + if (lv_has_unknown_segments(lv)) { + log_error("Refusing activation of LV %s containing " + "an unrecognised segment.", lv->name); + goto_out; + } + if (test_mode()) { _skip("Activating '%s'.", lv->name); r = 1; --- LVM2/lib/commands/toolcontext.c 2009/09/28 16:23:45 1.85 +++ LVM2/lib/commands/toolcontext.c 2009/10/16 17:41:50 1.86 @@ -1085,6 +1085,7 @@ memset(cmd, 0, sizeof(*cmd)); cmd->is_long_lived = is_long_lived; cmd->handles_missing_pvs = 0; + cmd->handles_unknown_segments = 0; cmd->hosttags = 0; dm_list_init(&cmd->formats); dm_list_init(&cmd->segtypes); --- LVM2/lib/commands/toolcontext.h 2009/09/28 16:23:45 1.34 +++ LVM2/lib/commands/toolcontext.h 2009/10/16 17:41:50 1.35 @@ -69,6 +69,7 @@ char **argv; unsigned is_long_lived:1; /* Optimises persistent_filter handling */ unsigned handles_missing_pvs:1; + unsigned handles_unknown_segments:1; unsigned partial_activation:1; unsigned si_unit_consistency:1; --- LVM2/lib/config/config.c 2009/07/27 21:01:56 1.75 +++ LVM2/lib/config/config.c 2009/10/16 17:41:51 1.76 @@ -71,6 +71,8 @@ struct output_line { FILE *fp; struct dm_pool *mem; + putline_fn putline; + void *putline_baton; }; static void _get_token(struct parser *p, int tok_prev); @@ -80,8 +82,8 @@ static struct config_value *_value(struct parser *p); static struct config_value *_type(struct parser *p); static int _match_aux(struct parser *p, int t); -static struct config_value *_create_value(struct parser *p); -static struct config_node *_create_node(struct parser *p); +static struct config_value *_create_value(struct dm_pool *mem); +static struct config_node *_create_node(struct dm_pool *mem); static char *_dup_tok(struct parser *p); static const int sep = '/'; @@ -403,10 +405,14 @@ } line = dm_pool_end_object(outline->mem); - if (!outline->fp) - log_print("%s", line); - else - fprintf(outline->fp, "%s\n", line); + if (outline->putline) + outline->putline(line, outline->putline_baton); + else { + if (!outline->fp) + log_print("%s", line); + else + fprintf(outline->fp, "%s\n", line); + } return 1; } @@ -498,6 +504,21 @@ return 1; } +int write_config_node(struct config_node *cn, putline_fn putline, void *baton) +{ + struct output_line outline; + outline.fp = NULL; + outline.mem = dm_pool_create("config_line", 1024); + outline.putline = putline; + outline.putline_baton = baton; + if (!_write_config(cn, 0, &outline, 0)) { + dm_pool_destroy(outline.mem); + return_0; + } + dm_pool_destroy(outline.mem); + return 1; +} + int write_config_file(struct config_tree *cft, const char *file, int argc, char **argv) { @@ -505,6 +526,7 @@ int r = 1; struct output_line outline; outline.fp = NULL; + outline.putline = NULL; if (!file) file = "stdout"; @@ -567,7 +589,7 @@ { /* IDENTIFIER SECTION_B_CHAR VALUE* SECTION_E_CHAR */ struct config_node *root, *n, *l = NULL; - if (!(root = _create_node(p))) + if (!(root = _create_node(p->mem))) return_0; if (!(root->key = _dup_tok(p))) @@ -622,7 +644,7 @@ * Special case for an empty array. */ if (!h) { - if (!(h = _create_value(p))) + if (!(h = _create_value(p->mem))) return NULL; h->type = CFG_EMPTY_ARRAY; @@ -637,7 +659,7 @@ static struct config_value *_type(struct parser *p) { /* [+-]{0,1}[0-9]+ | [0-9]*\.[0-9]* | ".*" */ - struct config_value *v = _create_value(p); + struct config_value *v = _create_value(p->mem); if (!v) return NULL; @@ -833,9 +855,9 @@ /* * memory management */ -static struct config_value *_create_value(struct parser *p) +static struct config_value *_create_value(struct dm_pool *mem) { - struct config_value *v = dm_pool_alloc(p->mem, sizeof(*v)); + struct config_value *v = dm_pool_alloc(mem, sizeof(*v)); if (v) memset(v, 0, sizeof(*v)); @@ -843,9 +865,9 @@ return v; } -static struct config_node *_create_node(struct parser *p) +static struct config_node *_create_node(struct dm_pool *mem) { - struct config_node *n = dm_pool_alloc(p->mem, sizeof(*n)); + struct config_node *n = dm_pool_alloc(mem, sizeof(*n)); if (n) memset(n, 0, sizeof(*n)); @@ -1297,3 +1319,33 @@ else return 0; } + +static struct config_value *_clone_config_value(struct dm_pool *mem, const struct config_value *v) +{ + if (!v) + return NULL; + struct config_value *new = _create_value(mem); + new->type = v->type; + if (v->type == CFG_STRING) + new->v.str = dm_pool_strdup(mem, v->v.str); + else + new->v = v->v; + new->next = _clone_config_value(mem, v->next); + return new; +} + +struct config_node *clone_config_node(struct dm_pool *mem, const struct config_node *cn, + int siblings) +{ + if (!cn) + return NULL; + struct config_node *new = _create_node(mem); + new->key = dm_pool_strdup(mem, cn->key); + new->child = clone_config_node(mem, cn->child, 1); + new->v = _clone_config_value(mem, cn->v); + if (siblings) + new->sib = clone_config_node(mem, cn->sib, siblings); + else + new->sib = NULL; + return new; +} --- LVM2/lib/config/config.h 2009/07/27 21:01:58 1.28 +++ LVM2/lib/config/config.h 2009/10/16 17:41:51 1.29 @@ -69,6 +69,10 @@ int read_config_file(struct config_tree *cft); int write_config_file(struct config_tree *cft, const char *file, int argc, char **argv); + +typedef int (*putline_fn)(const char *line, void *baton); +int write_config_node(struct config_node *cn, putline_fn putline, void *baton); + time_t config_file_timestamp(struct config_tree *cft); int config_file_changed(struct config_tree *cft); int merge_config_tree(struct cmd_context *cmd, struct config_tree *cft, @@ -114,4 +118,6 @@ const char *config_parent_name(const struct config_node *n); +struct config_node *clone_config_node(struct dm_pool *mem, const struct config_node *cn, + int siblings); #endif --- LVM2/lib/format_text/export.c 2009/05/19 09:48:32 1.69 +++ LVM2/lib/format_text/export.c 2009/10/16 17:41:51 1.70 @@ -293,6 +293,16 @@ return r; } +static int _out_line(const char *line, void *_f) { + struct formatter *f = (struct formatter *) _f; + return out_text(f, "%s", line); +} + +int out_config_node(struct formatter *f, const struct config_node *cn) +{ + return write_config_node(cn, _out_line, f); +} + static int _print_header(struct formatter *f, const char *desc) { --- LVM2/lib/format_text/text_export.h 2008/03/10 18:51:27 1.4 +++ LVM2/lib/format_text/text_export.h 2009/10/16 17:41:51 1.5 @@ -21,6 +21,7 @@ struct formatter; struct lv_segment; +struct config_node; int out_size(struct formatter *f, uint64_t size, const char *fmt, ...) __attribute__ ((format(printf, 3, 4))); @@ -31,6 +32,8 @@ int out_text(struct formatter *f, const char *fmt, ...) __attribute__ ((format(printf, 2, 3))); +int out_config_node(struct formatter *f, const struct config_node *cn); + int out_areas(struct formatter *f, const struct lv_segment *seg, const char *type); --- LVM2/lib/metadata/metadata-exported.h 2009/10/05 20:03:08 1.116 +++ LVM2/lib/metadata/metadata-exported.h 2009/10/16 17:41:52 1.117 @@ -298,6 +298,7 @@ uint32_t region_size; /* For mirrors - in sectors */ uint32_t extents_copied; struct logical_volume *log_lv; + void *segtype_private; struct dm_list tags; @@ -734,6 +735,9 @@ #define vg_is_exported(vg) (vg_status((vg)) & EXPORTED_VG) #define vg_is_resizeable(vg) (vg_status((vg)) & RESIZEABLE_VG) +int lv_has_unknown_segments(const struct logical_volume *lv); +int vg_has_unknown_segments(const struct volume_group *vg); + struct vgcreate_params { char *vg_name; uint32_t extent_size; --- LVM2/lib/metadata/metadata.c 2009/10/06 16:00:38 1.290 +++ LVM2/lib/metadata/metadata.c 2009/10/16 17:41:52 1.291 @@ -23,6 +23,7 @@ #include "memlock.h" #include "str_list.h" #include "pv_alloc.h" +#include "segtype.h" #include "activate.h" #include "display.h" #include "locking.h" @@ -738,6 +739,27 @@ return (struct volume_group *)vg; } +int lv_has_unknown_segments(const struct logical_volume *lv) +{ + struct lv_segment *seg; + /* foreach segment */ + dm_list_iterate_items(seg, &lv->segments) + if (seg_unknown(seg)) + return 1; + return 0; +} + +int vg_has_unknown_segments(const struct volume_group *vg) +{ + struct lv_list *lvl; + + /* foreach LV */ + dm_list_iterate_items(lvl, &vg->lvs) + if (lv_has_unknown_segments(lvl->lv)) + return 1; + return 0; +} + /* * Create a VG with default parameters. * Returns: @@ -2192,6 +2214,13 @@ return 0; } + if (vg_has_unknown_segments(vg) && !vg->cmd->handles_unknown_segments) { + log_error("Cannot update volume group %s with unknown segments in it!", + vg->name); + return 0; + } + + if (dm_list_empty(&vg->fid->metadata_areas)) { log_error("Aborting vg_write: No metadata areas to write to!"); return 0; @@ -3317,6 +3346,11 @@ } } + /* + * Check that the tool can handle tricky cases -- missing PVs and + * unknown segment types. + */ + if (!cmd->handles_missing_pvs && vg_missing_pv_count(vg) && (lock_flags & LCK_WRITE)) { log_error("Cannot change VG %s while PVs are missing!", @@ -3325,6 +3359,14 @@ goto_bad; } + if (!cmd->handles_unknown_segments && vg_has_unknown_segments(vg) && + (lock_flags & LCK_WRITE)) { + log_error("Cannot change VG %s with unknown segments in it!", + vg->name); + failure |= FAILED_INCONSISTENT; /* FIXME new failure code here? */ + goto_bad; + } + failure |= _vg_bad_status_bits(vg, status_flags); if (failure) goto_bad; --- LVM2/lib/metadata/segtype.c 2008/11/03 22:14:29 1.4 +++ LVM2/lib/metadata/segtype.c 2009/10/16 17:41:52 1.5 @@ -27,6 +27,11 @@ return segtype; } - log_error("Unrecognised segment type %s", str); - return NULL; + if (!(segtype = init_unknown_segtype(cmd, str))) + return_NULL; + + segtype->library = NULL; + dm_list_add(&cmd->segtypes, &segtype->list); + log_warn("WARNING: Unrecognised segment type %s", str); + return segtype; } --- LVM2/lib/metadata/segtype.h 2009/10/01 00:35:29 1.25 +++ LVM2/lib/metadata/segtype.h 2009/10/16 17:41:52 1.26 @@ -35,6 +35,7 @@ #define SEG_VIRTUAL 0x00000020U #define SEG_CANNOT_BE_ZEROED 0x00000040U #define SEG_MONITORED 0x00000080U +#define SEG_UNKNOWN 0x80000000U #define seg_is_mirrored(seg) ((seg)->segtype->flags & SEG_AREAS_MIRRORED ? 1 : 0) #define seg_is_striped(seg) ((seg)->segtype->flags & SEG_AREAS_STRIPED ? 1 : 0) @@ -43,6 +44,7 @@ #define seg_can_split(seg) ((seg)->segtype->flags & SEG_CAN_SPLIT ? 1 : 0) #define seg_cannot_be_zeroed(seg) ((seg)->segtype->flags & SEG_CANNOT_BE_ZEROED ? 1 : 0) #define seg_monitored(seg) ((seg)->segtype->flags & SEG_MONITORED ? 1 : 0) +#define seg_unknown(seg) ((seg)->segtype->flags & SEG_UNKNOWN ? 1 : 0) #define segtype_is_striped(segtype) ((segtype)->flags & SEG_AREAS_STRIPED ? 1 : 0) #define segtype_is_mirrored(segtype) ((segtype)->flags & SEG_AREAS_MIRRORED ? 1 : 0) @@ -105,6 +107,7 @@ struct segment_type *init_zero_segtype(struct cmd_context *cmd); struct segment_type *init_error_segtype(struct cmd_context *cmd); struct segment_type *init_free_segtype(struct cmd_context *cmd); +struct segment_type *init_unknown_segtype(struct cmd_context *cmd, const char *name); #ifdef SNAPSHOT_INTERNAL struct segment_type *init_snapshot_segtype(struct cmd_context *cmd); /cvs/lvm2/LVM2/lib/unknown/unknown.c,v --> standard output revision 1.1 --- LVM2/lib/unknown/unknown.c +++ - 2009-10-16 17:41:57.687400000 +0000 @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. + * + * This file is part of LVM2. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License v.2.1. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "lib.h" +#include "toolcontext.h" +#include "segtype.h" +#include "display.h" +#include "text_export.h" +#include "text_import.h" +#include "config.h" +#include "str_list.h" +#include "targets.h" +#include "lvm-string.h" +#include "activate.h" +#include "str_list.h" +#include "metadata.h" + +static const char *_unknown_name(const struct lv_segment *seg) +{ + + return seg->segtype->name; +} + +static int _unknown_text_import(struct lv_segment *seg, const struct config_node *sn, + struct dm_hash_table *pv_hash) +{ + struct config_node *new, *last = NULL, *current, *head = NULL; + log_verbose("importing unknown segment"); + for (current = sn; current != NULL; current = current->sib) { + if (!strcmp(current->key, "type") || !strcmp(current->key, "start_extent") || + !strcmp(current->key, "tags") || !strcmp(current->key, "extent_count")) + continue; + new = clone_config_node(seg->lv->vg->vgmem, current, 0); + if (!new) + return_0; + if (last) + last->sib = new; + if (!head) + head = new; + last = new; + } + seg->segtype_private = head; + return 1; +} + +static int _unknown_text_export(const struct lv_segment *seg, struct formatter *f) +{ + struct config_node *cn = seg->segtype_private; + return out_config_node(f, cn); +} + +#ifdef DEVMAPPER_SUPPORT +static int _unknown_add_target_line(struct dev_manager *dm __attribute((unused)), + struct dm_pool *mem __attribute((unused)), + struct cmd_context *cmd __attribute((unused)), + void **target_state __attribute((unused)), + struct lv_segment *seg __attribute((unused)), + struct dm_tree_node *node, uint64_t len, + uint32_t *pvmove_mirror_count __attribute((unused))) +{ + return dm_tree_node_add_error_target(node, len); +} +#endif + +static void _unknown_destroy(const struct segment_type *segtype) +{ + dm_free((void *)segtype); +} + +static struct segtype_handler _unknown_ops = { + .name = _unknown_name, + .text_import = _unknown_text_import, + .text_export = _unknown_text_export, +#ifdef DEVMAPPER_SUPPORT + .add_target_line = _unknown_add_target_line, +#endif + .destroy = _unknown_destroy, +}; + +struct segment_type *init_unknown_segtype(struct cmd_context *cmd, const char *name) +{ + struct segment_type *segtype = dm_malloc(sizeof(*segtype)); + + if (!segtype) + return_NULL; + + segtype->cmd = cmd; + segtype->ops = &_unknown_ops; + segtype->name = dm_pool_strdup(cmd->mem, name); + segtype->private = NULL; + segtype->flags = SEG_UNKNOWN | SEG_VIRTUAL | SEG_CANNOT_BE_ZEROED; + + log_very_verbose("Initialised segtype: %s", segtype->name); + + return segtype; +} /cvs/lvm2/LVM2/test/t-unknown-segment.sh,v --> standard output revision 1.1 --- LVM2/test/t-unknown-segment.sh +++ - 2009-10-16 17:41:57.784831000 +0000 @@ -0,0 +1,34 @@ +#!/bin/sh +# Copyright (C) 2009 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions +# of the GNU General Public License v.2. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +. ./test-utils.sh + +aux prepare_vg 4 + +lvcreate -l 1 -n $lv1 $vg +lvcreate -l 2 -m 1 -n $lv2 $vg + +vgcfgbackup -f bak0 $vg +sed -e 's,striped,unstriped,;s,mirror,unmirror,' -i.orig bak0 +vgcfgrestore -f bak0 $vg + +# we have on-disk metadata with unknown segments now +not lvchange -a y $vg/$lv1 # check that activation is refused + +vgcfgbackup -f bak1 $vg +cat bak1 +sed -e 's,unstriped,striped,;s,unmirror,mirror,' -i.orig bak1 +vgcfgrestore -f bak1 $vg +vgcfgbackup -f bak2 $vg + +egrep -v 'description|seqno|creation_time|Generated' < bak0.orig > a +egrep -v 'description|seqno|creation_time|Generated' < bak2 > b +diff -u a b --- LVM2/tools/vgcfgrestore.c 2009/09/14 22:47:50 1.23 +++ LVM2/tools/vgcfgrestore.c 2009/10/16 17:41:53 1.24 @@ -56,6 +56,8 @@ return ECMD_FAILED; } + cmd->handles_unknown_segments = 1; + if (!(arg_count(cmd, file_ARG) ? backup_restore_from_file(cmd, vg_name, arg_str_value(cmd, file_ARG, "")) : From jbrassow@sourceware.org Wed Oct 21 22:19:00 2009 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 21 Oct 2009 22:19:00 -0000 Subject: LVM2/tools lvconvert.c Message-ID: <20091021221939.30572.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: jbrassow@sourceware.org 2009-10-21 22:19:39 Modified files: tools : lvconvert.c Log message: Clarify message: " Mirror status: 1/2 images failed." Half of an image? Half of the images? No, 1 of 2 images. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvconvert.c.diff?cvsroot=lvm2&r1=1.93&r2=1.94 --- LVM2/tools/lvconvert.c 2009/09/30 18:15:06 1.93 +++ LVM2/tools/lvconvert.c 2009/10/21 22:19:39 1.94 @@ -584,7 +584,7 @@ if ((failed_mirrors = _failed_mirrors_count(lv)) < 0) return_0; lp->mirrors -= failed_mirrors; - log_error("Mirror status: %d/%d images failed.", + log_error("Mirror status: %d of %d images failed.", failed_mirrors, existing_mirrors); old_pvh = lp->pvh; if (!(lp->pvh = _failed_pv_list(lv->vg))) From mornfall@sourceware.org Thu Oct 22 10:38:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Thu, 22 Oct 2009 10:38:00 -0000 Subject: LVM2/lib config/config.c config/config.h unkno ... Message-ID: <20091022103808.13165.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-10-22 10:38:07 Modified files: lib/config : config.c config.h lib/unknown : unknown.c Log message: Fix the "const discarded" warnings introduced in the unknown segment patch. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/config.c.diff?cvsroot=lvm2&r1=1.76&r2=1.77 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/config.h.diff?cvsroot=lvm2&r1=1.29&r2=1.30 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/unknown/unknown.c.diff?cvsroot=lvm2&r1=1.1&r2=1.2 --- LVM2/lib/config/config.c 2009/10/16 17:41:51 1.76 +++ LVM2/lib/config/config.c 2009/10/22 10:38:07 1.77 @@ -451,7 +451,7 @@ return 1; } -static int _write_config(struct config_node *n, int only_one, +static int _write_config(const struct config_node *n, int only_one, struct output_line *outline, int level) { char space[MAX_INDENT + 1]; @@ -504,7 +504,7 @@ return 1; } -int write_config_node(struct config_node *cn, putline_fn putline, void *baton) +int write_config_node(const struct config_node *cn, putline_fn putline, void *baton) { struct output_line outline; outline.fp = NULL; --- LVM2/lib/config/config.h 2009/10/16 17:41:51 1.29 +++ LVM2/lib/config/config.h 2009/10/22 10:38:07 1.30 @@ -71,7 +71,7 @@ int argc, char **argv); typedef int (*putline_fn)(const char *line, void *baton); -int write_config_node(struct config_node *cn, putline_fn putline, void *baton); +int write_config_node(const struct config_node *cn, putline_fn putline, void *baton); time_t config_file_timestamp(struct config_tree *cft); int config_file_changed(struct config_tree *cft); --- LVM2/lib/unknown/unknown.c 2009/10/16 17:41:52 1.1 +++ LVM2/lib/unknown/unknown.c 2009/10/22 10:38:07 1.2 @@ -35,7 +35,8 @@ static int _unknown_text_import(struct lv_segment *seg, const struct config_node *sn, struct dm_hash_table *pv_hash) { - struct config_node *new, *last = NULL, *current, *head = NULL; + struct config_node *new, *last = NULL, *head = NULL; + const struct config_node *current; log_verbose("importing unknown segment"); for (current = sn; current != NULL; current = current->sib) { if (!strcmp(current->key, "type") || !strcmp(current->key, "start_extent") || From mornfall@sourceware.org Thu Oct 22 10:40:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Thu, 22 Oct 2009 10:40:00 -0000 Subject: LVM2/daemons/dmeventd/plugins/mirror dmeventd_ ... Message-ID: <20091022104042.13658.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-10-22 10:40:41 Modified files: daemons/dmeventd/plugins/mirror: dmeventd_mirror.c Log message: Only announce mirror monitoring to syslog after initialisation succeeds. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c.diff?cvsroot=lvm2&r1=1.26&r2=1.27 --- LVM2/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c 2009/09/17 10:37:24 1.26 +++ LVM2/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c 2009/10/22 10:40:41 1.27 @@ -243,8 +243,6 @@ pthread_mutex_lock(&_register_mutex); - syslog(LOG_INFO, "Monitoring mirror device %s for events\n", device); - /* * Need some space for allocations. 1024 should be more * than enough for what we need (device mapper name splitting) @@ -264,6 +262,8 @@ lvm2_run(_lvm_handle, "_memlock_inc"); } + syslog(LOG_INFO, "Monitoring mirror device %s for events\n", device); + _register_count++; r = 1; From agk@sourceware.org Thu Oct 22 11:25:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Thu, 22 Oct 2009 11:25:00 -0000 Subject: LVM2 WHATS_NEW Message-ID: <20091022112547.16273.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-22 11:25:47 Modified files: . : WHATS_NEW Log message: . Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1297&r2=1.1298 --- LVM2/WHATS_NEW 2009/10/16 17:41:49 1.1297 +++ LVM2/WHATS_NEW 2009/10/22 11:25:46 1.1298 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Delay announcing mirror monitoring to syslog until initialisation succeeded. Handle metadata with unknown segment types more gracefully. Set default owner and group to null. Add dmeventd.static to the build. From prajnoha@sourceware.org Thu Oct 22 12:55:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Thu, 22 Oct 2009 12:55:00 -0000 Subject: LVM2 ./WHATS_NEW_DM libdm/libdevmapper.h libdm ... Message-ID: <20091022125549.3590.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-10-22 12:55:48 Modified files: . : WHATS_NEW_DM libdm : libdevmapper.h libdm-common.c libdm-deptree.c libdm/ioctl : libdm-iface.c tools : dmsetup.c Log message: Add udev flags support in libdevmapper and provide 'dmsetup udevflags' command to decode them. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.305&r2=1.306 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdevmapper.h.diff?cvsroot=lvm2&r1=1.97&r2=1.98 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.c.diff?cvsroot=lvm2&r1=1.86&r2=1.87 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-deptree.c.diff?cvsroot=lvm2&r1=1.58&r2=1.59 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/ioctl/libdm-iface.c.diff?cvsroot=lvm2&r1=1.62&r2=1.63 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/dmsetup.c.diff?cvsroot=lvm2&r1=1.124&r2=1.125 --- LVM2/WHATS_NEW_DM 2009/10/12 04:06:42 1.305 +++ LVM2/WHATS_NEW_DM 2009/10/22 12:55:47 1.306 @@ -1,5 +1,7 @@ Version 1.02.39 - ===================================== + Add dmsetup udevflags command to decode udev flags in given cookie value. + Add udev flags support in libdevmapper. Make libdm ABI consistent when built with/without selinux support. Version 1.02.38 - 25th September 2009 --- LVM2/libdm/libdevmapper.h 2009/09/25 11:58:00 1.97 +++ LVM2/libdm/libdevmapper.h 2009/10/22 12:55:47 1.98 @@ -164,7 +164,7 @@ int dm_task_set_uid(struct dm_task *dmt, uid_t uid); int dm_task_set_gid(struct dm_task *dmt, gid_t gid); int dm_task_set_mode(struct dm_task *dmt, mode_t mode); -int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie); +int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie, uint16_t flags); int dm_task_set_event_nr(struct dm_task *dmt, uint32_t event_nr); int dm_task_set_geometry(struct dm_task *dmt, const char *cylinders, const char *heads, const char *sectors, const char *start); int dm_task_set_message(struct dm_task *dmt, const char *message); @@ -1014,7 +1014,38 @@ void dm_report_field_set_value(struct dm_report_field *field, const void *value, const void *sortvalue); +/* Cookie prefixes. + * The cookie value consists of a prefix (16 bits) and a base (16 bits). + * We can use the prefix to store the flags. These flags are sent to + * kernel within given dm task. When returned back to userspace in + * DM_COOKIE udev environment variable, we can control several aspects + * of udev rules we use by decoding the cookie prefix. When doing the + * notification, we replace the cookie prefix with DM_COOKIE_MAGIC, + * so we notify the right semaphore. + */ #define DM_COOKIE_MAGIC 0x0D4D +#define DM_UDEV_FLAGS_MASK 0xFFFF0000 +#define DM_UDEV_FLAGS_SHIFT 16 +/* + * DM_UDEV_DISABLE_SUBSYTEM_RULES_FLAG is set in case we need to disable + * subsystem udev rules, but still we need the general DM udev rules to + * be applied (to create the nodes and symlinks under /dev and /dev/disk). + */ +#define DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG 0x0001 +/* + * DM_UDEV_DISABLE_DISK_RULES_FLAG is set in case we need to disable + * general DM rules that set symlinks in /dev/disk directory. + */ +#define DM_UDEV_DISABLE_DISK_RULES_FLAG 0x0002 +/* + * DM_UDEV_LOW_PRIORITY_FLAG is set in case we need to instruct the + * udev rules to give low priority to the device that is currently + * processed. For example, this provides a way to select which symlinks + * could be overwritten by high priority ones if their names are equal. + * Common situation is a name based on FS UUID while using origin and + * snapshot devices. + */ +#define DM_UDEV_LOW_PRIORITY_FLAG 0x0004 int dm_cookie_supported(void); --- LVM2/libdm/libdm-common.c 2009/10/12 04:06:42 1.86 +++ LVM2/libdm/libdm-common.c 2009/10/22 12:55:47 1.87 @@ -876,7 +876,7 @@ return 0; } -int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie) +int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie, uint16_t flags) { *cookie = 0; @@ -1129,7 +1129,7 @@ return 0; } -int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie) +int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie, uint16_t flags) { int semid; @@ -1151,11 +1151,11 @@ goto bad; } - dmt->event_nr = *cookie; + dmt->event_nr = (0x0000FFFF & *cookie) | (flags << 16); dmt->cookie_set = 1; - log_debug("Udev cookie 0x%" PRIx32 " (semid %d) assigned to dm_task", - dmt->event_nr, semid); + log_debug("Udev cookie 0x%" PRIx32 " (semid %d) assigned to dm_task " + "with flags 0x%" PRIx16, *cookie, semid, flags); return 1; --- LVM2/libdm/libdm-deptree.c 2009/09/25 18:30:27 1.58 +++ LVM2/libdm/libdm-deptree.c 2009/10/22 12:55:48 1.59 @@ -841,7 +841,7 @@ if (!dm_task_no_open_count(dmt)) log_error("Failed to disable open_count"); - if (!dm_task_set_cookie(dmt, cookie)) + if (!dm_task_set_cookie(dmt, cookie, 0)) goto out; r = dm_task_run(dmt); @@ -881,7 +881,7 @@ if (!dm_task_no_open_count(dmt)) log_error("Failed to disable open_count"); - if (!dm_task_set_cookie(dmt, cookie)) + if (!dm_task_set_cookie(dmt, cookie, 0)) goto out; r = dm_task_run(dmt); @@ -924,7 +924,7 @@ if (!dm_task_set_read_ahead(dmt, read_ahead, read_ahead_flags)) log_error("Failed to set read ahead"); - if (!dm_task_set_cookie(dmt, cookie)) + if (!dm_task_set_cookie(dmt, cookie, 0)) goto out; if ((r = dm_task_run(dmt))) --- LVM2/libdm/ioctl/libdm-iface.c 2009/09/25 11:58:00 1.62 +++ LVM2/libdm/ioctl/libdm-iface.c 2009/10/22 12:55:48 1.63 @@ -1492,8 +1492,14 @@ */ static int _udev_complete(struct dm_task *dmt) { - if (dmt->cookie_set) - return dm_udev_complete(dmt->event_nr); + uint32_t cookie; + + if (dmt->cookie_set) { + /* strip flags from the cookie and use cookie magic instead */ + cookie = (dmt->event_nr & ~DM_UDEV_FLAGS_MASK) | + (DM_COOKIE_MAGIC << DM_UDEV_FLAGS_SHIFT); + return dm_udev_complete(cookie); + } return 1; } --- LVM2/tools/dmsetup.c 2009/09/11 15:53:58 1.124 +++ LVM2/tools/dmsetup.c 2009/10/22 12:55:48 1.125 @@ -595,7 +595,7 @@ if (_switches[NOTABLE_ARG]) dm_udev_set_sync_support(0); - if (!dm_task_set_cookie(dmt, &cookie) || + if (!dm_task_set_cookie(dmt, &cookie, 0) || !dm_task_run(dmt)) goto out; @@ -630,7 +630,7 @@ if (_switches[NOOPENCOUNT_ARG] && !dm_task_no_open_count(dmt)) goto out; - if (!dm_task_set_cookie(dmt, &cookie) || + if (!dm_task_set_cookie(dmt, &cookie, 0) || !dm_task_run(dmt)) goto out; @@ -758,15 +758,70 @@ return r; } -static int _udevcomplete(int argc, char **argv, void *data __attribute((unused))) +static uint32_t _get_cookie_value(char *str_value) { - uint32_t cookie; + unsigned long int value; char *p; - if (!(cookie = (uint32_t) strtoul(argv[1], &p, 0)) || *p) { + if (!(value = strtoul(str_value, &p, 0)) || + *p || + (value == ULONG_MAX && errno == ERANGE) || + value > 0xFFFFFFFF) { err("Incorrect cookie value"); return 0; } + else + return (uint32_t) value; +} + +static int _udevflags(int args, char **argv, void *data __attribute((unused))) +{ + uint32_t cookie; + uint16_t flags; + int i; + static const char *dm_flag_names[] = {"DISABLE_SUBSYSTEM_RULES", + "DISABLE_DISK_RULES", + "LOW_PRIORITY", + 0, 0, 0, 0, 0}; + + if (!(cookie = _get_cookie_value(argv[1]))) + return 0; + + flags = cookie >> DM_UDEV_FLAGS_SHIFT; + + for (i = 0; i < DM_UDEV_FLAGS_SHIFT; i++) + if (1 << i & flags) { + if (i < DM_UDEV_FLAGS_SHIFT / 2 && dm_flag_names[i]) + printf("DM_UDEV_%s_FLAG='1'\n", dm_flag_names[i]); + else if (i < DM_UDEV_FLAGS_SHIFT / 2) + /* + * This is just a fallback. Each new DM flag + * should have its symbolic name assigned. + */ + printf("DM_UDEV_FLAG%d='1'\n", i); + else + /* + * We can't assign symbolic names to subsystem + * flags. Their semantics vary based on the + * subsystem that is currently used. + */ + printf("DM_SUBSYSTEM_UDEV_FLAG%d='1'\n", + i - DM_UDEV_FLAGS_SHIFT / 2); + } + + return 1; +} + +static int _udevcomplete(int argc, char **argv, void *data __attribute((unused))) +{ + uint32_t cookie; + + if (!(cookie = _get_cookie_value(argv[1]))) + return 0; + + /* strip flags from the cookie and use cookie magic instead */ + cookie = (cookie & ~DM_UDEV_FLAGS_MASK) | + (DM_COOKIE_MAGIC << DM_UDEV_FLAGS_SHIFT); return dm_udev_complete(cookie); } @@ -953,7 +1008,7 @@ _read_ahead_flags)) goto out; - if (udev_wait_flag && !dm_task_set_cookie(dmt, &cookie)) + if (udev_wait_flag && !dm_task_set_cookie(dmt, &cookie, 0)) goto out; r = dm_task_run(dmt); @@ -2436,6 +2491,7 @@ {"table", "[] [--target ] [--showkeys]", 0, 1, _status}, {"wait", " []", 0, 2, _wait}, {"mknodes", "[]", 0, 1, _mknodes}, + {"udevflags", "", 1, 1, _udevflags}, {"udevcomplete", "", 1, 1, _udevcomplete}, {"udevcomplete_all", "", 0, 0, _udevcomplete_all}, {"udevcookies", "", 0, 0, _udevcookies}, From prajnoha@sourceware.org Thu Oct 22 13:00:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Thu, 22 Oct 2009 13:00:00 -0000 Subject: LVM2 ./WHATS_NEW lib/activate/dev_manager.c li ... Message-ID: <20091022130009.5546.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-10-22 13:00:08 Modified files: . : WHATS_NEW lib/activate : dev_manager.c libdm : .exported_symbols libdevmapper.h libdm-deptree.c Log message: Use udev flags support in LVM and provide dm_tree_add_new_dev_with_udev_flags wrapper for dm_tree_add_new_dev. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1298&r2=1.1299 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.159&r2=1.160 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/.exported_symbols.diff?cvsroot=lvm2&r1=1.43&r2=1.44 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdevmapper.h.diff?cvsroot=lvm2&r1=1.98&r2=1.99 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-deptree.c.diff?cvsroot=lvm2&r1=1.59&r2=1.60 --- LVM2/WHATS_NEW 2009/10/22 11:25:46 1.1298 +++ LVM2/WHATS_NEW 2009/10/22 13:00:07 1.1299 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Use udev flags support in LVM. Delay announcing mirror monitoring to syslog until initialisation succeeded. Handle metadata with unknown segment types more gracefully. Set default owner and group to null. --- LVM2/lib/activate/dev_manager.c 2009/10/01 00:35:29 1.159 +++ LVM2/lib/activate/dev_manager.c 2009/10/22 13:00:07 1.160 @@ -1003,6 +1003,7 @@ uint32_t max_stripe_size = UINT32_C(0); uint32_t read_ahead = lv->read_ahead; uint32_t read_ahead_flags = UINT32_C(0); + uint16_t udev_flags = 0; if (!(name = build_dm_name(dm->mem, lv->vg->name, lv->name, layer))) return_0; @@ -1022,18 +1023,26 @@ lvlayer->lv = lv; + if (layer || !lv_is_visible(lv)) + udev_flags |= DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG | + DM_UDEV_DISABLE_DISK_RULES_FLAG; + + if (lv_is_cow(lv)) + udev_flags |= DM_UDEV_LOW_PRIORITY_FLAG; + /* * Add LV to dtree. * If we're working with precommitted metadata, clear any * existing inactive table left behind. * Major/minor settings only apply to the visible layer. */ - if (!(dnode = dm_tree_add_new_dev(dtree, name, dlid, + if (!(dnode = dm_tree_add_new_dev_with_udev_flags(dtree, name, dlid, layer ? UINT32_C(0) : (uint32_t) lv->major, layer ? UINT32_C(0) : (uint32_t) lv->minor, _read_only_lv(lv), (lv->vg->status & PRECOMMITTED) ? 1 : 0, - lvlayer))) + lvlayer, + udev_flags))) return_0; /* Store existing name so we can do rename later */ --- LVM2/libdm/.exported_symbols 2009/08/06 17:08:01 1.43 +++ LVM2/libdm/.exported_symbols 2009/10/22 13:00:07 1.44 @@ -50,6 +50,7 @@ dm_tree_free dm_tree_add_dev dm_tree_add_new_dev +dm_tree_add_new_dev_with_udev_flags dm_tree_node_get_name dm_tree_node_get_uuid dm_tree_node_get_info --- LVM2/libdm/libdevmapper.h 2009/10/22 12:55:47 1.98 +++ LVM2/libdm/libdevmapper.h 2009/10/22 13:00:07 1.99 @@ -277,6 +277,15 @@ int read_only, int clear_inactive, void *context); +struct dm_tree_node *dm_tree_add_new_dev_with_udev_flags(struct dm_tree *tree, + const char *name, + const char *uuid, + uint32_t major, + uint32_t minor, + int read_only, + int clear_inactive, + void *context, + uint16_t udev_flags); /* * Search for a node in the tree. --- LVM2/libdm/libdm-deptree.c 2009/10/22 12:55:48 1.59 +++ LVM2/libdm/libdm-deptree.c 2009/10/22 13:00:07 1.60 @@ -130,6 +130,8 @@ int activation_priority; /* 0 gets activated first */ + uint16_t udev_flags; /* Udev control flags */ + void *context; /* External supplied context */ struct load_properties props; /* For creation/table (re)load */ @@ -301,7 +303,8 @@ const char *name, const char *uuid, struct dm_info *info, - void *context) + void *context, + uint16_t udev_flags) { struct dm_tree_node *node; uint64_t dev; @@ -317,6 +320,7 @@ node->uuid = uuid; node->info = *info; node->context = context; + node->udev_flags = udev_flags; node->activation_priority = 0; dm_list_init(&node->uses); @@ -466,8 +470,8 @@ if (!_deps(&dmt, dtree->mem, major, minor, &name, &uuid, &info, &deps)) return_NULL; - if (!(node = _create_dm_tree_node(dtree, name, uuid, - &info, NULL))) + if (!(node = _create_dm_tree_node(dtree, name, uuid, &info, + NULL, 0))) goto_out; new = 1; } @@ -585,8 +589,8 @@ info.inactive_table = 0; info.read_only = 0; - if (!(dnode = _create_dm_tree_node(dtree, name2, uuid2, - &info, context))) + if (!(dnode = _create_dm_tree_node(dtree, name2, uuid2, &info, + context, 0))) return_NULL; /* Attach to root node until a table is supplied */ @@ -613,10 +617,31 @@ return_NULL; dnode->context = context; + dnode->udev_flags = 0; return dnode; } +struct dm_tree_node *dm_tree_add_new_dev_with_udev_flags(struct dm_tree *dtree, + const char *name, + const char *uuid, + uint32_t major, + uint32_t minor, + int read_only, + int clear_inactive, + void *context, + uint16_t udev_flags) +{ + struct dm_tree_node *node; + + if ((node = dm_tree_add_new_dev(dtree, name, uuid, major, minor, read_only, + clear_inactive, context))) + node->udev_flags = udev_flags; + + return node; +} + + void dm_tree_node_set_read_ahead(struct dm_tree_node *dnode, uint32_t read_ahead, uint32_t read_ahead_flags) @@ -821,7 +846,8 @@ return r; } -static int _deactivate_node(const char *name, uint32_t major, uint32_t minor, uint32_t *cookie) +static int _deactivate_node(const char *name, uint32_t major, uint32_t minor, + uint32_t *cookie, uint16_t udev_flags) { struct dm_task *dmt; int r = 0; @@ -841,7 +867,7 @@ if (!dm_task_no_open_count(dmt)) log_error("Failed to disable open_count"); - if (!dm_task_set_cookie(dmt, cookie, 0)) + if (!dm_task_set_cookie(dmt, cookie, udev_flags)) goto out; r = dm_task_run(dmt); @@ -858,7 +884,7 @@ } static int _rename_node(const char *old_name, const char *new_name, uint32_t major, - uint32_t minor, uint32_t *cookie) + uint32_t minor, uint32_t *cookie, uint16_t udev_flags) { struct dm_task *dmt; int r = 0; @@ -881,7 +907,7 @@ if (!dm_task_no_open_count(dmt)) log_error("Failed to disable open_count"); - if (!dm_task_set_cookie(dmt, cookie, 0)) + if (!dm_task_set_cookie(dmt, cookie, udev_flags)) goto out; r = dm_task_run(dmt); @@ -895,7 +921,8 @@ /* FIXME Merge with _suspend_node? */ static int _resume_node(const char *name, uint32_t major, uint32_t minor, uint32_t read_ahead, uint32_t read_ahead_flags, - struct dm_info *newinfo, uint32_t *cookie) + struct dm_info *newinfo, uint32_t *cookie, + uint16_t udev_flags) { struct dm_task *dmt; int r = 0; @@ -924,7 +951,7 @@ if (!dm_task_set_read_ahead(dmt, read_ahead, read_ahead_flags)) log_error("Failed to set read ahead"); - if (!dm_task_set_cookie(dmt, cookie, 0)) + if (!dm_task_set_cookie(dmt, cookie, udev_flags)) goto out; if ((r = dm_task_run(dmt))) @@ -1011,7 +1038,8 @@ !info.exists || info.open_count) continue; - if (!_deactivate_node(name, info.major, info.minor, &dnode->dtree->cookie)) { + if (!_deactivate_node(name, info.major, info.minor, + &dnode->dtree->cookie, dnode->udev_flags)) { log_error("Unable to deactivate %s (%" PRIu32 ":%" PRIu32 ")", name, info.major, info.minor); @@ -1156,7 +1184,8 @@ /* Rename? */ if (child->props.new_name) { if (!_rename_node(name, child->props.new_name, child->info.major, - child->info.minor, &child->dtree->cookie)) { + child->info.minor, &child->dtree->cookie, + child->udev_flags)) { log_error("Failed to rename %s (%" PRIu32 ":%" PRIu32 ") to %s", name, child->info.major, child->info.minor, child->props.new_name); @@ -1171,7 +1200,7 @@ if (!_resume_node(child->name, child->info.major, child->info.minor, child->props.read_ahead, child->props.read_ahead_flags, - &newinfo, &child->dtree->cookie)) { + &newinfo, &child->dtree->cookie, child->udev_flags)) { log_error("Unable to resume %s (%" PRIu32 ":%" PRIu32 ")", child->name, child->info.major, child->info.minor); @@ -1622,7 +1651,7 @@ if (!_resume_node(child->name, child->info.major, child->info.minor, child->props.read_ahead, child->props.read_ahead_flags, - &newinfo, &child->dtree->cookie)) { + &newinfo, &child->dtree->cookie, child->udev_flags)) { log_error("Unable to resume %s (%" PRIu32 ":%" PRIu32 ")", child->name, child->info.major, child->info.minor); From prajnoha@sourceware.org Thu Oct 22 13:11:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Thu, 22 Oct 2009 13:11:00 -0000 Subject: LVM2 ./WHATS_NEW_DM udev/10-dm.rules.in udev/1 ... Message-ID: <20091022131134.2584.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-10-22 13:11:33 Modified files: . : WHATS_NEW_DM udev : 10-dm.rules.in 11-lvm.rules 12-dm-disk.rules 12-dm-permissions.rules 95-dm-notify.rules Log message: Use udev flags in the rules and cleanup the rules: - remove default permissions set in 95-dm-notify.rules (and add a hint in 12-dm-permissions.rules to set it by the user directly) - add multipath DM_ACTION=="PATH_FAILED" filter - remove unnecessary filters in the headers of the rules (we can simply use DM_UDEV_RULES_VSN instead) - fix symlink priorities in /dev/disk/ (snapshot volumes have low priority for FS UUID symlinks so it will not overwrite symlinks for the origin) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.306&r2=1.307 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/10-dm.rules.in.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/11-lvm.rules.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/12-dm-disk.rules.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/12-dm-permissions.rules.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/95-dm-notify.rules.diff?cvsroot=lvm2&r1=1.2&r2=1.3 --- LVM2/WHATS_NEW_DM 2009/10/22 12:55:47 1.306 +++ LVM2/WHATS_NEW_DM 2009/10/22 13:11:33 1.307 @@ -1,5 +1,6 @@ Version 1.02.39 - ===================================== + Remove strict default permissions for DM devices from 95-dm-notify.rules. Add dmsetup udevflags command to decode udev flags in given cookie value. Add udev flags support in libdevmapper. Make libdm ABI consistent when built with/without selinux support. --- LVM2/udev/10-dm.rules.in 2009/09/11 16:05:20 1.3 +++ LVM2/udev/10-dm.rules.in 2009/10/22 13:11:33 1.4 @@ -20,6 +20,9 @@ TEST!="$env{DM_SBIN_PATH}/dmsetup", ENV{DM_SBIN_PATH}="/usr/sbin" TEST!="$env{DM_SBIN_PATH}/dmsetup", GOTO="dm_end" +# Decode udev control flags and set environment variables appropriately. +ENV{DM_COOKIE}=="?*", IMPORT{program}="$env{DM_SBIN_PATH}/dmsetup udevflags $env{DM_COOKIE}" + ACTION!="add|change", GOTO="dm_end" # Normally, we operate on "change" events only. But when @@ -55,10 +58,11 @@ # possible future changes. ENV{DM_UDEV_RULES_VSN}="1" -ENV{DM_NAME}=="?*", NAME="$kernel", SYMLINK+="(DM_DIR)/$env{DM_NAME}" +ENV{DM_NAME}=="?*", SYMLINK+="(DM_DIR)/$env{DM_NAME}" -# We have to ignore further rule application for temporary -# cryptsetup devices. But don't forget to send the notification! +# We have to ignore further rule application for inappropriate events +# and devices. But still send the notification if cookie exists. +ENV{DM_UUID}=="mpath-?*", ENV{DM_ACTION}=="PATH_FAILED", GOTO="dm_last_rule" ENV{DM_UUID}=="CRYPT-TEMP-?*", GOTO="dm_last_rule" ENV{DM_UUID}!="?*", ENV{DM_NAME}=="temporary-cryptsetup-?*", GOTO="dm_last_rule" --- LVM2/udev/11-lvm.rules 2009/09/11 16:05:20 1.3 +++ LVM2/udev/11-lvm.rules 2009/10/22 13:11:33 1.4 @@ -8,17 +8,11 @@ # DM_VG_NAME - volume group name # DM_LV_LAYER - logical volume layer (blank if not set) -SUBSYSTEM!="block", GOTO="lvm_end" -KERNEL!="dm-[0-9]*", GOTO="lvm_end" +# "add" event is processed on coldplug only! ACTION!="add|change", GOTO="lvm_end" ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="lvm_end" ENV{DM_UUID}!="LVM-?*", GOTO="lvm_end" - -# Normally, we operate on "change" events only. But when -# coldplugging, there's an "add" event present. We have -# to recognize this and do our actions in this particular -# situation, too. -ACTION=="add", ENV{STARTUP}!="1", GOTO="lvm_end" +ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}=="1", GOTO="lvm_end" # Use DM name and split it up into its VG/LV/layer constituents. IMPORT{program}="$env{DM_SBIN_PATH}/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}" --- LVM2/udev/12-dm-disk.rules 2009/09/11 16:05:20 1.3 +++ LVM2/udev/12-dm-disk.rules 2009/10/22 13:11:33 1.4 @@ -5,16 +5,10 @@ # label and uuid are created only if the device is not # suspended. -SUBSYSTEM!="block", GOTO="dm_end" -KERNEL!="dm-[0-9]*", GOTO="dm_end" +# "add" event is processed on coldplug only! ACTION!="add|change", GOTO="dm_end" ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_end" - -# Normally, we operate on "change" events only. But when -# coldplugging, there's an "add" event present. We have to -# recognize this and do our actions in this particular -# situation, too. -ACTION=="add", ENV{STARTUP}!="1", GOTO="dm_end" +ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_end" SYMLINK+="disk/by-id/dm-name-$env{DM_NAME}" ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}" @@ -22,8 +16,7 @@ ENV{DM_SUSPENDED}=="1", GOTO="dm_end" IMPORT{program}="$env{DM_SBIN_PATH}/blkid -o udev -p $tempnode" -OPTIONS="link_priority=-100" -ENV{DM_LV_LAYER}=="?*", OPTIONS="link_priority=-90" +ENV{DM_UDEV_LOW_PRIORITY_FLAG}=="1", OPTIONS="link_priority=-100" ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" --- LVM2/udev/12-dm-permissions.rules 2009/09/23 12:52:52 1.4 +++ LVM2/udev/12-dm-permissions.rules 2009/10/22 13:11:33 1.5 @@ -15,9 +15,8 @@ # DM_VG_NAME - volume group name (not set if LVM device not present) # DM_LV_LAYER - logical volume layer (not set if LVM device not present) -SUBSYSTEM!="block", GOTO="dm_end" -KERNEL!="dm-[0-9]*", GOTO="dm_end" -ACTION!="change", GOTO="dm_end" +# "add" event is processed on coldplug only! +ACTION!="add|change", GOTO="dm_end" ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_end" # A few demonstrational examples... @@ -72,4 +71,7 @@ # listed at the beginning of this file (udev provides simple pattern matching by # using *, ? and [] that you can use, see 'man udev' for more information). +# Set default permissions for all DM devices if not set before. +# OWNER:="root", GROUP:="root", MODE:="660" + LABEL="dm_end" --- LVM2/udev/95-dm-notify.rules 2009/09/11 16:05:20 1.2 +++ LVM2/udev/95-dm-notify.rules 2009/10/22 13:11:33 1.3 @@ -4,13 +4,11 @@ # waiting for completion of udev rules. The process is identified by # a cookie value sent within "change" and "remove" events (the cookie # value is set before by that process for every action requested). -# Also, it sets default permissions for DM devices if not set already. SUBSYSTEM!="block", GOTO="dm_end" KERNEL!="dm-[0-9]*", GOTO="dm_end" ACTION!="change|remove", GOTO="dm_end" -ACTION=="change", OWNER:="root", GROUP:="root", MODE:="600" ENV{DM_COOKIE}=="?*", RUN+="$env{DM_SBIN_PATH}/dmsetup udevcomplete $env{DM_COOKIE}" LABEL="dm_end" From prajnoha@sourceware.org Thu Oct 22 13:12:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Thu, 22 Oct 2009 13:12:00 -0000 Subject: LVM2/man dmsetup.8.in Message-ID: <20091022131220.3689.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-10-22 13:12:20 Modified files: man : dmsetup.8.in Log message: Add manpage entry for dmsetup udevflags. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/dmsetup.8.in.diff?cvsroot=lvm2&r1=1.26&r2=1.27 --- LVM2/man/dmsetup.8.in 2009/09/23 12:52:52 1.26 +++ LVM2/man/dmsetup.8.in 2009/10/22 13:12:20 1.27 @@ -64,6 +64,9 @@ .B dmsetup mknodes .I [device_name] .br +.B dmsetup udevflags +.I cookie +.br .B dmsetup udevcomplete .I cookie .br @@ -303,6 +306,18 @@ .IP \fBtargets .br Displays the names and versions of the currently-loaded targets. +.br +.IP \fBudevflags +.I cookie +.br +Parses given cookie value and extracts any udev control flags encoded. +The output is in environment key format that is suitable for use in udev +rules. If the flag has its symbolic name assigned then the ouput is +DM_UDEV_FLAG_='1', DM_UDEV_FLAG='1' otherwise. +Subsystem udev flags don't have symbolic names assigned and these ones are +always reported as DM_SUBSYSTEM_UDEV_FLAG='1'. There are +16 udev flags altogether. +.br .IP \fBudevcomplete .I cookie .br From agk@sourceware.org Thu Oct 22 17:33:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Thu, 22 Oct 2009 17:33:00 -0000 Subject: LVM2 ./WHATS_NEW lib/cache/lvmcache.c Message-ID: <20091022173310.9275.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-22 17:33:09 Modified files: . : WHATS_NEW lib/cache : lvmcache.c Log message: Remember to clear 'global lock held during cache refresh' state after use. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1299&r2=1.1300 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/cache/lvmcache.c.diff?cvsroot=lvm2&r1=1.69&r2=1.70 --- LVM2/WHATS_NEW 2009/10/22 13:00:07 1.1299 +++ LVM2/WHATS_NEW 2009/10/22 17:33:09 1.1300 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Remember to clear 'global lock held during cache refresh' state after use. Use udev flags support in LVM. Delay announcing mirror monitoring to syslog until initialisation succeeded. Handle metadata with unknown segment types more gracefully. --- LVM2/lib/cache/lvmcache.c 2009/09/15 13:49:11 1.69 +++ LVM2/lib/cache/lvmcache.c 2009/10/22 17:33:09 1.70 @@ -52,8 +52,15 @@ if (!(_lock_hash = dm_hash_create(128))) return 0; - if (_vg_global_lock_held) + /* + * Reinitialising the cache clears the internal record of + * which locks are held. The global lock can be held during + * this operation so its state must be restored afterwards. + */ + if (_vg_global_lock_held) { lvmcache_lock_vgname(VG_GLOBAL, 0); + _vg_global_lock_held = 0; + } return 1; } From agk@sourceware.org Thu Oct 22 17:45:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Thu, 22 Oct 2009 17:45:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/lvm-functions.c Message-ID: <20091022174524.14544.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-22 17:45:24 Modified files: . : WHATS_NEW daemons/clvmd : lvm-functions.c Log message: Fix clvmd segfault when refresh_toolcontext fails. (brassow, bz 506986) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1300&r2=1.1301 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.69&r2=1.70 --- LVM2/WHATS_NEW 2009/10/22 17:33:09 1.1300 +++ LVM2/WHATS_NEW 2009/10/22 17:45:23 1.1301 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Fix clvmd segfault when refresh_toolcontext fails. Remember to clear 'global lock held during cache refresh' state after use. Use udev flags support in LVM. Delay announcing mirror monitoring to syslog until initialisation succeeded. --- LVM2/daemons/clvmd/lvm-functions.c 2009/10/01 14:14:17 1.69 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/10/22 17:45:24 1.70 @@ -601,20 +601,23 @@ int do_refresh_cache() { - int ret; DEBUGLOG("Refreshing context\n"); log_notice("Refreshing context"); pthread_mutex_lock(&lvm_lock); - ret = refresh_toolcontext(cmd); + if (!refresh_toolcontext(cmd)) { + pthread_mutex_unlock(&lvm_lock); + return -1; + } + init_full_scan_done(0); lvmcache_label_scan(cmd, 2); dm_pool_empty(cmd->mem); pthread_mutex_unlock(&lvm_lock); - return ret==1?0:-1; + return 0; } From agk@sourceware.org Fri Oct 23 01:24:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Fri, 23 Oct 2009 01:24:00 -0000 Subject: LVM2 ./WHATS_NEW tools/lvconvert.c Message-ID: <20091023012418.20664.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-23 01:24:17 Modified files: . : WHATS_NEW tools : lvconvert.c Log message: Cleanup mimagetmp LV if allocation fails for new lvconvert mimage. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1301&r2=1.1302 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvconvert.c.diff?cvsroot=lvm2&r1=1.94&r2=1.95 --- LVM2/WHATS_NEW 2009/10/22 17:45:23 1.1301 +++ LVM2/WHATS_NEW 2009/10/23 01:24:17 1.1302 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Cleanup mimagetmp LV if allocation fails for new lvconvert mimage. Fix clvmd segfault when refresh_toolcontext fails. Remember to clear 'global lock held during cache refresh' state after use. Use udev flags support in LVM. --- LVM2/tools/lvconvert.c 2009/10/21 22:19:39 1.94 +++ LVM2/tools/lvconvert.c 2009/10/23 01:24:17 1.95 @@ -532,7 +532,7 @@ const char *mirrorlog; unsigned corelog = 0; int r = 0; - struct logical_volume *log_lv; + struct logical_volume *log_lv, *layer_lv; int failed_mirrors = 0, failed_log = 0; struct dm_list *old_pvh = NULL, *remove_pvs = NULL; @@ -733,8 +733,21 @@ lv->le_count, lp->region_size), 0U, lp->pvh, lp->alloc, - MIRROR_BY_LV)) + MIRROR_BY_LV)) { + layer_lv = seg_lv(first_seg(lv), 0); + if (!remove_layer_from_lv(lv, layer_lv) || + !deactivate_lv(cmd, layer_lv) || + !lv_remove(layer_lv) || !vg_write(lv->vg) || + !vg_commit(lv->vg)) { + log_error("ABORTING: Failed to remove " + "temporary mirror layer %s.", + layer_lv->name); + log_error("Manual cleanup with vgcfgrestore " + "and dmsetup may be required."); + return 0; + } return_0; + } lv->status |= CONVERTING; lp->need_polling = 1; } From wysochanski@sourceware.org Mon Oct 26 02:36:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 26 Oct 2009 02:36:00 -0000 Subject: LVM2/man vgcreate.8.in vgextend.8.in Message-ID: <20091026023629.457.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-26 02:36:29 Modified files: man : vgcreate.8.in vgextend.8.in Log message: Minor fix to vgcreate/vgextend man pages for PHYSICAL DEVICE OPTIONS. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgcreate.8.in.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgextend.8.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 --- LVM2/man/vgcreate.8.in 2009/10/05 20:55:57 1.5 +++ LVM2/man/vgcreate.8.in 2009/10/26 02:36:29 1.6 @@ -21,7 +21,7 @@ .RB [ \-t | \-\-test ] .RB [ \-v | \-\-verbose ] .RB [ \-\-version ] -.RB [ PHYSICAL DEVICE OPTIONS ] +[ \fIPHYSICAL DEVICE OPTIONS\fP ] .I VolumeGroupName PhysicalDevicePath .RI [ PhysicalDevicePath ...] .SH DESCRIPTION --- LVM2/man/vgextend.8.in 2009/10/05 20:55:57 1.4 +++ LVM2/man/vgextend.8.in 2009/10/26 02:36:29 1.5 @@ -6,7 +6,7 @@ [\-A|\-\-autobackup y|n] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-t|\-\-test] [\-v|\-\-verbose] -.RB [ PHYSICAL DEVICE OPTIONS ] +[ \fIPHYSICAL DEVICE OPTIONS\fP ] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] .SH DESCRIPTION vgextend allows you to add one or more initialized physical volumes ( see From agk@sourceware.org Mon Oct 26 10:02:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Mon, 26 Oct 2009 10:02:00 -0000 Subject: LVM2 ./WHATS_NEW lib/activate/dev_manager.c li ... Message-ID: <20091026100200.24575.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-26 10:01:58 Modified files: . : WHATS_NEW lib/activate : dev_manager.c lib/display : display.c lib/metadata : lv_manip.c lib/report : report.c tools : lvconvert.c vgsplit.c Log message: Permit snapshots of mirrors. (brassow) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1302&r2=1.1303 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.160&r2=1.161 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/display/display.c.diff?cvsroot=lvm2&r1=1.105&r2=1.106 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_manip.c.diff?cvsroot=lvm2&r1=1.184&r2=1.185 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/report/report.c.diff?cvsroot=lvm2&r1=1.104&r2=1.105 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvconvert.c.diff?cvsroot=lvm2&r1=1.95&r2=1.96 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgsplit.c.diff?cvsroot=lvm2&r1=1.94&r2=1.95 --- LVM2/WHATS_NEW 2009/10/23 01:24:17 1.1302 +++ LVM2/WHATS_NEW 2009/10/26 10:01:56 1.1303 @@ -1,5 +1,6 @@ Version 2.02.54 - ===================================== + Permit snapshots of mirrors. Cleanup mimagetmp LV if allocation fails for new lvconvert mimage. Fix clvmd segfault when refresh_toolcontext fails. Remember to clear 'global lock held during cache refresh' state after use. --- LVM2/lib/activate/dev_manager.c 2009/10/22 13:00:07 1.160 +++ LVM2/lib/activate/dev_manager.c 2009/10/26 10:01:57 1.161 @@ -551,16 +551,17 @@ { char *name; const char *dlid; + const char *suffix = (lv_is_origin(lv)) ? "real" : NULL; /* * Build a name for the top layer. */ - if (!(name = build_dm_name(dm->mem, lv->vg->name, lv->name, NULL))) + if (!(name = build_dm_name(dm->mem, lv->vg->name, lv->name, suffix))) return_0; /* FIXME dm_pool_free ? */ - if (!(dlid = build_dlid(dm, lv->lvid.s, NULL))) { + if (!(dlid = build_dlid(dm, lv->lvid.s, suffix))) { log_error("dlid build failed for %s", lv->name); return 0; } --- LVM2/lib/display/display.c 2009/10/01 00:35:29 1.105 +++ LVM2/lib/display/display.c 2009/10/26 10:01:57 1.106 @@ -480,7 +480,7 @@ struct lvinfo info; int inkernel, snap_active = 0; char uuid[64] __attribute((aligned(8))); - struct lv_segment *snap_seg = NULL; + struct lv_segment *snap_seg = NULL, *mirror_seg = NULL; float snap_percent; /* fused, fsize; */ percent_range_t percent_range; @@ -563,6 +563,13 @@ display_size(cmd, (uint64_t) snap_seg->chunk_size)); } + if (lv->status & MIRRORED) { + mirror_seg = first_seg(lv); + log_print("Mirrored volumes %" PRIu32, mirror_seg->area_count); + if (lv->status & CONVERTING) + log_print("LV type Mirror undergoing conversion"); + } + log_print("Segments %u", dm_list_size(&lv->segments)); /********* FIXME Stripes & stripesize for each segment --- LVM2/lib/metadata/lv_manip.c 2009/09/28 17:46:16 1.184 +++ LVM2/lib/metadata/lv_manip.c 2009/10/26 10:01:57 1.185 @@ -2936,11 +2936,12 @@ "supported yet"); return 0; } - if (org->status & MIRROR_IMAGE || - org->status & MIRROR_LOG || - org->status & MIRRORED) { - log_error("Snapshots and mirrors may not yet " - "be mixed."); + if ((org->status & MIRROR_IMAGE) || + (org->status & MIRROR_LOG)) { + log_error("Snapshots of mirror %ss " + "are not supported", + (org->status & MIRROR_LOG) ? + "log" : "image"); return 0; } --- LVM2/lib/report/report.c 2009/10/01 01:04:27 1.104 +++ LVM2/lib/report/report.c 2009/10/26 10:01:57 1.105 @@ -311,6 +311,11 @@ repstr[0] = 'p'; else if (lv->status & CONVERTING) repstr[0] = 'c'; + else if (lv->status & VIRTUAL) + repstr[0] = 'v'; + /* Origin takes precedence over Mirror */ + else if (lv_is_origin(lv)) + repstr[0] = 'o'; else if (lv->status & MIRRORED) { if (lv->status & MIRROR_NOTSYNCED) repstr[0] = 'M'; @@ -323,10 +328,6 @@ repstr[0] = 'I'; else if (lv->status & MIRROR_LOG) repstr[0] = 'l'; - else if (lv->status & VIRTUAL) - repstr[0] = 'v'; - else if (lv_is_origin(lv)) - repstr[0] = 'o'; else if (lv_is_cow(lv)) repstr[0] = 's'; else --- LVM2/tools/lvconvert.c 2009/10/23 01:24:17 1.95 +++ LVM2/tools/lvconvert.c 2009/10/26 10:01:57 1.96 @@ -713,6 +713,20 @@ "LV: use lvchange --resync first."); return 0; } + + /* + * We allow snapshots of mirrors, but for now, we + * do not allow up converting mirrors that are under + * snapshots. The layering logic is somewhat complex, + * and preliminary test show that the conversion can't + * seem to get the correct %'age of completion. + */ + if (lv_is_origin(lv)) { + log_error("Can't add additional mirror images to " + "mirrors that are under snapshots"); + return 0; + } + /* * Log addition/removal should be done before the layer * insertion to make the end result consistent with @@ -891,12 +905,6 @@ return ECMD_FAILED; } - if (lv_is_origin(lv)) { - log_error("Can't convert logical volume \"%s\" under snapshot", - lv->name); - return ECMD_FAILED; - } - if (lv_is_cow(lv)) { log_error("Can't convert snapshot logical volume \"%s\"", lv->name); --- LVM2/tools/vgsplit.c 2009/09/14 22:47:50 1.94 +++ LVM2/tools/vgsplit.c 2009/10/26 10:01:57 1.95 @@ -411,14 +411,15 @@ if (!(_move_lvs(vg_from, vg_to))) goto_bad; - /* Move required snapshots across */ - if (!(_move_snapshots(vg_from, vg_to))) - goto_bad; - + /* FIXME Separate the 'move' from the 'validation' to fix dev stacks */ /* Move required mirrors across */ if (!(_move_mirrors(vg_from, vg_to))) goto_bad; + /* Move required snapshots across */ + if (!(_move_snapshots(vg_from, vg_to))) + goto_bad; + /* Split metadata areas and check if both vgs have at least one area */ if (!(vg_split_mdas(cmd, vg_from, vg_to)) && vg_from->pv_count) { log_error("Cannot split: Nowhere to store metadata for new Volume Group"); From wysochanski@sourceware.org Mon Oct 26 13:41:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 26 Oct 2009 13:41:00 -0000 Subject: LVM2/man lvconvert.8.in lvcreate.8.in Message-ID: <20091026134113.27092.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-26 13:41:13 Modified files: man : lvconvert.8.in lvcreate.8.in Log message: Update lvcreate/lvconvert man pages to explain PhysicalVolume parameter. Addresses rhbz 500177. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/lvconvert.8.in.diff?cvsroot=lvm2&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/lvcreate.8.in.diff?cvsroot=lvm2&r1=1.11&r2=1.12 --- LVM2/man/lvconvert.8.in 2009/08/10 17:23:04 1.8 +++ LVM2/man/lvconvert.8.in 2009/10/26 13:41:13 1.9 @@ -35,6 +35,15 @@ lvconvert will change a linear logical volume to a mirror logical volume or to a snapshot of linear volume and vice versa. It is also used to add and remove disk logs from mirror devices. +.br +If the conversion requires allocation of physical extents (for +example, when converting from linear to mirror) and you specify +one or more PhysicalVolumes (optionally with ranges of physical +extents), allocation of physical extents will be restricted to +these physical extents. If the conversion frees physical extents +(for example, when converting from a mirror to a linear, or reducing +mirror legs) and you specify one or more PhysicalVolumes, +the freed extents come first from the specified PhysicalVolumes. .SH OPTIONS See \fBlvm\fP for common options. .br @@ -131,6 +140,12 @@ converts linear logical volume "vg00/lvol1" to a two-way mirror, using physical extents /dev/sda:0-15 and /dev/sdb:0-15 for allocation of new extents. +.br +"lvconvert -m0 vg00/lvmirror1 /dev/sda +.br +converts mirror logical volume "vg00/lvmirror1" to linear, freeing physical +extents from /dev/sda. + .SH SEE ALSO .BR lvm (8), .BR vgcreate (8), --- LVM2/man/lvcreate.8.in 2009/09/29 15:11:06 1.11 +++ LVM2/man/lvcreate.8.in 2009/10/26 13:41:13 1.12 @@ -41,7 +41,9 @@ ) with other physical volumes or by reducing existing logical volumes of this volume group in size ( see .B lvreduce(8) -). +). If you specify one or more PhysicalVolumes, allocation of physical +extents will be restricted to these volumes. +.br .br The second form supports the creation of snapshot logical volumes which keep the contents of the original logical volume for backup purposes. From prajnoha@sourceware.org Mon Oct 26 14:04:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Mon, 26 Oct 2009 14:04:00 -0000 Subject: LVM2/udev 11-dm-lvm.rules 13-dm-disk.rules 11- ... Message-ID: <20091026140432.24014.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-10-26 14:04:31 Added files: udev : 11-dm-lvm.rules 13-dm-disk.rules Removed files: udev : 11-lvm.rules 12-dm-disk.rules Log message: Rename 11-lvm.rules to 11-dm-lvm.rules and 12-dm-disk.rules to 13-dm-disk.rules. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/11-dm-lvm.rules.diff?cvsroot=lvm2&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/13-dm-disk.rules.diff?cvsroot=lvm2&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/11-lvm.rules.diff?cvsroot=lvm2&r1=1.4&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/12-dm-disk.rules.diff?cvsroot=lvm2&r1=1.4&r2=NONE /cvs/lvm2/LVM2/udev/11-dm-lvm.rules,v --> standard output revision 1.1 --- LVM2/udev/11-dm-lvm.rules +++ - 2009-10-26 14:04:32.114834000 +0000 @@ -0,0 +1,26 @@ +# Udev rules for LVM. +# +# These rules create symlinks for LVM logical volumes in +# /dev/VG directory (VG is an actual VG name). Some udev +# environment variables are set (they can be used in later +# rules as well): +# DM_LV_NAME - logical volume name +# DM_VG_NAME - volume group name +# DM_LV_LAYER - logical volume layer (blank if not set) + +# "add" event is processed on coldplug only! +ACTION!="add|change", GOTO="lvm_end" +ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="lvm_end" +ENV{DM_UUID}!="LVM-?*", GOTO="lvm_end" +ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}=="1", GOTO="lvm_end" + +# Use DM name and split it up into its VG/LV/layer constituents. +IMPORT{program}="$env{DM_SBIN_PATH}/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}" + +# Do not create symlinks for hidden subdevices. +ENV{DM_LV_NAME}=="?*_mimage_[0-9]*|pvmove?*|?*_vorigin", GOTO="lvm_end" + +# Create symlinks for top-level devices only. +ENV{DM_VG_NAME}=="?*", ENV{DM_LV_NAME}=="?*", ENV{DM_LV_LAYER}!="?*", SYMLINK+="$env{DM_VG_NAME}/$env{DM_LV_NAME}" + +LABEL="lvm_end" /cvs/lvm2/LVM2/udev/13-dm-disk.rules,v --> standard output revision 1.1 --- LVM2/udev/13-dm-disk.rules +++ - 2009-10-26 14:04:32.214815000 +0000 @@ -0,0 +1,23 @@ +# Udev rules for device-mapper devices. +# +# These rules create symlinks in /dev/disk directory. +# Symlinks that depend on probing filesystem type, +# label and uuid are created only if the device is not +# suspended. + +# "add" event is processed on coldplug only! +ACTION!="add|change", GOTO="dm_end" +ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_end" +ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_end" + +SYMLINK+="disk/by-id/dm-name-$env{DM_NAME}" +ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}" + +ENV{DM_SUSPENDED}=="1", GOTO="dm_end" + +IMPORT{program}="$env{DM_SBIN_PATH}/blkid -o udev -p $tempnode" +ENV{DM_UDEV_LOW_PRIORITY_FLAG}=="1", OPTIONS="link_priority=-100" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +LABEL="dm_end" From prajnoha@sourceware.org Mon Oct 26 14:29:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Mon, 26 Oct 2009 14:29:00 -0000 Subject: LVM2 lib/activate/dev_manager.c libdm/libdevma ... Message-ID: <20091026142936.15176.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-10-26 14:29:35 Modified files: lib/activate : dev_manager.c libdm : libdevmapper.h libdm-common.c libdm-common.h libdm-deptree.c libdm/ioctl : libdm-iface.c tools : dmsetup.c udev : 10-dm.rules.in 11-dm-lvm.rules 13-dm-disk.rules Makefile.in Log message: Several changes to udev support code: - we have these levels when the udev rules are processed: 10-dm.rules --> [11-dm-.rules] --> [12-dm-permissions.rules] --> 13-dm-disk.rules --> [...all the other foreign rules...] --> 95-dm-notify.rules - each level can be disabled now by DM_UDEV_DISABLE_{DM, SUBSYSTEM, DISK, OTHER}_RULES_FLAG - add DM_UDEV_DISABLE_DM_RULES_FLAG to disable 10-dm.rules - add DM_UDEV_DISABLE_OTHER_RULES_FLAG to disable all the other (non-dm) rules. We cutoff these rules by using the 'last_rule', so this one should really be used with great care and in well-founded situations. We use this for lvm's hidden and layer devices now. - add a parameter for add_dev_node, rm_dev_node and rename_dev_node so it's possible to switch on/off udev checks - use DM_UDEV_DISABLE_DM_RULES_FLAG and DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG if there's no cookie set and we have resume, remove and rename ioctl. This could happen when someone uses the libdevmapper that is compiled with udev_sync but the software does not make use of it. This way we can switch off the rules and fallback to libdevmapper node creation so there's no udev/libdevmapper race. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.161&r2=1.162 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdevmapper.h.diff?cvsroot=lvm2&r1=1.99&r2=1.100 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.c.diff?cvsroot=lvm2&r1=1.87&r2=1.88 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.h.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-deptree.c.diff?cvsroot=lvm2&r1=1.60&r2=1.61 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/ioctl/libdm-iface.c.diff?cvsroot=lvm2&r1=1.63&r2=1.64 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/dmsetup.c.diff?cvsroot=lvm2&r1=1.125&r2=1.126 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/10-dm.rules.in.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/11-dm-lvm.rules.diff?cvsroot=lvm2&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/13-dm-disk.rules.diff?cvsroot=lvm2&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/Makefile.in.diff?cvsroot=lvm2&r1=1.3&r2=1.4 --- LVM2/lib/activate/dev_manager.c 2009/10/26 10:01:57 1.161 +++ LVM2/lib/activate/dev_manager.c 2009/10/26 14:29:33 1.162 @@ -1026,7 +1026,8 @@ if (layer || !lv_is_visible(lv)) udev_flags |= DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG | - DM_UDEV_DISABLE_DISK_RULES_FLAG; + DM_UDEV_DISABLE_DISK_RULES_FLAG | + DM_UDEV_DISABLE_OTHER_RULES_FLAG; if (lv_is_cow(lv)) udev_flags |= DM_UDEV_LOW_PRIORITY_FLAG; --- LVM2/libdm/libdevmapper.h 2009/10/22 13:00:07 1.99 +++ LVM2/libdm/libdevmapper.h 2009/10/26 14:29:33 1.100 @@ -1035,17 +1035,33 @@ #define DM_COOKIE_MAGIC 0x0D4D #define DM_UDEV_FLAGS_MASK 0xFFFF0000 #define DM_UDEV_FLAGS_SHIFT 16 + +/* + * DM_UDEV_DISABLE_DM_RULES_FLAG is set in case we need to disable + * basic device-mapper udev rules that create symlinks in /dev/ + * directory. However, we can't reliably prevent creating default + * nodes by udev (commonly /dev/dm-X, where X is a number). + */ +#define DM_UDEV_DISABLE_DM_RULES_FLAG 0x0001 /* * DM_UDEV_DISABLE_SUBSYTEM_RULES_FLAG is set in case we need to disable * subsystem udev rules, but still we need the general DM udev rules to * be applied (to create the nodes and symlinks under /dev and /dev/disk). */ -#define DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG 0x0001 +#define DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG 0x0002 /* * DM_UDEV_DISABLE_DISK_RULES_FLAG is set in case we need to disable * general DM rules that set symlinks in /dev/disk directory. */ -#define DM_UDEV_DISABLE_DISK_RULES_FLAG 0x0002 +#define DM_UDEV_DISABLE_DISK_RULES_FLAG 0x0004 +/* + * DM_UDEV_DISABLE_OTHER_RULES_FLAG is set in case we need to disable + * all the other rules that are not general device-mapper nor subsystem + * related (the rules belong to other software or packages). Use this + * flag with care since it will cutoff the rule processing after the + * last device-mapper/subsytem rule is applied. + */ +#define DM_UDEV_DISABLE_OTHER_RULES_FLAG 0x0008 /* * DM_UDEV_LOW_PRIORITY_FLAG is set in case we need to instruct the * udev rules to give low priority to the device that is currently @@ -1054,7 +1070,7 @@ * Common situation is a name based on FS UUID while using origin and * snapshot devices. */ -#define DM_UDEV_LOW_PRIORITY_FLAG 0x0004 +#define DM_UDEV_LOW_PRIORITY_FLAG 0x0010 int dm_cookie_supported(void); --- LVM2/libdm/libdm-common.c 2009/10/22 12:55:47 1.87 +++ LVM2/libdm/libdm-common.c 2009/10/26 14:29:34 1.88 @@ -179,6 +179,7 @@ dmt->no_open_count = 0; dmt->read_ahead = DM_READ_AHEAD_AUTO; dmt->read_ahead_flags = 0; + dmt->event_nr = 0; dmt->cookie_set = 0; return dmt; @@ -401,7 +402,7 @@ } static int _add_dev_node(const char *dev_name, uint32_t major, uint32_t minor, - uid_t uid, gid_t gid, mode_t mode) + uid_t uid, gid_t gid, mode_t mode, int check_udev) { char path[PATH_MAX]; struct stat info; @@ -426,7 +427,7 @@ dev_name); return 0; } - } else if (dm_udev_get_sync_support()) + } else if (dm_udev_get_sync_support() && check_udev) log_warn("%s not set up by udev: Falling back to direct " "node creation.", path); @@ -451,7 +452,7 @@ return 1; } -static int _rm_dev_node(const char *dev_name) +static int _rm_dev_node(const char *dev_name, int check_udev) { char path[PATH_MAX]; struct stat info; @@ -460,7 +461,7 @@ if (stat(path, &info) < 0) return 1; - else if (dm_udev_get_sync_support()) + else if (dm_udev_get_sync_support() && check_udev) log_warn("Node %s was not removed by udev. " "Falling back to direct node removal.", path); @@ -474,7 +475,8 @@ return 1; } -static int _rename_dev_node(const char *old_name, const char *new_name) +static int _rename_dev_node(const char *old_name, const char *new_name, + int check_udev) { char oldpath[PATH_MAX]; char newpath[PATH_MAX]; @@ -489,7 +491,7 @@ "is already present", newpath); return 0; } - else if (dm_udev_get_sync_support()) { + else if (dm_udev_get_sync_support() && check_udev) { if (stat(oldpath, &info) < 0 && errno == ENOENT) /* assume udev already deleted this */ @@ -499,7 +501,7 @@ "by udev but old node is still present. " "Falling back to direct old node removal.", oldpath, newpath); - return _rm_dev_node(old_name); + return _rm_dev_node(old_name, 0); } } @@ -513,7 +515,7 @@ return 0; } } - else if (dm_udev_get_sync_support()) + else if (dm_udev_get_sync_support() && check_udev) log_warn("The node %s should have been renamed to %s " "by udev but new node is not present. " "Falling back to direct node rename.", @@ -652,15 +654,16 @@ static int _do_node_op(node_op_t type, const char *dev_name, uint32_t major, uint32_t minor, uid_t uid, gid_t gid, mode_t mode, const char *old_name, uint32_t read_ahead, - uint32_t read_ahead_flags) + uint32_t read_ahead_flags, int check_udev) { switch (type) { case NODE_ADD: - return _add_dev_node(dev_name, major, minor, uid, gid, mode); + return _add_dev_node(dev_name, major, minor, uid, gid, + mode, check_udev); case NODE_DEL: - return _rm_dev_node(dev_name); + return _rm_dev_node(dev_name, check_udev); case NODE_RENAME: - return _rename_dev_node(old_name, dev_name); + return _rename_dev_node(old_name, dev_name, check_udev); case NODE_READ_AHEAD: return _set_dev_node_read_ahead(dev_name, read_ahead, read_ahead_flags); @@ -683,6 +686,7 @@ uint32_t read_ahead; uint32_t read_ahead_flags; char *old_name; + int check_udev; char names[0]; }; @@ -696,7 +700,7 @@ static int _stack_node_op(node_op_t type, const char *dev_name, uint32_t major, uint32_t minor, uid_t uid, gid_t gid, mode_t mode, const char *old_name, uint32_t read_ahead, - uint32_t read_ahead_flags) + uint32_t read_ahead_flags, int check_udev) { struct node_op_parms *nop; struct dm_list *noph, *nopht; @@ -730,6 +734,7 @@ nop->mode = mode; nop->read_ahead = read_ahead; nop->read_ahead_flags = read_ahead_flags; + nop->check_udev = check_udev; _store_str(&pos, &nop->dev_name, dev_name); _store_str(&pos, &nop->old_name, old_name); @@ -748,35 +753,37 @@ nop = dm_list_item(noph, struct node_op_parms); _do_node_op(nop->type, nop->dev_name, nop->major, nop->minor, nop->uid, nop->gid, nop->mode, nop->old_name, - nop->read_ahead, nop->read_ahead_flags); + nop->read_ahead, nop->read_ahead_flags, + nop->check_udev); dm_list_del(&nop->list); dm_free(nop); } } int add_dev_node(const char *dev_name, uint32_t major, uint32_t minor, - uid_t uid, gid_t gid, mode_t mode) + uid_t uid, gid_t gid, mode_t mode, int check_udev) { log_debug("%s: Stacking NODE_ADD (%" PRIu32 ",%" PRIu32 ") %u:%u 0%o", dev_name, major, minor, uid, gid, mode); - return _stack_node_op(NODE_ADD, dev_name, major, minor, uid, gid, mode, - "", 0, 0); + return _stack_node_op(NODE_ADD, dev_name, major, minor, uid, + gid, mode, "", 0, 0, check_udev); } -int rename_dev_node(const char *old_name, const char *new_name) +int rename_dev_node(const char *old_name, const char *new_name, int check_udev) { log_debug("%s: Stacking NODE_RENAME to %s", old_name, new_name); - return _stack_node_op(NODE_RENAME, new_name, 0, 0, 0, 0, 0, old_name, - 0, 0); + return _stack_node_op(NODE_RENAME, new_name, 0, 0, 0, + 0, 0, old_name, 0, 0, check_udev); } -int rm_dev_node(const char *dev_name) +int rm_dev_node(const char *dev_name, int check_udev) { log_debug("%s: Stacking NODE_DEL (replaces other stacked ops)", dev_name); - return _stack_node_op(NODE_DEL, dev_name, 0, 0, 0, 0, 0, "", 0, 0); + return _stack_node_op(NODE_DEL, dev_name, 0, 0, 0, + 0, 0, "", 0, 0, check_udev); } int set_dev_node_read_ahead(const char *dev_name, uint32_t read_ahead, @@ -788,8 +795,8 @@ log_debug("%s: Stacking NODE_READ_AHEAD %" PRIu32 " (flags=%" PRIu32 ")", dev_name, read_ahead, read_ahead_flags); - return _stack_node_op(NODE_READ_AHEAD, dev_name, 0, 0, 0, 0, 0, "", - read_ahead, read_ahead_flags); + return _stack_node_op(NODE_READ_AHEAD, dev_name, 0, 0, 0, 0, + 0, "", read_ahead, read_ahead_flags, 0); } void update_devs(void) --- LVM2/libdm/libdm-common.h 2007/11/30 14:59:57 1.5 +++ LVM2/libdm/libdm-common.h 2009/10/26 14:29:34 1.6 @@ -23,9 +23,10 @@ const char *type, const char *params); int add_dev_node(const char *dev_name, uint32_t minor, uint32_t major, - uid_t uid, gid_t gid, mode_t mode); -int rm_dev_node(const char *dev_name); -int rename_dev_node(const char *old_name, const char *new_name); + uid_t uid, gid_t gid, mode_t mode, int check_udev); +int rm_dev_node(const char *dev_name, int check_udev); +int rename_dev_node(const char *old_name, const char *new_name, + int check_udev); int get_dev_node_read_ahead(const char *dev_name, uint32_t *read_ahead); int set_dev_node_read_ahead(const char *dev_name, uint32_t read_ahead, uint32_t read_ahead_flags); --- LVM2/libdm/libdm-deptree.c 2009/10/22 13:00:07 1.60 +++ LVM2/libdm/libdm-deptree.c 2009/10/26 14:29:34 1.61 @@ -873,7 +873,7 @@ r = dm_task_run(dmt); /* FIXME Until kernel returns actual name so dm-ioctl.c can handle it */ - rm_dev_node(name); + rm_dev_node(name, dmt->cookie_set); /* FIXME Remove node from tree or mark invalid? */ --- LVM2/libdm/ioctl/libdm-iface.c 2009/10/22 12:55:48 1.63 +++ LVM2/libdm/ioctl/libdm-iface.c 2009/10/26 14:29:34 1.64 @@ -731,24 +731,24 @@ switch (dmt->type) { case DM_DEVICE_CREATE: add_dev_node(dmt->dev_name, MAJOR(dmi->dev), MINOR(dmi->dev), - dmt->uid, dmt->gid, dmt->mode); + dmt->uid, dmt->gid, dmt->mode, 0); break; case DM_DEVICE_REMOVE: - rm_dev_node(dmt->dev_name); + rm_dev_node(dmt->dev_name, 0); break; case DM_DEVICE_RENAME: - rename_dev_node(dmt->dev_name, dmt->newname); + rename_dev_node(dmt->dev_name, dmt->newname, 0); break; case DM_DEVICE_MKNODES: if (dmi->flags & DM_EXISTS_FLAG) add_dev_node(dmt->dev_name, MAJOR(dmi->dev), - MINOR(dmi->dev), - dmt->uid, dmt->gid, dmt->mode); + MINOR(dmi->dev), dmt->uid, + dmt->gid, dmt->mode, 0); else - rm_dev_node(dmt->dev_name); + rm_dev_node(dmt->dev_name, 0); break; case DM_DEVICE_STATUS: @@ -1534,6 +1534,8 @@ task->uid = dmt->uid; task->gid = dmt->gid; task->mode = dmt->mode; + /* FIXME: Just for udev_check in dm_task_run. Can we avoid this? */ + task->cookie_set = dmt->cookie_set; r = dm_task_run(task); dm_task_destroy(task); @@ -1690,6 +1692,36 @@ if (dmt->no_open_count) dmi->flags |= DM_SKIP_BDGET_FLAG; + /* + * Prevent udev vs. libdevmapper race when processing nodes and + * symlinks. This can happen when the udev rules are installed and + * udev synchronisation code is enabled in libdevmapper but the + * software using libdevmapper does not make use of it (by not calling + * dm_task_set_cookie before). We need to instruct the udev rules not + * to be applied at all in this situation so we can gracefully fallback + * to libdevmapper's node and symlink creation code. + */ + if (dm_udev_get_sync_support() && !dmt->cookie_set && + (dmt->type == DM_DEVICE_RESUME || + dmt->type == DM_DEVICE_REMOVE || + dmt->type == DM_DEVICE_RENAME)) { + log_debug("Cookie value is not set while trying to call " + "DM_DEVICE_RESUME, DM_DEVICE_REMOVE or DM_DEVICE_RENAME " + "ioctl. Please, consider using libdevmapper's udev " + "synchronisation interface or disable it explicitly " + "by calling dm_udev_set_sync_support(0)."); + log_debug("Switching off device-mapper and all subsystem related " + "udev rules. Falling back to libdevmapper node creation."); + /* + * Disable general dm and subsystem rules but keep dm disk rules + * if not flagged out explicitly before. We need /dev/disk content + * for the software that expects it. + */ + dmi->event_nr |= (DM_UDEV_DISABLE_DM_RULES_FLAG | + DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG) << + DM_UDEV_FLAGS_SHIFT; + } + log_debug("dm %s %s %s%s%s %s%.0d%s%.0d%s" "%s%c%c%s %.0" PRIu64 " %s [%u]", _cmd_data_v4[dmt->type].name, @@ -1741,6 +1773,7 @@ { struct dm_ioctl *dmi; unsigned command; + int check_udev; #ifdef DM_COMPAT if (_dm_version == 1) @@ -1795,24 +1828,28 @@ } } + check_udev = dmt->cookie_set && + !(dmt->event_nr >> DM_UDEV_FLAGS_SHIFT & + DM_UDEV_DISABLE_DM_RULES_FLAG); + switch (dmt->type) { case DM_DEVICE_CREATE: if (dmt->dev_name && *dmt->dev_name) add_dev_node(dmt->dev_name, MAJOR(dmi->dev), MINOR(dmi->dev), dmt->uid, dmt->gid, - dmt->mode); + dmt->mode, check_udev); break; - case DM_DEVICE_REMOVE: /* FIXME Kernel needs to fill in dmi->name */ if (dmt->dev_name) - rm_dev_node(dmt->dev_name); + rm_dev_node(dmt->dev_name, check_udev); break; case DM_DEVICE_RENAME: /* FIXME Kernel needs to fill in dmi->name */ if (dmt->dev_name) - rename_dev_node(dmt->dev_name, dmt->newname); + rename_dev_node(dmt->dev_name, dmt->newname, + check_udev); break; case DM_DEVICE_RESUME: @@ -1824,10 +1861,10 @@ case DM_DEVICE_MKNODES: if (dmi->flags & DM_EXISTS_FLAG) add_dev_node(dmi->name, MAJOR(dmi->dev), - MINOR(dmi->dev), - dmt->uid, dmt->gid, dmt->mode); + MINOR(dmi->dev), dmt->uid, + dmt->gid, dmt->mode, 0); else if (dmt->dev_name) - rm_dev_node(dmt->dev_name); + rm_dev_node(dmt->dev_name, 0); break; case DM_DEVICE_STATUS: --- LVM2/tools/dmsetup.c 2009/10/22 12:55:48 1.125 +++ LVM2/tools/dmsetup.c 2009/10/26 14:29:34 1.126 @@ -779,10 +779,12 @@ uint32_t cookie; uint16_t flags; int i; - static const char *dm_flag_names[] = {"DISABLE_SUBSYSTEM_RULES", + static const char *dm_flag_names[] = {"DISABLE_DM_RULES", + "DISABLE_SUBSYSTEM_RULES", "DISABLE_DISK_RULES", + "DISABLE_OTHER_RULES", "LOW_PRIORITY", - 0, 0, 0, 0, 0}; + 0, 0, 0}; if (!(cookie = _get_cookie_value(argv[1]))) return 0; --- LVM2/udev/10-dm.rules.in 2009/10/22 13:11:33 1.4 +++ LVM2/udev/10-dm.rules.in 2009/10/26 14:29:34 1.5 @@ -21,8 +21,16 @@ TEST!="$env{DM_SBIN_PATH}/dmsetup", GOTO="dm_end" # Decode udev control flags and set environment variables appropriately. +# These flags are encoded in DM_COOKIE variable that was introduced in +# kernel version 2.6.31. Therefore, we can use this feature with +# kernels >= 2.6.31 only. ENV{DM_COOKIE}=="?*", IMPORT{program}="$env{DM_SBIN_PATH}/dmsetup udevflags $env{DM_COOKIE}" +# Normally, we would test for DM_UDEV_DISABLE_DM_RULES_FLAG here and skip +# the rules if set. However, we need to set DM_* environment variables +# for now to properly filter out inappropriate events. This dependency +# might be removed in the future. + ACTION!="add|change", GOTO="dm_end" # Normally, we operate on "change" events only. But when @@ -58,18 +66,19 @@ # possible future changes. ENV{DM_UDEV_RULES_VSN}="1" -ENV{DM_NAME}=="?*", SYMLINK+="(DM_DIR)/$env{DM_NAME}" +ENV{DM_UDEV_DISABLE_DM_RULES_FLAG}!="1", ENV{DM_NAME}=="?*", SYMLINK+="(DM_DIR)/$env{DM_NAME}" # We have to ignore further rule application for inappropriate events # and devices. But still send the notification if cookie exists. -ENV{DM_UUID}=="mpath-?*", ENV{DM_ACTION}=="PATH_FAILED", GOTO="dm_last_rule" -ENV{DM_UUID}=="CRYPT-TEMP-?*", GOTO="dm_last_rule" -ENV{DM_UUID}!="?*", ENV{DM_NAME}=="temporary-cryptsetup-?*", GOTO="dm_last_rule" +ENV{DM_UUID}=="mpath-?*", ENV{DM_ACTION}=="PATH_FAILED", GOTO="dm_disable" +ENV{DM_UUID}=="CRYPT-TEMP-?*", GOTO="dm_disable" +ENV{DM_UUID}!="?*", ENV{DM_NAME}=="temporary-cryptsetup-?*", GOTO="dm_disable" GOTO="dm_end" -LABEL="dm_last_rule" -ENV{DM_COOKIE}=="?*", RUN+="$env{DM_SBIN_PATH}/dmsetup udevcomplete $env{DM_COOKIE}" -OPTIONS+="last_rule" +LABEL="dm_disable" +ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="1" +ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1" +ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" LABEL="dm_end" --- LVM2/udev/11-dm-lvm.rules 2009/10/26 14:04:31 1.1 +++ LVM2/udev/11-dm-lvm.rules 2009/10/26 14:29:34 1.2 @@ -17,7 +17,7 @@ # Use DM name and split it up into its VG/LV/layer constituents. IMPORT{program}="$env{DM_SBIN_PATH}/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}" -# Do not create symlinks for hidden subdevices. +# Do not create symlinks for inappropriate subdevices. ENV{DM_LV_NAME}=="?*_mimage_[0-9]*|pvmove?*|?*_vorigin", GOTO="lvm_end" # Create symlinks for top-level devices only. --- LVM2/udev/13-dm-disk.rules 2009/10/26 14:04:31 1.1 +++ LVM2/udev/13-dm-disk.rules 2009/10/26 14:29:34 1.2 @@ -7,17 +7,26 @@ # "add" event is processed on coldplug only! ACTION!="add|change", GOTO="dm_end" -ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_end" -ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_end" +ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_other" +ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_other" SYMLINK+="disk/by-id/dm-name-$env{DM_NAME}" ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}" -ENV{DM_SUSPENDED}=="1", GOTO="dm_end" +ENV{DM_SUSPENDED}=="1", GOTO="dm_other" IMPORT{program}="$env{DM_SBIN_PATH}/blkid -o udev -p $tempnode" ENV{DM_UDEV_LOW_PRIORITY_FLAG}=="1", OPTIONS="link_priority=-100" ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" +# Cutoff all subsequent rules if instructed by a flag. +# This flag should be used in well-founded situations only to prevent +# any problems that could arise when processing this event further by +# foreign rules (various temporary and hidden devices mostly). +LABEL="dm_other" +ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}!="1", GOTO="dm_end" +ENV{DM_COOKIE}=="?*", RUN+="$env{DM_SBIN_PATH}/dmsetup udevcomplete $env{DM_COOKIE}" +OPTIONS+="last_rule" + LABEL="dm_end" --- LVM2/udev/Makefile.in 2009/10/02 19:10:38 1.3 +++ LVM2/udev/Makefile.in 2009/10/26 14:29:34 1.4 @@ -16,8 +16,8 @@ top_builddir = @top_builddir@ VPATH = @srcdir@ -DM_RULES=10-dm.rules 12-dm-disk.rules 95-dm-notify.rules -LVM_RULES=11-lvm.rules +DM_RULES=10-dm.rules 13-dm-disk.rules 95-dm-notify.rules +LVM_RULES=11-dm-lvm.rules DM_DIR=$(shell grep "\#define DM_DIR" $(top_srcdir)/libdm/misc/dm-ioctl.h | awk '{print $$3}') CLEAN_TARGETS=10-dm.rules From wysochanski@sourceware.org Mon Oct 26 14:37:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 26 Oct 2009 14:37:00 -0000 Subject: LVM2 ./WHATS_NEW man/lvdisplay.8.in man/lvs.8. ... Message-ID: <20091026143711.17248.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-26 14:37:09 Modified files: . : WHATS_NEW man : lvdisplay.8.in lvs.8.in lvscan.8.in pvdisplay.8.in pvs.8.in vgdisplay.8.in vgs.8.in tools : args.h commands.h vgdisplay.c Log message: Document --all option in man pages, cleanup {pv|vg|lv}{s|display} man pages. Option --all is only partially documented currently, so document in all commands. Also make {pv|vg|lv}{display|s} man pages consistent with help output. Remove ununsed 'disk_ARG' parameter. Leave --trustcache out of the man page output. Update --units argument to show all possible units. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1303&r2=1.1304 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/lvdisplay.8.in.diff?cvsroot=lvm2&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/lvs.8.in.diff?cvsroot=lvm2&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/lvscan.8.in.diff?cvsroot=lvm2&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/pvdisplay.8.in.diff?cvsroot=lvm2&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/pvs.8.in.diff?cvsroot=lvm2&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgdisplay.8.in.diff?cvsroot=lvm2&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/vgs.8.in.diff?cvsroot=lvm2&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/args.h.diff?cvsroot=lvm2&r1=1.68&r2=1.69 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/commands.h.diff?cvsroot=lvm2&r1=1.134&r2=1.135 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgdisplay.c.diff?cvsroot=lvm2&r1=1.26&r2=1.27 --- LVM2/WHATS_NEW 2009/10/26 10:01:56 1.1303 +++ LVM2/WHATS_NEW 2009/10/26 14:37:09 1.1304 @@ -1,5 +1,7 @@ Version 2.02.54 - ===================================== + Update lvcreate/lvconvert man pages to explain PhysicalVolume parameter. + Document --all option in man pages, cleanup {pv|vg|lv}{s|display} man pages. Permit snapshots of mirrors. Cleanup mimagetmp LV if allocation fails for new lvconvert mimage. Fix clvmd segfault when refresh_toolcontext fails. --- LVM2/man/lvdisplay.8.in 2008/11/12 15:01:36 1.2 +++ LVM2/man/lvdisplay.8.in 2009/10/26 14:37:09 1.3 @@ -3,10 +3,34 @@ lvdisplay \- display attributes of a logical volume .SH SYNOPSIS .B lvdisplay +[\-a|\-\-all] [\-c|\-\-colon] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-\-ignorelockingfailure] -[\-\-maps] [\-P|\-\-partial] -[\-v|\-\-verbose] LogicalVolumePath [LogicalVolumePath...] +[\-\-maps] +[\-\-nosuffix] +[\-P|\-\-partial] +[\-\-units hHbBsSkKmMgGtTpPeE] +[\-v|\-\-verbose] +[\-\-version] [LogicalVolumePath [LogicalVolumePath...]] +.br + +.br +.B lvdisplay \-\-columns | \-C +[\-\-aligned] +[\-a|\-\-all] +[\-d|\-\-debug] [\-h|\-?|\-\-help] +[\-\-ignorelockingfailure] +[\-\-noheadings] +[\-\-nosuffix] +[\-o|\-\-options [+]Field[,Field]] +[\-O|\-\-sort [+|-]Key1[,[+|-]Key2[,...]]] +[\-P|\-\-partial] +[\-\-segments] +[\-\-separator Separator] +[\-\-unbuffered] +[\-\-units hHbBsSkKmMgGtTpPeE] +[\-v|\-\-verbose] +[\-\-version] [LogicalVolumePath [LogicalVolumePath...]] .SH DESCRIPTION lvdisplay allows you to see the attributes of a logical volume like size, read/write status, snapshot information etc. @@ -16,7 +40,16 @@ \fBlvdisplay\fP. .SH OPTIONS -See \fBlvm\fP for common options. +See \fBlvm\fP for common options and \fBlvs\fP for options given with +\fB\-\-columns\fP. +.TP +.I \-\-all +Include information in the output about internal Logical Volumes that +are components of normally-accessible Logical Volumes, such as mirrors, +but which are not independently accessible (e.g. not mountable). +For example, after creating a mirror using 'lvcreate -m1 --mirrorlog disk', +this option will reveal three internal Logical Volumes, with suffixes +mimage_0, mimage_1, and mlog. .TP .I \-c, \-\-colon Generate colon separated output for easier parsing in scripts or programs. @@ -44,6 +77,10 @@ .I \-m, \-\-maps Display the mapping of logical extents to physical volumes and physical extents. +.TP +.I \-\-columns | \-C +Display output in columns, the equivalent of \fBlvs\fP. Options listed +are the same as options given in \fBlvs (8)\fP. .SH Examples "lvdisplay -v /dev/vg00/lvol2" shows attributes of that logical volume. If snapshot --- LVM2/man/lvs.8.in 2009/07/07 19:28:57 1.10 +++ LVM2/man/lvs.8.in 2009/10/26 14:37:09 1.11 @@ -3,12 +3,14 @@ lvs \- report information about logical volumes .SH SYNOPSIS .B lvs +[\-a|\-\-all] [\-\-aligned] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-\-ignorelockingfailure] [\-\-nameprefixes] [\-\-noheadings] [\-\-nosuffix] [\-o|\-\-options [+]Field[,Field]] [\-O|\-\-sort [+|-]Key1[,[+|-]Key2[,...]]] [\-P|\-\-partial] [\-\-rows] [\-\-segments] -[\-\-separator Separator] [\-\-unbuffered] +[\-\-separator Separator] +[\-\-unbuffered] [\-\-units hHbBsSkKmMgGtTpPeE] [\-\-unquoted] [\-v|\-\-verbose] @@ -18,6 +20,15 @@ .SH OPTIONS See \fBlvm\fP for common options. .TP +.I \-\-all +Include information in the output about internal Logical Volumes that +are components of normally-accessible Logical Volumes, such as mirrors, +but which are not independently accessible (e.g. not mountable). +The names of such Logical Volumes are enclosed within square brackets +in the output. For example, after creating a mirror using 'lvcreate -m1 +--mirrorlog disk', this option will reveal three internal Logical +Volumes, with suffixes mimage_0, mimage_1, and mlog. +.TP .I \-\-aligned Use with \-\-separator to align the output columns. .TP --- LVM2/man/lvscan.8.in 2008/10/08 12:50:13 1.1 +++ LVM2/man/lvscan.8.in 2009/10/26 14:37:09 1.2 @@ -3,6 +3,7 @@ lvscan \- scan (all disks) for logical volumes .SH SYNOPSIS .B lvscan +.RB [ \-a | \-\-all] .RB [ \-b | \-\-blockdevice ] .RB [ \-d | \-\-debug ] .RB [ \-h | \-\-help ] @@ -16,6 +17,14 @@ .SH OPTIONS See \fBlvm\fP for common options. .TP +.BR \-\-all +Include information in the output about internal Logical Volumes that +are components of normally-accessible Logical Volumes, such as mirrors, +but which are not independently accessible (e.g. not mountable). +For example, after creating a mirror using 'lvcreate -m1 --mirrorlog disk', +this option will reveal three internal Logical Volumes, with suffixes +mimage_0, mimage_1, and mlog. +.TP .BR \-b ", " \-\-blockdevice Adds the device major and minor numbers to the display of each logical volume. --- LVM2/man/pvdisplay.8.in 2008/11/12 15:01:36 1.2 +++ LVM2/man/pvdisplay.8.in 2009/10/26 14:37:09 1.3 @@ -3,9 +3,34 @@ pvdisplay \- display attributes of a physical volume .SH SYNOPSIS .B pvdisplay -[\-c|\-\-colon] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-s|\-\-short] +[\-c|\-\-colon] +[\-d|\-\-debug] [\-h|\-?|\-\-help] +[\-\-ignorelockingfailure] +[\-\-maps] +[\-\-nosuffix] +[\-s|\-\-short] +[\-\-units hsbkmgtHKMGT] [\-v[v]|\-\-verbose [\-\-verbose]] -PhysicalVolumePath [PhysicalVolumePath...] +[\-\-version] +[PhysicalVolumePath [PhysicalVolumePath...]] +.br + +.br +.B pvdisplay \-\-columns | \-C +[\-\-aligned] +[\-a|\-\-all] +[\-d|\-\-debug] [\-h|\-?|\-\-help] +[\-\-ignorelockingfailure] +[\-\-noheadings] +[\-\-nosuffix] +[\-o|\-\-options [+]Field[,Field]] +[\-O|\-\-sort [+|-]Key1[,[+|-]Key2[,...]]] +[\-\-separator Separator] +[\-\-unbuffered] +[\-\-units hHbBsSkKmMgGtTpPeE] +[\-v[v]|\-\-verbose [\-\-verbose]] +[\-\-version] +[PhysicalVolumePath [PhysicalVolumePath...]] .SH DESCRIPTION pvdisplay allows you to see the attributes of one or more physical volumes like size, physical extent size, space used for the volume group descriptor @@ -14,7 +39,8 @@ \fBpvs\fP (8) is an alternative that provides the same information in the style of \fBps\fP (1). .SH OPTIONS -See \fBlvm\fP for common options. +See \fBlvm\fP for common options and \fBpvs\fP for options given with +\fB\-\-columns\fP. .TP .I \-c, \-\-colon Generate colon separated output for easier parsing in scripts or programs. @@ -43,6 +69,11 @@ .I \-m, \-\-maps Display the mapping of physical extents to logical volumes and logical extents. +.TP +.I \-\-columns | \-C +Display output in columns, the equivalent of \fBpvs\fP (8). See +\fBpvs (8)\fP for a description of other options with this form of +\fBpvdisplay\fP. .SH SEE ALSO .BR lvm (8), .BR pvcreate (8), --- LVM2/man/pvs.8.in 2009/07/07 19:28:57 1.11 +++ LVM2/man/pvs.8.in 2009/10/26 14:37:09 1.12 @@ -3,12 +3,16 @@ pvs \- report information about physical volumes .SH SYNOPSIS .B pvs +[\-a|\-\-all] [\-\-aligned] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-\-ignorelockingfailure] [\-\-nameprefixes] [\-\-noheadings] [\-\-nosuffix] [\-o|\-\-options [+]Field[,Field]] [\-O|\-\-sort [+|-]Key1[,[+|-]Key2[,...]]] -[\-\-rows] [\-\-segments] -[\-\-separator Separator] [\-\-unbuffered] +[\-P|\-\-partial] +[\-\-rows] +[\-\-segments] +[\-\-separator Separator] +[\-\-unbuffered] [\-\-units hHbBsSkKmMgGtTpPeE] [\-\-unquoted] [\-v|\-\-verbose] @@ -17,6 +21,11 @@ pvs produces formatted output about physical volumes. .SH OPTIONS See \fBlvm\fP for common options. +\fB\-\-columns\fP. +.TP +.I \-\-all +Include information in the output about devices that have not been +initialized with \fBpvcreate\fP. .TP .I \-\-aligned Use with \-\-separator to align the output columns. --- LVM2/man/vgdisplay.8.in 2008/10/08 12:50:13 1.1 +++ LVM2/man/vgdisplay.8.in 2009/10/26 14:37:09 1.2 @@ -4,15 +4,30 @@ .SH SYNOPSIS .B vgdisplay .RB [ \-A | \-\-activevolumegroups ] -.RB [ \-c | \-\-colon ] +.RB [ \-c | \-\-colon | \-s | \-\-short | \-v|\-\-verbose ] .RB [ \-d | \-\-debug ] .RB [ \-h | \-\-help ] .RB [ \-\-ignorelockingfailure ] +.RB [ \-\-nosuffix ] .RB [ \-P | \-\-partial ] -.RB [ \-s | \-\-short ] -.RB [ \-v [ v ]| \-\-verbose " [" \-\-verbose ]] +.RB [\-\-units hHbBsSkKmMgGtTpPeE] .RB [ \-\-version ] -.RI [ VolumeGroupName ...] +.RI [VolumeGroupName [VolumeGroupName...]] +.br + +.br +.B vgdisplay \-\-columns | \-C +.RB [ \-\-aligned ] [ \-d|\-\-debug ] [ \-h|\-?|\-\-help ] +.RB [ \-\-ignorelockingfailure ] [ \-\-noheadings ] [ \-\-nosuffix ] +.RB [ \-o|\-\-options [+]Field[,Field] ] +.RB [ \-O|\-\-sort [+|-]Key1[,[+|-]Key2[,...]] ] +.RB [ \-P|\-\-partial ] +.RB [ \-\-separator Separator ] +.RB [ \-\-unbuffered ] +.RB [ \-\-units hHbBsSkKmMgGtTpPeE ] +.RB [ \-v|\-\-verbose ] +.RB [ \-\-version ] +.RI [VolumeGroupName [VolumeGroupName...]] .SH DESCRIPTION .B vgdisplay allows you to see the attributes of @@ -23,7 +38,8 @@ \fBvgs\fP (8) is an alternative that provides the same information in the style of \fBps\fP (1). .SH OPTIONS -See \fBlvm\fP for common options. +See \fBlvm\fP for common options and \fBvgs\fP for options given with +\fB\-\-columns\fP. .TP .BR \-A ", " \-\-activevolumegroups Only select the active volume groups. @@ -65,6 +81,10 @@ .TP .BR \-\-version Display version and exit successfully. +.TP +.BR \-\-columns | \-C +Display output in columns, the equivalent of \fBvgs\fP. Options listed +are the same as options given in \fPvgs (8)\fP. .SH SEE ALSO .BR lvm (8), .BR vgs (8), --- LVM2/man/vgs.8.in 2009/09/14 19:42:13 1.10 +++ LVM2/man/vgs.8.in 2009/10/26 14:37:09 1.11 @@ -3,6 +3,7 @@ vgs \- report information about volume groups .SH SYNOPSIS .B vgs +[\-a|\-\-all] [\-\-aligned] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-\-ignorelockingfailure] [\-\-nameprefixes] [\-\-noheadings] [\-\-nosuffix] [\-o|\-\-options [+]Field[,Field]] @@ -18,6 +19,9 @@ .SH OPTIONS See \fBlvm\fP for common options. .TP +.I \-\-all +List all volume groups. Equivalent to not specifying any volume groups. +.TP .I \-\-aligned Use with \-\-separator to align the output columns. .TP --- LVM2/tools/args.h 2009/10/05 20:55:57 1.68 +++ LVM2/tools/args.h 2009/10/26 14:37:09 1.69 @@ -84,7 +84,6 @@ arg(columns_ARG, 'C', "columns", NULL, 0) arg(contiguous_ARG, 'C', "contiguous", yes_no_arg, 0) arg(debug_ARG, 'd', "debug", NULL, ARG_REPEATABLE) -arg(disk_ARG, 'D', "disk", NULL, 0) arg(exported_ARG, 'e', "exported", NULL, 0) arg(physicalextent_ARG, 'E', "physicalextent", NULL, 0) arg(file_ARG, 'f', "file", string_arg, 0) --- LVM2/tools/commands.h 2009/10/05 20:55:57 1.134 +++ LVM2/tools/commands.h 2009/10/26 14:37:09 1.135 @@ -195,7 +195,7 @@ "\t[-m|--maps]\n" "\t[--nosuffix]\n" "\t[-P|--partial] " "\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[-v|--verbose]\n" "\t[--version]" "\n" "\t[LogicalVolume[Path] [LogicalVolume[Path]...]]\n" @@ -214,12 +214,12 @@ "\t[--segments]\n" "\t[--separator Separator]\n" "\t[--unbuffered]\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[-v|--verbose]\n" "\t[--version]" "\n" "\t[LogicalVolume[Path] [LogicalVolume[Path]...]]\n", - aligned_ARG, all_ARG, colon_ARG, columns_ARG, disk_ARG, + aligned_ARG, all_ARG, colon_ARG, columns_ARG, ignorelockingfailure_ARG, maps_ARG, noheadings_ARG, nosuffix_ARG, options_ARG, sort_ARG, partial_ARG, segments_ARG, separator_ARG, unbuffered_ARG, units_ARG) @@ -396,7 +396,7 @@ "\t[--separator Separator]\n" "\t[--trustcache]\n" "\t[--unbuffered]\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[--unquoted]\n" "\t[-v|--verbose]\n" "\t[--version]" "\n" @@ -420,7 +420,7 @@ "\t[-v|--verbose] " "\n" "\t[--version]\n", - all_ARG, blockdevice_ARG, disk_ARG, ignorelockingfailure_ARG, partial_ARG) + all_ARG, blockdevice_ARG, ignorelockingfailure_ARG, partial_ARG) xx(pvchange, "Change attributes of physical volume(s)", @@ -527,7 +527,7 @@ "\t[-m|--maps]\n" "\t[--nosuffix]\n" "\t[-s|--short]\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[-v|--verbose]\n" "\t[--version]" "\n" "\t[PhysicalVolumePath [PhysicalVolumePath...]]\n" @@ -544,7 +544,7 @@ "\t[-O|--sort [+|-]key1[,[+|-]key2[,...]]]\n" "\t[--separator Separator]\n" "\t[--unbuffered]\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[-v|--verbose]\n" "\t[--version]" "\n" "\t[PhysicalVolumePath [PhysicalVolumePath...]]\n", @@ -595,8 +595,8 @@ "Display information about physical volumes", CACHE_VGMETADATA, "pvs" "\n" - "\t[--aligned]\n" "\t[-a|--all]\n" + "\t[--aligned]\n" "\t[-d|--debug]" "\n" "\t[-h|-?|--help] " "\n" "\t[--ignorelockingfailure]\n" @@ -611,7 +611,7 @@ "\t[--separator Separator]\n" "\t[--trustcache]\n" "\t[--unbuffered]\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[--unquoted]\n" "\t[-v|--verbose]\n" "\t[--version]\n" @@ -768,14 +768,14 @@ "Display volume group information", 0, "vgdisplay " "\n" + "\t[-A|--activevolumegroups]" "\n" "\t[-c|--colon | -s|--short | -v|--verbose]" "\n" "\t[-d|--debug] " "\n" "\t[-h|--help] " "\n" "\t[--ignorelockingfailure]" "\n" "\t[--nosuffix]\n" "\t[-P|--partial] " "\n" - "\t[--units hsbkmgtHKMGT]\n" - "\t[-A|--activevolumegroups | [-D|--disk]" "\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[--version]" "\n" "\t[VolumeGroupName [VolumeGroupName...]]\n" "\n" @@ -791,12 +791,12 @@ "\t[-P|--partial] " "\n" "\t[--separator Separator]\n" "\t[--unbuffered]\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[--verbose]" "\n" "\t[--version]" "\n" "\t[VolumeGroupName [VolumeGroupName...]]\n", - activevolumegroups_ARG, aligned_ARG, colon_ARG, columns_ARG, disk_ARG, + activevolumegroups_ARG, aligned_ARG, colon_ARG, columns_ARG, ignorelockingfailure_ARG, noheadings_ARG, nosuffix_ARG, options_ARG, partial_ARG, short_ARG, separator_ARG, sort_ARG, unbuffered_ARG, units_ARG) @@ -944,7 +944,7 @@ "\t[--separator Separator]\n" "\t[--trustcache]\n" "\t[--unbuffered]\n" - "\t[--units hsbkmgtHKMGT]\n" + "\t[--units hHbBsSkKmMgGtTpPeE]\n" "\t[--unquoted]\n" "\t[-v|--verbose]\n" "\t[--version]\n" --- LVM2/tools/vgdisplay.c 2009/09/15 01:38:59 1.26 +++ LVM2/tools/vgdisplay.c 2009/10/26 14:37:09 1.27 @@ -79,8 +79,6 @@ return EINVALID_CMD_LINE; } - /* FIXME -D disk_ARG is now redundant */ - /********* FIXME: Do without this - or else 2(+) passes! Figure out longest volume group name for (c = opt; opt < argc; opt++) { From prajnoha@sourceware.org Mon Oct 26 21:38:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Mon, 26 Oct 2009 21:38:00 -0000 Subject: LVM2 libdm/libdm-common.c udev/13-dm-disk.rules Message-ID: <20091026213836.21205.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-10-26 21:38:36 Modified files: libdm : libdm-common.c udev : 13-dm-disk.rules Log message: Cleanup of previous commit with latest changes in udev support code. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.c.diff?cvsroot=lvm2&r1=1.88&r2=1.89 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/13-dm-disk.rules.diff?cvsroot=lvm2&r1=1.2&r2=1.3 --- LVM2/libdm/libdm-common.c 2009/10/26 14:29:34 1.88 +++ LVM2/libdm/libdm-common.c 2009/10/26 21:38:35 1.89 @@ -1158,7 +1158,8 @@ goto bad; } - dmt->event_nr = (0x0000FFFF & *cookie) | (flags << 16); + dmt->event_nr = (~DM_UDEV_FLAGS_MASK & *cookie) | + (flags << DM_UDEV_FLAGS_SHIFT); dmt->cookie_set = 1; log_debug("Udev cookie 0x%" PRIx32 " (semid %d) assigned to dm_task " --- LVM2/udev/13-dm-disk.rules 2009/10/26 14:29:34 1.2 +++ LVM2/udev/13-dm-disk.rules 2009/10/26 21:38:35 1.3 @@ -6,7 +6,7 @@ # suspended. # "add" event is processed on coldplug only! -ACTION!="add|change", GOTO="dm_end" +ACTION!="add|change", GOTO="dm_other" ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_other" ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_other" From agk@sourceware.org Mon Oct 26 21:56:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Mon, 26 Oct 2009 21:56:00 -0000 Subject: LVM2 VERSION VERSION_DM WHATS_NEW WHATS_NEW_DM Message-ID: <20091026215624.31638.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-26 21:56:24 Modified files: . : VERSION VERSION_DM WHATS_NEW WHATS_NEW_DM Log message: pre-release Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/VERSION.diff?cvsroot=lvm2&r1=1.211&r2=1.212 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/VERSION_DM.diff?cvsroot=lvm2&r1=1.23&r2=1.24 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1304&r2=1.1305 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.307&r2=1.308 --- LVM2/VERSION 2009/09/26 00:42:47 1.211 +++ LVM2/VERSION 2009/10/26 21:56:23 1.212 @@ -1 +1 @@ -2.02.54(1)-cvs (2009-09-26) +2.02.54(1)-cvs (2009-10-26) --- LVM2/VERSION_DM 2009/09/26 00:42:47 1.23 +++ LVM2/VERSION_DM 2009/10/26 21:56:23 1.24 @@ -1 +1 @@ -1.02.39-cvs (2009-09-26) +1.02.39-cvs (2009-10-26) --- LVM2/WHATS_NEW 2009/10/26 14:37:09 1.1304 +++ LVM2/WHATS_NEW 2009/10/26 21:56:23 1.1305 @@ -1,5 +1,5 @@ -Version 2.02.54 - -===================================== +Version 2.02.54 - 26th October 2009 +=================================== Update lvcreate/lvconvert man pages to explain PhysicalVolume parameter. Document --all option in man pages, cleanup {pv|vg|lv}{s|display} man pages. Permit snapshots of mirrors. --- LVM2/WHATS_NEW_DM 2009/10/22 13:11:33 1.307 +++ LVM2/WHATS_NEW_DM 2009/10/26 21:56:23 1.308 @@ -1,5 +1,5 @@ -Version 1.02.39 - -===================================== +Version 1.02.39 - 26th October 2009 +=================================== Remove strict default permissions for DM devices from 95-dm-notify.rules. Add dmsetup udevflags command to decode udev flags in given cookie value. Add udev flags support in libdevmapper. From agk@sourceware.org Mon Oct 26 22:42:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Mon, 26 Oct 2009 22:42:00 -0000 Subject: LVM2/udev 11-dm-lvm.rules 12-dm-permissions.ru ... Message-ID: <20091026224208.20280.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-26 22:42:07 Modified files: udev : 11-dm-lvm.rules 12-dm-permissions.rules 13-dm-disk.rules 95-dm-notify.rules Log message: add copyright lines Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/11-dm-lvm.rules.diff?cvsroot=lvm2&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/12-dm-permissions.rules.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/13-dm-disk.rules.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/95-dm-notify.rules.diff?cvsroot=lvm2&r1=1.3&r2=1.4 --- LVM2/udev/11-dm-lvm.rules 2009/10/26 14:29:34 1.2 +++ LVM2/udev/11-dm-lvm.rules 2009/10/26 22:42:07 1.3 @@ -1,3 +1,7 @@ +# Copyright (C) 2009 Red Hat, Inc. All rights reserved. +# +# This file is part of LVM2. + # Udev rules for LVM. # # These rules create symlinks for LVM logical volumes in --- LVM2/udev/12-dm-permissions.rules 2009/10/22 13:11:33 1.5 +++ LVM2/udev/12-dm-permissions.rules 2009/10/26 22:42:07 1.6 @@ -1,3 +1,7 @@ +# Copyright (C) 2009 Red Hat, Inc. All rights reserved. +# +# This file is part of LVM2. + # Udev rules for device-mapper devices. # # These rules set permissions for DM devices. --- LVM2/udev/13-dm-disk.rules 2009/10/26 21:38:35 1.3 +++ LVM2/udev/13-dm-disk.rules 2009/10/26 22:42:07 1.4 @@ -1,3 +1,7 @@ +# Copyright (C) 2009 Red Hat, Inc. All rights reserved. +# +# This file is part of LVM2. + # Udev rules for device-mapper devices. # # These rules create symlinks in /dev/disk directory. --- LVM2/udev/95-dm-notify.rules 2009/10/22 13:11:33 1.3 +++ LVM2/udev/95-dm-notify.rules 2009/10/26 22:42:07 1.4 @@ -1,3 +1,7 @@ +# Copyright (C) 2009 Red Hat, Inc. All rights reserved. +# +# This file is part of LVM2. + # Udev rules for device-mapper devices. # # These rules are responsible for sending a notification to a process From agk@sourceware.org Tue Oct 27 00:52:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Tue, 27 Oct 2009 00:52:00 -0000 Subject: LVM2 WHATS_NEW WHATS_NEW_DM Message-ID: <20091027005246.28329.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-27 00:52:45 Modified files: . : WHATS_NEW WHATS_NEW_DM Log message: . Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1305&r2=1.1306 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.308&r2=1.309 --- LVM2/WHATS_NEW 2009/10/26 21:56:23 1.1305 +++ LVM2/WHATS_NEW 2009/10/27 00:52:45 1.1306 @@ -6,7 +6,7 @@ Cleanup mimagetmp LV if allocation fails for new lvconvert mimage. Fix clvmd segfault when refresh_toolcontext fails. Remember to clear 'global lock held during cache refresh' state after use. - Use udev flags support in LVM. + Use udev flags support in LVM and apply various fixes to udev rules. Delay announcing mirror monitoring to syslog until initialisation succeeded. Handle metadata with unknown segment types more gracefully. Set default owner and group to null. @@ -27,7 +27,7 @@ Restart lvconverts in vgchange by sharing lv_spawn_background_polling. Generalise polldaemon code by changing mirror-specific variable names. Don't attempt to deactivate an LV if any of its snapshots are in use. - Return fail if lv_deactivate fails to remove device from kernel. + Return error if lv_deactivate fails to remove device from kernel. Provide alternative implementation of obsolete siginterrupt(). Consolidate LV allocation into alloc_lv(). Treat input units of both 's' and 'S' as 512-byte sectors. (2.02.49) --- LVM2/WHATS_NEW_DM 2009/10/26 21:56:23 1.308 +++ LVM2/WHATS_NEW_DM 2009/10/27 00:52:45 1.309 @@ -2,7 +2,7 @@ =================================== Remove strict default permissions for DM devices from 95-dm-notify.rules. Add dmsetup udevflags command to decode udev flags in given cookie value. - Add udev flags support in libdevmapper. + Support udev flags in libdevmapper incl. dm_tree_add_new_dev_with_udev_flags. Make libdm ABI consistent when built with/without selinux support. Version 1.02.38 - 25th September 2009 From agk@sourceware.org Tue Oct 27 01:13:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Tue, 27 Oct 2009 01:13:00 -0000 Subject: LVM2 VERSION VERSION_DM WHATS_NEW WHATS_NEW_DM Message-ID: <20091027011321.20193.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-27 01:13:21 Modified files: . : VERSION VERSION_DM WHATS_NEW WHATS_NEW_DM Log message: post-release Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/VERSION.diff?cvsroot=lvm2&r1=1.212&r2=1.213 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/VERSION_DM.diff?cvsroot=lvm2&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1306&r2=1.1307 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.309&r2=1.310 --- LVM2/VERSION 2009/10/26 21:56:23 1.212 +++ LVM2/VERSION 2009/10/27 01:13:20 1.213 @@ -1 +1 @@ -2.02.54(1)-cvs (2009-10-26) +2.02.55(1)-cvs (2009-10-26) --- LVM2/VERSION_DM 2009/10/26 21:56:23 1.24 +++ LVM2/VERSION_DM 2009/10/27 01:13:20 1.25 @@ -1 +1 @@ -1.02.39-cvs (2009-10-26) +1.02.40-cvs (2009-10-26) --- LVM2/WHATS_NEW 2009/10/27 00:52:45 1.1306 +++ LVM2/WHATS_NEW 2009/10/27 01:13:21 1.1307 @@ -1,3 +1,6 @@ +Version 2.02.55 - +=================================== + Version 2.02.54 - 26th October 2009 =================================== Update lvcreate/lvconvert man pages to explain PhysicalVolume parameter. --- LVM2/WHATS_NEW_DM 2009/10/27 00:52:45 1.309 +++ LVM2/WHATS_NEW_DM 2009/10/27 01:13:21 1.310 @@ -1,3 +1,6 @@ +Version 1.02.40 - +=================================== + Version 1.02.39 - 26th October 2009 =================================== Remove strict default permissions for DM devices from 95-dm-notify.rules. From mbroz@sourceware.org Tue Oct 27 17:00:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Tue, 27 Oct 2009 17:00:00 -0000 Subject: LVM2 ./WHATS_NEW lib/cache/lvmcache.c lib/filt ... Message-ID: <20091027170047.18917.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-10-27 17:00:47 Modified files: . : WHATS_NEW lib/cache : lvmcache.c lib/filters : filter.c filter.h lib/format1 : disk-rep.c lib/format_pool: disk_rep.c Log message: Recognise DRBD device part and handle it similar to MD devices. The DRBD uses underlying device so code should prefer top device if duplicate is found. Patch also introduce dev_subsystem_part_major and dev_subsytem_name functions to easily handle all these replication susbystems and not hardcode md_major call. See https://bugzilla.redhat.com/show_bug.cgi?id=530881 for full problem description. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1307&r2=1.1308 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/cache/lvmcache.c.diff?cvsroot=lvm2&r1=1.70&r2=1.71 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/filters/filter.c.diff?cvsroot=lvm2&r1=1.49&r2=1.50 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/filters/filter.h.diff?cvsroot=lvm2&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/disk-rep.c.diff?cvsroot=lvm2&r1=1.79&r2=1.80 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/disk_rep.c.diff?cvsroot=lvm2&r1=1.15&r2=1.16 --- LVM2/WHATS_NEW 2009/10/27 01:13:21 1.1307 +++ LVM2/WHATS_NEW 2009/10/27 17:00:44 1.1308 @@ -1,5 +1,6 @@ Version 2.02.55 - =================================== + Recognise DRBD device part and handle it similar to MD devices. Version 2.02.54 - 26th October 2009 =================================== --- LVM2/lib/cache/lvmcache.c 2009/10/22 17:33:09 1.70 +++ LVM2/lib/cache/lvmcache.c 2009/10/27 17:00:46 1.71 @@ -1173,11 +1173,12 @@ } else { if (existing->dev != dev) { /* Is the existing entry a duplicate pvid e.g. md ? */ - if (MAJOR(existing->dev->dev) == md_major() && - MAJOR(dev->dev) != md_major()) { + if (dev_subsystem_part_major(existing->dev) && + !dev_subsystem_part_major(dev)) { log_very_verbose("Ignoring duplicate PV %s on " - "%s - using md %s", + "%s - using %s %s", pvid, dev_name(dev), + dev_subsystem_name(existing->dev), dev_name(existing->dev)); return NULL; } else if (dm_is_dm_major(MAJOR(existing->dev->dev)) && @@ -1187,11 +1188,12 @@ pvid, dev_name(dev), dev_name(existing->dev)); return NULL; - } else if (MAJOR(existing->dev->dev) != md_major() && - MAJOR(dev->dev) == md_major()) + } else if (!dev_subsystem_part_major(existing->dev) && + dev_subsystem_part_major(dev)) log_very_verbose("Duplicate PV %s on %s - " - "using md %s", pvid, + "using %s %s", pvid, dev_name(existing->dev), + dev_subsystem_name(existing->dev), dev_name(dev)); else if (!dm_is_dm_major(MAJOR(existing->dev->dev)) && dm_is_dm_major(MAJOR(dev->dev))) --- LVM2/lib/filters/filter.c 2009/08/19 15:34:46 1.49 +++ LVM2/lib/filters/filter.c 2009/10/27 17:00:46 1.50 @@ -39,6 +39,7 @@ static int _md_major = -1; static int _blkext_major = -1; +static int _drbd_major = -1; static int _device_mapper_major = -1; int md_major(void) @@ -51,6 +52,31 @@ return _blkext_major; } +int dev_subsystem_part_major(const struct device *dev) +{ + if (MAJOR(dev->dev) == -1) + return 0; + + if (MAJOR(dev->dev) == _md_major) + return 1; + + if (MAJOR(dev->dev) == _drbd_major) + return 1; + + return 0; +} + +const char *dev_subsystem_name(const struct device *dev) +{ + if (MAJOR(dev->dev) == _md_major) + return "MD"; + + if (MAJOR(dev->dev) == _drbd_major) + return "DRBD"; + + return ""; +} + /* * Devices are only checked for partition tables if their minor number * is a multiple of the number corresponding to their type below @@ -207,6 +233,10 @@ if (!strncmp("blkext", line + i, 6) && isspace(*(line + i + 6))) _blkext_major = line_maj; + /* Look for drbd device */ + if (!strncmp("drbd", line + i, 4) && isspace(*(line + i + 4))) + _drbd_major = line_maj; + /* Look for device-mapper device */ /* FIXME Cope with multiple majors */ if (!strncmp("device-mapper", line + i, 13) && isspace(*(line + i + 13))) --- LVM2/lib/filters/filter.h 2009/08/19 15:34:46 1.16 +++ LVM2/lib/filters/filter.h 2009/10/27 17:00:46 1.17 @@ -39,4 +39,7 @@ int blkext_major(void); int max_partitions(int major); +int dev_subsystem_part_major(const struct device *dev); +const char *dev_subsystem_name(const struct device *dev); + #endif --- LVM2/lib/format1/disk-rep.c 2009/07/15 20:02:46 1.79 +++ LVM2/lib/format1/disk-rep.c 2009/10/27 17:00:46 1.80 @@ -435,14 +435,15 @@ pvd = &diskl->pvd; if (!strncmp((char *)data->pvd.pv_uuid, (char *)pvd->pv_uuid, sizeof(pvd->pv_uuid))) { - if (MAJOR(data->dev->dev) != md_major()) { + if (!dev_subsystem_part_major(data->dev)) { log_very_verbose("Ignoring duplicate PV %s on " "%s", pvd->pv_uuid, dev_name(data->dev)); return; } - log_very_verbose("Duplicate PV %s - using md %s", - pvd->pv_uuid, dev_name(data->dev)); + log_very_verbose("Duplicate PV %s - using %s %s", + pvd->pv_uuid, dev_subsystem_name(data->dev), + dev_name(data->dev)); dm_list_del(&diskl->list); break; } --- LVM2/lib/format_pool/disk_rep.c 2008/11/04 15:07:44 1.15 +++ LVM2/lib/format_pool/disk_rep.c 2009/10/27 17:00:46 1.16 @@ -62,14 +62,15 @@ id_write_format(&pl->pv_uuid, uuid, ID_LEN + 7); - if (MAJOR(data->dev->dev) != md_major()) { + if (!dev_subsystem_part_major(data->dev)) { log_very_verbose("Ignoring duplicate PV %s on " "%s", uuid, dev_name(data->dev)); return; } - log_very_verbose("Duplicate PV %s - using md %s", - uuid, dev_name(data->dev)); + log_very_verbose("Duplicate PV %s - using %s %s", + uuid, dev_subsystem_name(data->dev), + dev_name(data->dev)); dm_list_del(&pl->list); break; } From agk@sourceware.org Fri Oct 30 13:07:00 2009 From: agk@sourceware.org (agk@sourceware.org) Date: Fri, 30 Oct 2009 13:07:00 -0000 Subject: LVM2 ./WHATS_NEW lib/activate/activate.c Message-ID: <20091030130750.365.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2009-10-30 13:07:49 Modified files: . : WHATS_NEW lib/activate : activate.c Log message: Insert some missing stack macros into activation code. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1308&r2=1.1309 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.c.diff?cvsroot=lvm2&r1=1.157&r2=1.158 --- LVM2/WHATS_NEW 2009/10/27 17:00:44 1.1308 +++ LVM2/WHATS_NEW 2009/10/30 13:07:49 1.1309 @@ -1,5 +1,6 @@ Version 2.02.55 - =================================== + Insert some missing stack macros into activation code. Recognise DRBD device part and handle it similar to MD devices. Version 2.02.54 - 26th October 2009 --- LVM2/lib/activate/activate.c 2009/10/16 17:41:50 1.157 +++ LVM2/lib/activate/activate.c 2009/10/30 13:07:49 1.158 @@ -936,7 +936,7 @@ return 1; if (!(lv = lv_from_lvid(cmd, lvid_s, 0))) - goto out; + goto_out; if (test_mode()) { _skip("Resuming '%s'.", lv->name); @@ -949,11 +949,11 @@ if (!info.exists || !info.suspended) { r = error_if_not_active ? 0 : 1; - goto out; + goto_out; } if (!_lv_activate_lv(lv)) - goto out; + goto_out; memlock_dec(); fs_unlock(); @@ -1138,7 +1138,8 @@ lv->status |= ACTIVATE_EXCL; memlock_inc(); - r = _lv_activate_lv(lv); + if (!(r = _lv_activate_lv(lv))) + stack; memlock_dec(); fs_unlock(); @@ -1155,13 +1156,19 @@ /* Activate LV */ int lv_activate(struct cmd_context *cmd, const char *lvid_s, int exclusive) { - return _lv_activate(cmd, lvid_s, exclusive, 0); + if (!_lv_activate(cmd, lvid_s, exclusive, 0)) + return_0; + + return 1; } /* Activate LV only if it passes filter */ int lv_activate_with_filter(struct cmd_context *cmd, const char *lvid_s, int exclusive) { - return _lv_activate(cmd, lvid_s, exclusive, 1); + if (!_lv_activate(cmd, lvid_s, exclusive, 1)) + return_0; + + return 1; } int lv_mknodes(struct cmd_context *cmd, const struct logical_volume *lv) From wysochanski@sourceware.org Sat Oct 31 16:43:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Sat, 31 Oct 2009 16:43:00 -0000 Subject: LVM2/test t-vgcreate-usage.sh t-vgextend-usage.sh Message-ID: <20091031164307.6813.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-31 16:43:07 Modified files: test : t-vgcreate-usage.sh t-vgextend-usage.sh Log message: Add to vgcreate and vgextend nightly tests. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgcreate-usage.sh.diff?cvsroot=lvm2&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgextend-usage.sh.diff?cvsroot=lvm2&r1=1.2&r2=1.3 --- LVM2/test/t-vgcreate-usage.sh 2009/10/05 20:55:57 1.12 +++ LVM2/test/t-vgcreate-usage.sh 2009/10/31 16:43:07 1.13 @@ -144,3 +144,18 @@ vgremove -f $vg pvremove -f $dev1 done + +# vgcreate fails if pv belongs to existing vg +vgcreate $vg1 $dev1 $dev2 +not vgcreate $vg2 $dev2 +vgremove -f $vg1 +pvremove -f $dev1 $dev2 + +# all PVs exist in the VG after created +pvcreate $dev1 +vgcreate $vg1 $dev1 $dev2 $dev3 +check_pv_field_ $dev1 vg_name $vg1 +check_pv_field_ $dev2 vg_name $vg1 +check_pv_field_ $dev3 vg_name $vg1 +vgremove -f $vg1 +pvremove -f $dev1 $dev2 $dev3 --- LVM2/test/t-vgextend-usage.sh 2009/10/05 20:55:57 1.2 +++ LVM2/test/t-vgextend-usage.sh 2009/10/31 16:43:07 1.3 @@ -75,3 +75,27 @@ vgremove -f $vg pvremove -f $dev1 +# vgextend fails if pv belongs to existing vg +vgcreate $vg1 $dev1 $dev3 +vgcreate $vg2 $dev2 +not vgextend $vg2 $dev3 +vgremove -f $vg1 +vgremove -f $vg2 +pvremove -f $dev1 $dev2 $dev3 + +#vgextend fails if vg is not resizeable +vgcreate $vg1 $dev1 $dev2 +vgchange --resizeable n $vg1 +not vgextend $vg1 $dev3 +vgremove -f $vg1 +pvremove -f $dev1 $dev2 + +# all PVs exist in the VG after extended +pvcreate $dev1 +vgcreate $vg1 $dev2 +vgextend $vg1 $dev1 $dev3 +check_pv_field_ $dev1 vg_name $vg1 +check_pv_field_ $dev2 vg_name $vg1 +check_pv_field_ $dev3 vg_name $vg1 +vgremove -f $vg1 +pvremove -f $dev1 $dev2 $dev3 From wysochanski@sourceware.org Sat Oct 31 17:26:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Sat, 31 Oct 2009 17:26:00 -0000 Subject: LVM2/lib metadata/metadata-exported.h metadata ... Message-ID: <20091031172614.9150.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-31 17:26:14 Modified files: lib/metadata : metadata-exported.h metadata.c lib/report : report.c Log message: Add vg_mda_count library function. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.117&r2=1.118 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.291&r2=1.292 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/report/report.c.diff?cvsroot=lvm2&r1=1.105&r2=1.106 --- LVM2/lib/metadata/metadata-exported.h 2009/10/16 17:41:52 1.117 +++ LVM2/lib/metadata/metadata-exported.h 2009/10/31 17:26:13 1.118 @@ -730,6 +730,7 @@ uint64_t vg_pv_count(const struct volume_group *vg); uint64_t vg_max_pv(const struct volume_group *vg); uint64_t vg_max_lv(const struct volume_group *vg); +uint32_t vg_mda_count(const struct volume_group *vg); int vg_check_write_mode(struct volume_group *vg); #define vg_is_clustered(vg) (vg_status((vg)) & CLUSTERED) #define vg_is_exported(vg) (vg_status((vg)) & EXPORTED_VG) --- LVM2/lib/metadata/metadata.c 2009/10/16 17:41:52 1.291 +++ LVM2/lib/metadata/metadata.c 2009/10/31 17:26:13 1.292 @@ -3611,6 +3611,11 @@ return (uint64_t) vg->max_lv; } +uint32_t vg_mda_count(const struct volume_group *vg) +{ + return dm_list_size(&vg->fid->metadata_areas); +} + uint64_t lv_size(const struct logical_volume *lv) { return lv->size; --- LVM2/lib/report/report.c 2009/10/26 10:01:57 1.105 +++ LVM2/lib/report/report.c 2009/10/31 17:26:14 1.106 @@ -870,7 +870,7 @@ const struct volume_group *vg = (const struct volume_group *) data; uint32_t count; - count = dm_list_size(&vg->fid->metadata_areas); + count = vg_mda_count(vg); return _uint32_disp(rh, mem, field, &count, private); } From wysochanski@sourceware.org Sat Oct 31 17:30:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Sat, 31 Oct 2009 17:30:00 -0000 Subject: LVM2 lib/metadata/metadata-exported.h lib/meta ... Message-ID: <20091031173052.10444.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-31 17:30:52 Modified files: lib/metadata : metadata-exported.h metadata.c tools : vgchange.c Log message: Add vg_set_clustered() - move logic from vgchange. Similar to other vg_set_* functions, we create a vg_set_clustered() function which does a few checks and sets a flag. This is where we check for any limitations of clusters. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.118&r2=1.119 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.292&r2=1.293 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgchange.c.diff?cvsroot=lvm2&r1=1.88&r2=1.89 --- LVM2/lib/metadata/metadata-exported.h 2009/10/31 17:26:13 1.118 +++ LVM2/lib/metadata/metadata-exported.h 2009/10/31 17:30:52 1.119 @@ -462,6 +462,7 @@ int vg_set_max_lv(struct volume_group *vg, uint32_t max_lv); int vg_set_max_pv(struct volume_group *vg, uint32_t max_pv); int vg_set_alloc_policy(struct volume_group *vg, alloc_policy_t alloc); +int vg_set_clustered(struct volume_group *vg, int clustered); int vg_split_mdas(struct cmd_context *cmd, struct volume_group *vg_from, struct volume_group *vg_to); --- LVM2/lib/metadata/metadata.c 2009/10/31 17:26:13 1.292 +++ LVM2/lib/metadata/metadata.c 2009/10/31 17:30:52 1.293 @@ -1127,6 +1127,26 @@ return 1; } +int vg_set_clustered(struct volume_group *vg, int clustered) +{ + struct lv_list *lvl; + if (clustered) { + dm_list_iterate_items(lvl, &vg->lvs) { + if (lv_is_origin(lvl->lv) || lv_is_cow(lvl->lv)) { + log_error("Volume group %s contains snapshots " + "that are not yet supported.", + vg->name); + return 0; + } + } + } + + if (clustered) + vg->status |= CLUSTERED; + else + vg->status &= ~CLUSTERED; + return 1; +} /* * Separate metadata areas after splitting a VG. --- LVM2/tools/vgchange.c 2009/09/30 12:05:25 1.88 +++ LVM2/tools/vgchange.c 2009/10/31 17:30:52 1.89 @@ -245,7 +245,6 @@ struct volume_group *vg) { int clustered = !strcmp(arg_str_value(cmd, clustered_ARG, "n"), "y"); - struct lv_list *lvl; if (clustered && (vg_is_clustered(vg))) { log_error("Volume group \"%s\" is already clustered", @@ -259,26 +258,13 @@ return ECMD_FAILED; } - if (clustered) { - dm_list_iterate_items(lvl, &vg->lvs) { - if (lv_is_origin(lvl->lv) || lv_is_cow(lvl->lv)) { - log_error("Volume group %s contains snapshots " - "that are not yet supported.", - vg->name); - return ECMD_FAILED; - } - } - } - if (!archive(vg)) { stack; return ECMD_FAILED; } - if (clustered) - vg->status |= CLUSTERED; - else - vg->status &= ~CLUSTERED; + if (!vg_set_clustered(vg, clustered)) + return ECMD_FAILED; if (!vg_write(vg) || !vg_commit(vg)) { stack; From wysochanski@sourceware.org Sat Oct 31 17:39:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Sat, 31 Oct 2009 17:39:00 -0000 Subject: LVM2/tools vgcreate.c Message-ID: <20091031173923.12626.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-31 17:39:22 Modified files: tools : vgcreate.c Log message: Update vgcreate to call vg_set_clustered(). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.70&r2=1.71 --- LVM2/tools/vgcreate.c 2009/10/05 20:55:57 1.70 +++ LVM2/tools/vgcreate.c 2009/10/31 17:39:22 1.71 @@ -65,7 +65,8 @@ if (!vg_set_extent_size(vg, vp_new.extent_size) || !vg_set_max_lv(vg, vp_new.max_lv) || !vg_set_max_pv(vg, vp_new.max_pv) || - !vg_set_alloc_policy(vg, vp_new.alloc)) + !vg_set_alloc_policy(vg, vp_new.alloc) || + !vg_set_clustered(vg, vp_new.clustered)) goto_bad; if (!lock_vol(cmd, VG_ORPHANS, LCK_VG_WRITE)) { @@ -103,12 +104,9 @@ } } - /* FIXME: move this inside vg_create? */ - if (vp_new.clustered) { - vg->status |= CLUSTERED; + if (vg_is_clustered(vg)) { clustered_message = "Clustered "; } else { - vg->status &= ~CLUSTERED; if (locking_is_clustered()) clustered_message = "Non-clustered "; } From wysochanski@sourceware.org Sat Oct 31 17:43:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Sat, 31 Oct 2009 17:43:00 -0000 Subject: LVM2 tools/vgsplit.c ./WHATS_NEW Message-ID: <20091031174358.14423.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-10-31 17:43:57 Modified files: tools : vgsplit.c . : WHATS_NEW Log message: Update vgsplit to call vg_set_clustered(). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgsplit.c.diff?cvsroot=lvm2&r1=1.95&r2=1.96 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1309&r2=1.1310 --- LVM2/tools/vgsplit.c 2009/10/26 10:01:57 1.95 +++ LVM2/tools/vgsplit.c 2009/10/31 17:43:57 1.96 @@ -371,7 +371,7 @@ vp_def.max_pv = vg_from->max_pv; vp_def.max_lv = vg_from->max_lv; vp_def.alloc = vg_from->alloc; - vp_def.clustered = DEFAULT_CLUSTERED; + vp_def.clustered = vg_is_clustered(vg_from); if (fill_vg_create_params(cmd, vg_name_to, &vp_new, &vp_def)) { r = EINVALID_CMD_LINE; @@ -386,11 +386,9 @@ if (!vg_set_extent_size(vg_to, vp_new.extent_size) || !vg_set_max_lv(vg_to, vp_new.max_lv) || !vg_set_max_pv(vg_to, vp_new.max_pv) || - !vg_set_alloc_policy(vg_to, vp_new.alloc)) + !vg_set_alloc_policy(vg_to, vp_new.alloc) || + !vg_set_clustered(vg_to, vp_new.clustered)) goto_bad; - - if (vg_is_clustered(vg_from)) - vg_to->status |= CLUSTERED; } /* Archive vg_from before changing it */ --- LVM2/WHATS_NEW 2009/10/30 13:07:49 1.1309 +++ LVM2/WHATS_NEW 2009/10/31 17:43:57 1.1310 @@ -1,5 +1,8 @@ Version 2.02.55 - =================================== + Update vgsplit and vgcreate to use vg_set_clustered. + Add vg_mda_count and vg_set_clustered library function. + Add more vgcreate and vgsplit nightly tests. Insert some missing stack macros into activation code. Recognise DRBD device part and handle it similar to MD devices.