From mornfall@sourceware.org Tue Dec 1 13:54:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Tue, 01 Dec 2009 13:54:00 -0000 Subject: LVM2/lib/log log.c Message-ID: <20091201135428.24475.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-12-01 13:54:28 Modified files: lib/log : log.c Log message: If aborting due to an internal error, always print the message causing this. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/log/log.c.diff?cvsroot=lvm2&r1=1.53&r2=1.54 --- LVM2/lib/log/log.c 2009/11/30 17:17:12 1.53 +++ LVM2/lib/log/log.c 2009/12/01 13:54:27 1.54 @@ -183,7 +183,8 @@ level &= ~_LOG_STDERR; - if (!strncmp(format, "Internal error:", + if (_abort_on_internal_errors && + !strncmp(format, "Internal error:", strlen("Internal error:"))) internal_error = 1; @@ -244,7 +245,7 @@ if (!strcmp("", format) && verbose_level() <= _LOG_DEBUG) break; - if (verbose_level() >= _LOG_DEBUG) { + if (internal_error || verbose_level() >= _LOG_DEBUG) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); if (_indent) @@ -255,7 +256,7 @@ break; case _LOG_INFO: - if (verbose_level() >= _LOG_INFO) { + if (internal_error || verbose_level() >= _LOG_INFO) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); if (_indent) @@ -265,7 +266,7 @@ } break; case _LOG_NOTICE: - if (verbose_level() >= _LOG_NOTICE) { + if (internal_error || verbose_level() >= _LOG_NOTICE) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); if (_indent) @@ -275,7 +276,7 @@ } break; case _LOG_WARN: - if (verbose_level() >= _LOG_WARN) { + if (internal_error || verbose_level() >= _LOG_WARN) { fprintf(use_stderr ? stderr : stdout, "%s%s", log_command_name(), _msg_prefix); vfprintf(use_stderr ? stderr : stdout, trformat, ap); @@ -283,7 +284,7 @@ } break; case _LOG_ERR: - if (verbose_level() >= _LOG_ERR) { + if (internal_error || verbose_level() >= _LOG_ERR) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); vfprintf(stderr, trformat, ap); @@ -292,7 +293,7 @@ break; case _LOG_FATAL: default: - if (verbose_level() >= _LOG_FATAL) { + if (internal_error || verbose_level() >= _LOG_FATAL) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); vfprintf(stderr, trformat, ap); @@ -303,7 +304,7 @@ va_end(ap); } - if (internal_error && _abort_on_internal_errors) + if (internal_error) abort(); if (level > debug_level()) From mbroz@sourceware.org Tue Dec 1 19:10:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Tue, 01 Dec 2009 19:10:00 -0000 Subject: LVM2 ./WHATS_NEW lib/activate/activate.c Message-ID: <20091201191024.9255.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-01 19:10:23 Modified files: . : WHATS_NEW lib/activate : activate.c Log message: Fix memory leak in lv_info_by_lvid The lv_from_lvid calls internally vg_read(), we must release vg structure afterwards. Code is called only from clvmd. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1335&r2=1.1336 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.c.diff?cvsroot=lvm2&r1=1.158&r2=1.159 --- LVM2/WHATS_NEW 2009/11/27 14:35:38 1.1335 +++ LVM2/WHATS_NEW 2009/12/01 19:10:23 1.1336 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Fix clvmd memory leak in lv_info_by_lvid. Do not allow creating mirrors of more than 8 images. Use locking_type 3 (compiled in cluster locking) in lvmconf. Remove duplicate dm_list macros and functions. --- LVM2/lib/activate/activate.c 2009/10/30 13:07:49 1.158 +++ LVM2/lib/activate/activate.c 2009/12/01 19:10:23 1.159 @@ -486,12 +486,16 @@ int lv_info_by_lvid(struct cmd_context *cmd, const char *lvid_s, struct lvinfo *info, int with_open_count, int with_read_ahead) { + int r; struct logical_volume *lv; if (!(lv = lv_from_lvid(cmd, lvid_s, 0))) return 0; - return _lv_info(cmd, lv, 0, info, with_open_count, with_read_ahead, 0); + r = _lv_info(cmd, lv, 0, info, with_open_count, with_read_ahead, 0); + vg_release(lv->vg); + + return r; } /* From wysochanski@sourceware.org Thu Dec 3 01:47:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Thu, 03 Dec 2009 01:47:00 -0000 Subject: LVM2 lib/metadata/lv_manip.c tools/lvcreate.c Message-ID: <20091203014734.3260.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-12-03 01:47:34 Modified files: lib/metadata : lv_manip.c tools : lvcreate.c Log message: Fix setting of readahead in lvcreate. The default comes from the configuration settings, with possible commandline override. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_manip.c.diff?cvsroot=lvm2&r1=1.186&r2=1.187 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvcreate.c.diff?cvsroot=lvm2&r1=1.211&r2=1.212 --- LVM2/lib/metadata/lv_manip.c 2009/11/24 22:55:56 1.186 +++ LVM2/lib/metadata/lv_manip.c 2009/12/03 01:47:33 1.187 @@ -3019,7 +3019,7 @@ status, lp->alloc, vg))) return_0; - if (lp->read_ahead) { + if (lp->read_ahead != lv->read_ahead) { log_verbose("Setting read ahead sectors"); lv->read_ahead = lp->read_ahead; } --- LVM2/tools/lvcreate.c 2009/11/27 14:35:39 1.211 +++ LVM2/tools/lvcreate.c 2009/12/03 01:47:34 1.212 @@ -509,7 +509,8 @@ /* * Read ahead. */ - lp->read_ahead = arg_uint_value(cmd, readahead_ARG, DM_READ_AHEAD_NONE); + lp->read_ahead = arg_uint_value(cmd, readahead_ARG, + cmd->default_settings.read_ahead); pagesize = lvm_getpagesize() >> SECTOR_SHIFT; if (lp->read_ahead != DM_READ_AHEAD_AUTO && lp->read_ahead != DM_READ_AHEAD_NONE && From wysochanski@sourceware.org Thu Dec 3 01:48:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Thu, 03 Dec 2009 01:48:00 -0000 Subject: LVM2 ./WHATS_NEW test/t-lvcreate-usage.sh Message-ID: <20091203014807.5443.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-12-03 01:48:07 Modified files: . : WHATS_NEW test : t-lvcreate-usage.sh Log message: Add tests to check for readahead value in lvcreate. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1336&r2=1.1337 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-lvcreate-usage.sh.diff?cvsroot=lvm2&r1=1.16&r2=1.17 --- LVM2/WHATS_NEW 2009/12/01 19:10:23 1.1336 +++ LVM2/WHATS_NEW 2009/12/03 01:48:05 1.1337 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Fix lvcreate --readahead. Fix clvmd memory leak in lv_info_by_lvid. Do not allow creating mirrors of more than 8 images. Use locking_type 3 (compiled in cluster locking) in lvmconf. --- LVM2/test/t-lvcreate-usage.sh 2009/09/30 16:13:53 1.16 +++ LVM2/test/t-lvcreate-usage.sh 2009/12/03 01:48:07 1.17 @@ -125,3 +125,18 @@ lvchange -a n $vg/$lv1 lvremove $vg/$lv1 lvremove -ff $vg + +# readahead default (auto), none, #, auto +lvcreate -L 32m -n $lv $vg +check_lv_field_ $vg/$lv lv_read_ahead "auto" +lvremove -ff $vg +lvcreate -L 32m -n $lv --readahead none $vg +check_lv_field_ $vg/$lv lv_read_ahead "0" +lvremove -ff $vg +lvcreate -L 32m -n $lv --readahead 8k $vg +check_lv_field_ $vg/$lv lv_read_ahead "8.00k" +lvremove -ff $vg +lvcreate -L 32m -n $lv --readahead auto $vg +check_lv_field_ $vg/$lv lv_read_ahead "auto" +lvremove -ff $vg + From zkabelac@sourceware.org Thu Dec 3 09:58:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Thu, 03 Dec 2009 09:58:00 -0000 Subject: LVM2 lib/activate/dev_manager.c libdm/libdm-de ... Message-ID: <20091203095831.9522.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-12-03 09:58:30 Modified files: lib/activate : dev_manager.c libdm : libdm-deptree.c Log message: minor whitespace indentation Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.163&r2=1.164 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-deptree.c.diff?cvsroot=lvm2&r1=1.62&r2=1.63 --- LVM2/lib/activate/dev_manager.c 2009/11/04 14:56:35 1.163 +++ LVM2/lib/activate/dev_manager.c 2009/12/03 09:58:30 1.164 @@ -783,7 +783,7 @@ sprintf(errid, "missing_%d_%d", segno, s); - if (!(id = build_dlid(dm, seg->lv->lvid.s, errid))) + if (!(id = build_dlid(dm, seg->lv->lvid.s, errid))) return_NULL; if (!(name = build_dm_name(dm->mem, seg->lv->vg->name, @@ -1269,7 +1269,7 @@ default: log_error("_tree_action: Action %u not supported.", action); goto out; - } + } r = 1; --- LVM2/libdm/libdm-deptree.c 2009/11/13 12:43:22 1.62 +++ LVM2/libdm/libdm-deptree.c 2009/12/03 09:58:30 1.63 @@ -645,7 +645,7 @@ void dm_tree_node_set_read_ahead(struct dm_tree_node *dnode, uint32_t read_ahead, uint32_t read_ahead_flags) -{ +{ dnode->props.read_ahead = read_ahead; dnode->props.read_ahead_flags = read_ahead_flags; } @@ -1064,8 +1064,8 @@ } int dm_tree_suspend_children(struct dm_tree_node *dnode, - const char *uuid_prefix, - size_t uuid_prefix_len) + const char *uuid_prefix, + size_t uuid_prefix_len) { void *handle = NULL; struct dm_tree_node *child = dnode; @@ -1849,7 +1849,7 @@ int dm_tree_node_add_mirror_target_log(struct dm_tree_node *node, uint32_t region_size, - unsigned clustered, + unsigned clustered, const char *log_uuid, unsigned area_count, uint32_t flags) From zkabelac@sourceware.org Thu Dec 3 09:59:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Thu, 03 Dec 2009 09:59:00 -0000 Subject: LVM2/lib/activate dev_manager.c Message-ID: <20091203095955.9819.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-12-03 09:59:54 Modified files: lib/activate : dev_manager.c Log message: skip cast from (void*) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.164&r2=1.165 --- LVM2/lib/activate/dev_manager.c 2009/12/03 09:58:30 1.164 +++ LVM2/lib/activate/dev_manager.c 2009/12/03 09:59:54 1.165 @@ -1095,7 +1095,7 @@ int r = 1; while ((child = dm_tree_next_child(&handle, root, 0))) { - if (!(lvlayer = (struct lv_layer *) dm_tree_node_get_context(child))) + if (!(lvlayer = dm_tree_node_get_context(child))) continue; /* Detect rename */ From zkabelac@sourceware.org Thu Dec 3 10:01:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Thu, 03 Dec 2009 10:01:00 -0000 Subject: LVM2/lib/activate dev_manager.c Message-ID: <20091203100130.15396.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-12-03 10:01:30 Modified files: lib/activate : dev_manager.c Log message: minor indent change Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.165&r2=1.166 --- LVM2/lib/activate/dev_manager.c 2009/12/03 09:59:54 1.165 +++ LVM2/lib/activate/dev_manager.c 2009/12/03 10:01:30 1.166 @@ -971,7 +971,8 @@ /* Add any LVs used by this segment */ for (s = 0; s < seg->area_count; s++) if ((seg_type(seg, s) == AREA_LV) && - (!_add_new_lv_to_dtree(dm, dtree, seg_lv(seg, s), NULL))) + (!_add_new_lv_to_dtree(dm, dtree, seg_lv(seg, s), + NULL))) return_0; } @@ -1018,7 +1019,8 @@ return 1; if (!(lvlayer = dm_pool_alloc(dm->mem, sizeof(*lvlayer)))) { - log_error("_add_new_lv_to_dtree: pool alloc failed for %s %s.", lv->name, layer); + log_error("_add_new_lv_to_dtree: pool alloc failed for %s %s.", + lv->name, layer); return 0; } From mbroz@sourceware.org Thu Dec 3 19:18:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Thu, 03 Dec 2009 19:18:00 -0000 Subject: LVM2 ./WHATS_NEW lib/format_text/archive.c lib ... Message-ID: <20091203191836.25180.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-03 19:18:34 Modified files: . : WHATS_NEW lib/format_text: archive.c lib/metadata : lv_manip.c metadata.c tools : lvchange.c lvmchange.c lvresize.c pvremove.c vgremove.c Log message: Fix tools to report error when stopped by user. (And do not produce internal error message.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1337&r2=1.1338 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/archive.c.diff?cvsroot=lvm2&r1=1.36&r2=1.37 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_manip.c.diff?cvsroot=lvm2&r1=1.187&r2=1.188 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.299&r2=1.300 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvchange.c.diff?cvsroot=lvm2&r1=1.112&r2=1.113 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvmchange.c.diff?cvsroot=lvm2&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvresize.c.diff?cvsroot=lvm2&r1=1.116&r2=1.117 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvremove.c.diff?cvsroot=lvm2&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgremove.c.diff?cvsroot=lvm2&r1=1.57&r2=1.58 --- LVM2/WHATS_NEW 2009/12/03 01:48:05 1.1337 +++ LVM2/WHATS_NEW 2009/12/03 19:18:33 1.1338 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Fix tools to use log_error when stopped by user. Fix lvcreate --readahead. Fix clvmd memory leak in lv_info_by_lvid. Do not allow creating mirrors of more than 8 images. --- LVM2/lib/format_text/archive.c 2009/07/26 12:40:27 1.36 +++ LVM2/lib/format_text/archive.c 2009/12/03 19:18:33 1.37 @@ -317,7 +317,7 @@ */ /* FIXME Use variation on _vg_read */ if (!(vg = text_vg_import_file(tf, af->path, &when, &desc))) { - log_print("Unable to read archive file."); + log_error("Unable to read archive file."); tf->fmt->ops->destroy_instance(tf); return; } --- LVM2/lib/metadata/lv_manip.c 2009/12/03 01:47:33 1.187 +++ LVM2/lib/metadata/lv_manip.c 2009/12/03 19:18:33 1.188 @@ -2103,7 +2103,7 @@ "%slogical volume %s? [y/n]: ", vg_is_clustered(vg) ? "clustered " : "", lv->name) == 'n') { - log_print("Logical volume %s not removed", lv->name); + log_error("Logical volume %s not removed", lv->name); return 0; } } --- LVM2/lib/metadata/metadata.c 2009/11/24 22:55:56 1.299 +++ LVM2/lib/metadata/metadata.c 2009/12/03 19:18:34 1.300 @@ -1223,7 +1223,7 @@ /* prompt */ if (pv && !is_orphan(pv) && !pp->yes && yes_no_prompt(_really_init, name, pv_vg_name(pv)) == 'n') { - log_print("%s: physical volume not initialized", name); + log_error("%s: physical volume not initialized", name); return 0; } --- LVM2/tools/lvchange.c 2009/11/04 12:39:56 1.112 +++ LVM2/tools/lvchange.c 2009/12/03 19:18:34 1.113 @@ -183,7 +183,7 @@ yes_no_prompt("Do you really want to deactivate " "logical volume %s to resync it? [y/n]: ", lv->name) == 'n') { - log_print("Logical volume \"%s\" not resynced", + log_error("Logical volume \"%s\" not resynced", lv->name); return 0; } @@ -433,7 +433,7 @@ yes_no_prompt("Logical volume %s will be " "deactivated temporarily. " "Continue? [y/n]: ", lv->name) == 'n') { - log_print("%s device number not changed.", + log_error("%s device number not changed.", lv->name); return 0; } --- LVM2/tools/lvmchange.c 2008/01/30 14:00:02 1.8 +++ LVM2/tools/lvmchange.c 2009/12/03 19:18:34 1.9 @@ -18,6 +18,6 @@ int lvmchange(struct cmd_context *cmd __attribute((unused)), int argc __attribute((unused)), char **argv __attribute((unused))) { - log_print("With LVM2 and the device mapper, this program is obsolete."); + log_error("With LVM2 and the device mapper, this program is obsolete."); return ECMD_FAILED; } --- LVM2/tools/lvresize.c 2009/11/04 14:47:28 1.116 +++ LVM2/tools/lvresize.c 2009/12/03 19:18:34 1.117 @@ -120,7 +120,7 @@ if (!arg_count(cmd, force_ARG)) { if (yes_no_prompt("Do you really want to reduce %s? [y/n]: ", lp->lv_name) == 'n') { - log_print("Logical volume %s NOT reduced", lp->lv_name); + log_error("Logical volume %s NOT reduced", lp->lv_name); return 0; } if (sigint_caught()) --- LVM2/tools/pvremove.c 2009/02/25 23:29:07 1.26 +++ LVM2/tools/pvremove.c 2009/12/03 19:18:34 1.27 @@ -74,7 +74,7 @@ /* prompt */ if (!arg_count(cmd, yes_ARG) && yes_no_prompt(_really_wipe, name, pv_vg_name(pv)) == 'n') { - log_print("%s: physical volume label not removed", name); + log_error("%s: physical volume label not removed", name); return 0; } --- LVM2/tools/vgremove.c 2009/09/15 01:38:59 1.57 +++ LVM2/tools/vgremove.c 2009/12/03 19:18:34 1.58 @@ -36,7 +36,7 @@ "group \"%s\" containing %u " "logical volumes? [y/n]: ", vg_name, lv_count) == 'n')) { - log_print("Volume group \"%s\" not removed", vg_name); + log_error("Volume group \"%s\" not removed", vg_name); return ECMD_FAILED; } if (!remove_lvs_in_vg(cmd, vg, force)) { From mbroz@sourceware.org Thu Dec 3 19:20:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Thu, 03 Dec 2009 19:20:00 -0000 Subject: LVM2 ./WHATS_NEW tools/vgcreate.c Message-ID: <20091203192049.26423.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-03 19:20:49 Modified files: . : WHATS_NEW tools : vgcreate.c Log message: Print error if VG already exist. This test have to be moved because of new vg read error handling. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1338&r2=1.1339 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.75&r2=1.76 --- LVM2/WHATS_NEW 2009/12/03 19:18:33 1.1338 +++ LVM2/WHATS_NEW 2009/12/03 19:20:48 1.1339 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Fix error message if VG already exist in vgcreate. Fix tools to use log_error when stopped by user. Fix lvcreate --readahead. Fix clvmd memory leak in lv_info_by_lvid. --- LVM2/tools/vgcreate.c 2009/11/01 20:05:17 1.75 +++ LVM2/tools/vgcreate.c 2009/12/03 19:20:49 1.76 @@ -55,8 +55,13 @@ /* Create the new VG */ vg = vg_create(cmd, vp_new.vg_name); - if (vg_read_error(vg)) - goto_bad; + if (vg_read_error(vg)) { + if (vg_read_error(vg) == FAILED_EXIST) + log_error("A volume group called %s already exists.", vp_new.vg_name); + else + log_error("Can't get lock for %s.", vp_new.vg_name); + goto bad; + } if (!vg_set_extent_size(vg, vp_new.extent_size) || !vg_set_max_lv(vg, vp_new.max_lv) || From mbroz@sourceware.org Thu Dec 3 19:22:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Thu, 03 Dec 2009 19:22:00 -0000 Subject: LVM2 ./WHATS_NEW tools/pvmove.c Message-ID: <20091203192225.27023.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-03 19:22:24 Modified files: . : WHATS_NEW tools : pvmove.c Log message: Fix pvmove test mode to not fail and do not poll. Test mode should not fail nor try to poll non-existent devices. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1339&r2=1.1340 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvmove.c.diff?cvsroot=lvm2&r1=1.68&r2=1.69 --- LVM2/WHATS_NEW 2009/12/03 19:20:48 1.1339 +++ LVM2/WHATS_NEW 2009/12/03 19:22:24 1.1340 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Fix pvmove test mode to not fail and do not poll. Fix error message if VG already exist in vgcreate. Fix tools to use log_error when stopped by user. Fix lvcreate --readahead. --- LVM2/tools/pvmove.c 2009/11/03 15:50:44 1.68 +++ LVM2/tools/pvmove.c 2009/12/03 19:22:24 1.69 @@ -312,8 +312,10 @@ /* FIXME: Add option to use a log */ if (first_time) { if (!_activate_lv(cmd, lv_mirr, exclusive)) { - if (test_mode()) + if (test_mode()) { + r = 1; goto out; + } /* * Nothing changed yet, try to revert pvmove. @@ -570,6 +572,9 @@ int pvmove_poll(struct cmd_context *cmd, const char *pv_name, unsigned background) { + if (test_mode()) + return ECMD_PROCESSED; + return poll_daemon(cmd, pv_name, NULL, background, PVMOVE, &_pvmove_fns, "Moved"); } From mbroz@sourceware.org Thu Dec 3 19:23:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Thu, 03 Dec 2009 19:23:00 -0000 Subject: LVM2 ./WHATS_NEW lib/activate/activate.c Message-ID: <20091203192341.27445.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-03 19:23:40 Modified files: . : WHATS_NEW lib/activate : activate.c Log message: Fix memory lock imbalance in lv_suspend if already suspended. pvmove suspends all moved LVs + pvmoveX mirrored LV itself. This suspends even underlying pvmoveX and following explicit suspend call is just noop. But in resume the pvmoveX volume is no longer underlying device for moved LVs, so it performs full resume with memlock decrease. Code must call memlock_inc() if suspend is requested, volume is already suspended and error is not requested. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1340&r2=1.1341 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.c.diff?cvsroot=lvm2&r1=1.159&r2=1.160 --- LVM2/WHATS_NEW 2009/12/03 19:22:24 1.1340 +++ LVM2/WHATS_NEW 2009/12/03 19:23:40 1.1341 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Fix memory lock imbalance in lv_suspend if already suspended. Fix pvmove test mode to not fail and do not poll. Fix error message if VG already exist in vgcreate. Fix tools to use log_error when stopped by user. --- LVM2/lib/activate/activate.c 2009/12/01 19:10:23 1.159 +++ LVM2/lib/activate/activate.c 2009/12/03 19:23:40 1.160 @@ -879,7 +879,11 @@ goto_out; if (!info.exists || info.suspended) { - r = error_if_not_suspended ? 0 : 1; + if (!error_if_not_suspended) { + r = 1; + if (info.suspended) + memlock_inc(); + } goto out; } From prajnoha@sourceware.org Fri Dec 4 14:03:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Fri, 04 Dec 2009 14:03:00 -0000 Subject: LVM2/tools pvmove.c Message-ID: <20091204140318.17556.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-12-04 14:03:18 Modified files: tools : pvmove.c Log message: Give better message for pvmove when all data on source PV is skipped. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvmove.c.diff?cvsroot=lvm2&r1=1.69&r2=1.70 --- LVM2/tools/pvmove.c 2009/12/03 19:22:24 1.69 +++ LVM2/tools/pvmove.c 2009/12/04 14:03:18 1.70 @@ -180,6 +180,7 @@ struct lv_list *lvl; uint32_t log_count = 0; int lv_found = 0; + int lv_skipped = 0; /* FIXME Cope with non-contiguous => splitting existing segments */ if (!(lv_mirr = lv_create_empty("pvmove%d", NULL, @@ -209,22 +210,27 @@ lv_found = 1; } if (lv_is_origin(lv) || lv_is_cow(lv)) { + lv_skipped = 1; log_print("Skipping snapshot-related LV %s", lv->name); continue; } if (lv->status & MIRRORED) { + lv_skipped = 1; log_print("Skipping mirror LV %s", lv->name); continue; } if (lv->status & MIRROR_LOG) { + lv_skipped = 1; log_print("Skipping mirror log LV %s", lv->name); continue; } if (lv->status & MIRROR_IMAGE) { + lv_skipped = 1; log_print("Skipping mirror image LV %s", lv->name); continue; } if (lv->status & LOCKED) { + lv_skipped = 1; log_print("Skipping locked LV %s", lv->name); continue; } @@ -240,6 +246,10 @@ /* Is temporary mirror empty? */ if (!lv_mirr->le_count) { + if (lv_skipped) + log_error("All data on source PV skipped. " + "It contains locked, hidden or " + "non-top level LVs only."); log_error("No data to move for %s", vg->name); return NULL; } From prajnoha@sourceware.org Fri Dec 4 14:26:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Fri, 04 Dec 2009 14:26:00 -0000 Subject: LVM2 WHATS_NEW Message-ID: <20091204142623.23994.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-12-04 14:26:23 Modified files: . : WHATS_NEW Log message: WHATS_NEW for previous commit. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1341&r2=1.1342 --- LVM2/WHATS_NEW 2009/12/03 19:23:40 1.1341 +++ LVM2/WHATS_NEW 2009/12/04 14:26:22 1.1342 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Give better error message for pvmove when all data is skipped. Fix memory lock imbalance in lv_suspend if already suspended. Fix pvmove test mode to not fail and do not poll. Fix error message if VG already exist in vgcreate. From wysochanski@sourceware.org Fri Dec 4 17:48:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Fri, 04 Dec 2009 17:48:00 -0000 Subject: LVM2/lib format_text/import_vsn1.c format_text ... Message-ID: <20091204174833.25123.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-12-04 17:48:32 Modified files: lib/format_text: import_vsn1.c text_import.h lib/metadata : lv_alloc.h lv_manip.c Log message: Update a few more uint64_t's related to the 64-bit status change. At this point they probably do not matter but going forward they may - depends on future patches for replicator, etc. I think these probably got missed because they were 'flags' so I changed the name to 'status' to be consistent. So the on-disk things 'flags' and the in structure 'status' (bits). NOTE: WHATS_NEW already has entry for this in current release. Signed-off-by: Dave Wysochanski Acked-by: Mike Snitzer Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/import_vsn1.c.diff?cvsroot=lvm2&r1=1.66&r2=1.67 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/text_import.h.diff?cvsroot=lvm2&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_alloc.h.diff?cvsroot=lvm2&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_manip.c.diff?cvsroot=lvm2&r1=1.188&r2=1.189 --- LVM2/lib/format_text/import_vsn1.c 2009/11/24 22:55:56 1.66 +++ LVM2/lib/format_text/import_vsn1.c 2009/12/04 17:48:32 1.67 @@ -372,7 +372,7 @@ int text_import_areas(struct lv_segment *seg, const struct config_node *sn, const struct config_node *cn, struct dm_hash_table *pv_hash, - uint32_t flags) + uint64_t status) { unsigned int s; struct config_value *cv; @@ -410,7 +410,7 @@ } else if ((lv1 = find_lv(seg->lv->vg, cv->v.str))) { if (!set_lv_segment_area_lv(seg, s, lv1, (uint32_t) cv->next->v.i, - flags)) + status)) return_0; } else { log_error("Couldn't find volume '%s' " --- LVM2/lib/format_text/text_import.h 2007/08/20 20:55:26 1.4 +++ LVM2/lib/format_text/text_import.h 2009/12/04 17:48:32 1.5 @@ -21,6 +21,6 @@ int text_import_areas(struct lv_segment *seg, const struct config_node *sn, const struct config_node *cn, struct dm_hash_table *pv_hash, - uint32_t flags); + uint64_t status); #endif --- LVM2/lib/metadata/lv_alloc.h 2009/11/24 22:55:56 1.24 +++ LVM2/lib/metadata/lv_alloc.h 2009/12/04 17:48:32 1.25 @@ -35,7 +35,7 @@ struct physical_volume *pv, uint32_t pe); int set_lv_segment_area_lv(struct lv_segment *seg, uint32_t area_num, struct logical_volume *lv, uint32_t le, - uint32_t flags); + uint64_t status); int move_lv_segment_area(struct lv_segment *seg_to, uint32_t area_to, struct lv_segment *seg_from, uint32_t area_from); void release_lv_segment_area(struct lv_segment *seg, uint32_t s, --- LVM2/lib/metadata/lv_manip.c 2009/12/03 19:18:33 1.188 +++ LVM2/lib/metadata/lv_manip.c 2009/12/04 17:48:32 1.189 @@ -333,7 +333,7 @@ */ int set_lv_segment_area_lv(struct lv_segment *seg, uint32_t area_num, struct logical_volume *lv, uint32_t le, - uint32_t flags) + uint64_t status) { log_very_verbose("Stack %s:%" PRIu32 "[%" PRIu32 "] on LV %s:%" PRIu32, seg->lv->name, seg->le, area_num, lv->name, le); @@ -341,7 +341,7 @@ seg->areas[area_num].type = AREA_LV; seg_lv(seg, area_num) = lv; seg_le(seg, area_num) = le; - lv->status |= flags; + lv->status |= status; if (!add_seg_to_segs_using_this_lv(lv, seg)) return_0; From prajnoha@sourceware.org Mon Dec 7 12:03:00 2009 From: prajnoha@sourceware.org (prajnoha@sourceware.org) Date: Mon, 07 Dec 2009 12:03:00 -0000 Subject: LVM2 ./WHATS_NEW_DM udev/10-dm.rules.in Message-ID: <20091207120347.20090.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2009-12-07 12:03:47 Modified files: . : WHATS_NEW_DM udev : 10-dm.rules.in Log message: Disable udev rules on change event with DISK_RO=1. There's a new change udev event generated since kernel 2.6.32 that notifies userspace about a change in read-only attribute for block devices (with DISK_RO=1 environment variable set). We need to detect this and disable the rule application so the meaning of this change event is not interchanged with the regular change event used while resuming/renaming DM devices. If there's anybody awaiting this notification in foreign rules, he can still check for this env var and do the appropriate actions separately. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.320&r2=1.321 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/udev/10-dm.rules.in.diff?cvsroot=lvm2&r1=1.6&r2=1.7 --- LVM2/WHATS_NEW_DM 2009/11/24 19:04:23 1.320 +++ LVM2/WHATS_NEW_DM 2009/12/07 12:03:47 1.321 @@ -1,5 +1,6 @@ Version 1.02.41 - ==================================== + Disable udev rules for change events with DISK_RO set. Version 1.02.40 - 19th November 2009 ==================================== --- LVM2/udev/10-dm.rules.in 2009/11/01 18:01:31 1.6 +++ LVM2/udev/10-dm.rules.in 2009/12/07 12:03:47 1.7 @@ -19,6 +19,13 @@ SUBSYSTEM!="block", GOTO="dm_end" KERNEL!="dm-[0-9]*", GOTO="dm_end" +# There is a new change event generated in block layer since kernel +# version 2.6.32. It adds notification for changes in read-only +# attribute. We don't want to misinterpret the regular meaning of change +# events for DM devices and we don't want to apply the rules prematurely, +# therefore we disable them in this situation. +ENV{DISK_RO}=="1", GOTO="dm_disable" + # Set proper sbin path, /sbin has higher priority than /usr/sbin. ENV{DM_SBIN_PATH}="/sbin" TEST!="$env{DM_SBIN_PATH}/dmsetup", ENV{DM_SBIN_PATH}="/usr/sbin" From wysochanski@sourceware.org Mon Dec 7 19:32:00 2009 From: wysochanski@sourceware.org (wysochanski@sourceware.org) Date: Mon, 07 Dec 2009 19:32:00 -0000 Subject: LVM2/tools vgchange.c Message-ID: <20091207193229.28094.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2009-12-07 19:32:28 Modified files: tools : vgchange.c Log message: Fix activated/deactivated log_verbose message I see "Deactivated" message when I activate and "Activated" message when I deactivate. The code uses "activate" as boolean but it can be any one of the enum values from CHANGE_AY, CHANGE_AN, CHANGE_AE, etc. Signed-off-by: Malahal Naineni Acked-by: Dave Wysochanski Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgchange.c.diff?cvsroot=lvm2&r1=1.91&r2=1.92 --- LVM2/tools/vgchange.c 2009/11/24 16:08:49 1.91 +++ LVM2/tools/vgchange.c 2009/12/07 19:32:28 1.92 @@ -104,8 +104,8 @@ if (expected_count) log_verbose("%s %d logical volumes in volume group %s", - activate ? "Activated" : "Deactivated", - count, vg->name); + (activate == CHANGE_AN || activate == CHANGE_ALN)? + "Deactivated" : "Activated", count, vg->name); return (expected_count != count) ? ECMD_FAILED : ECMD_PROCESSED; } From mbroz@sourceware.org Wed Dec 9 18:09:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 18:09:00 -0000 Subject: LVM2 ./WHATS_NEW lib/metadata/mirror.c Message-ID: <20091209180953.24797.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 18:09:53 Modified files: . : WHATS_NEW lib/metadata : mirror.c Log message: Remove newly created log volume if initial deactivation fails. If there is problem deactivate LV and _init_mirror_log is called with remove_on_failure = 1, remove the newly created log LV from metadata. (This can happen if there is active device with the same name but different UUID.) The main reason for this "workaround" patch is to - do not keep _mlog volume in metadata, so user can repeat the action - print better error message describing the real problem # lvcreate -m 2 -n lv1 -l 1 --nosync vg_bar WARNING: New mirror won't be synchronised. Don't read what you didn't write! /dev/vg_bar/lv1_mlog: not found: device not cleared Aborting. Failed to wipe mirror log. Error locking on node bar-01: Input/output error Unable to deactivate mirror log LV. Manual intervention required. Failed to create mirror log. # lvcreate -m 2 -n lv1 -l 1 --nosync vg_bar WARNING: New mirror won't be synchronised. Don't read what you didn't write! Aborting. Unable to deactivate mirror log. Failed to initialise mirror log. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1342&r2=1.1343 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.96&r2=1.97 --- LVM2/WHATS_NEW 2009/12/04 14:26:22 1.1342 +++ LVM2/WHATS_NEW 2009/12/09 18:09:52 1.1343 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Remove log volume from metadata if initial deactivation fails. Give better error message for pvmove when all data is skipped. Fix memory lock imbalance in lv_suspend if already suspended. Fix pvmove test mode to not fail and do not poll. --- LVM2/lib/metadata/mirror.c 2009/11/24 22:55:56 1.96 +++ LVM2/lib/metadata/mirror.c 2009/12/09 18:09:52 1.97 @@ -255,8 +255,16 @@ /* If the LV is active, deactivate it first. */ if (lv_info(cmd, log_lv, &info, 0, 0) && info.exists) { - if (!deactivate_lv(cmd, log_lv)) - return_0; + (void)deactivate_lv(cmd, log_lv); + /* + * FIXME: workaround to fail early + * Ensure that log is really deactivated because deactivate_lv + * on cluster do not fail if there is log_lv with different UUID. + */ + if (lv_info(cmd, log_lv, &info, 0, 0) && info.exists) { + log_error("Aborting. Unable to deactivate mirror log."); + goto revert_new_lv; + } was_active = 1; } @@ -1354,7 +1362,7 @@ } if (!_init_mirror_log(cmd, log_lv, in_sync, &lv->tags, 1)) { - log_error("Failed to create mirror log."); + log_error("Failed to initialise mirror log."); return NULL; } From mbroz@sourceware.org Wed Dec 9 18:16:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 18:16:00 -0000 Subject: LVM2/lib/locking cluster_locking.c Message-ID: <20091209181639.27500.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 18:16:38 Modified files: lib/locking : cluster_locking.c Log message: Get rid of hardcoded 0xffdf cluster lock flag. There is hidded change - the upper flags (0xffff0000) and now not cleared, but there are unused anyway. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/cluster_locking.c.diff?cvsroot=lvm2&r1=1.36&r2=1.37 --- LVM2/lib/locking/cluster_locking.c 2009/06/12 08:30:19 1.36 +++ LVM2/lib/locking/cluster_locking.c 2009/12/09 18:16:38 1.37 @@ -415,7 +415,7 @@ clvmd_cmd = CLVMD_CMD_LOCK_LV; strcpy(lockname, resource); lock_scope = "LV"; - flags &= 0xffdf; /* Mask off HOLD flag */ + flags &= ~LCK_HOLD; /* Mask off HOLD flag */ break; default: From mbroz@sourceware.org Wed Dec 9 18:28:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 18:28:00 -0000 Subject: LVM2/lib/locking cluster_locking.c Message-ID: <20091209182827.31047.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 18:28:27 Modified files: lib/locking : cluster_locking.c Log message: Get rid of magic masks in cluster locking code. Patch should not cause any problems, only real change is removing LCK_LOCAL bit from lock type flag, it is never used there. (LCK_LOCAL is part arg[1] bits anyway.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/cluster_locking.c.diff?cvsroot=lvm2&r1=1.37&r2=1.38 --- LVM2/lib/locking/cluster_locking.c 2009/12/09 18:16:38 1.37 +++ LVM2/lib/locking/cluster_locking.c 2009/12/09 18:28:27 1.38 @@ -317,8 +317,9 @@ args = alloca(len); strcpy(args + 2, name); - args[0] = flags & 0x7F; /* Maskoff lock flags */ - args[1] = flags & 0xC0; /* Bitmap flags */ + /* Maskoff lock flags */ + args[0] = flags & (LCK_SCOPE_MASK | LCK_TYPE_MASK | LCK_NONBLOCK | LCK_HOLD); + args[1] = flags & (LCK_LOCAL | LCK_CLUSTER_VG); if (mirror_in_sync()) args[1] |= LCK_MIRROR_NOSYNC_MODE; From mbroz@sourceware.org Wed Dec 9 18:42:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 18:42:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/clvmd-command.c ... Message-ID: <20091209184203.6137.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 18:42:03 Modified files: . : WHATS_NEW daemons/clvmd : clvmd-command.c lvm-functions.c Log message: Get rid of magic masks in cluster locking code - clvmd part. - do_command and lock_vg expect flags (no change here) Bug fixes: - lock_vg should check for NONBLOCK on lock_cmd, flags have this bit masked-out - do_pre/post_command expect do not mask flag at all, this causes that the code inside is never run! (see following patches, these functions expect plain command without flags) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1343&r2=1.1344 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/clvmd-command.c.diff?cvsroot=lvm2&r1=1.28&r2=1.29 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.72&r2=1.73 --- LVM2/WHATS_NEW 2009/12/09 18:09:52 1.1343 +++ LVM2/WHATS_NEW 2009/12/09 18:42:02 1.1344 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Replace magic masks in cluster locking code by defined masks. Remove log volume from metadata if initial deactivation fails. Give better error message for pvmove when all data is skipped. Fix memory lock imbalance in lv_suspend if already suspended. --- LVM2/daemons/clvmd/clvmd-command.c 2009/05/19 10:39:00 1.28 +++ LVM2/daemons/clvmd/clvmd-command.c 2009/12/09 18:42:03 1.29 @@ -132,7 +132,7 @@ case CLVMD_CMD_LOCK_LV: /* This is the biggie */ - lock_cmd = args[0] & 0x3F; + lock_cmd = args[0] & (LCK_NONBLOCK | LCK_HOLD | LCK_SCOPE_MASK | LCK_TYPE_MASK); lock_flags = args[1]; lockname = &args[2]; status = do_lock_lv(lock_cmd, lock_flags, lockname); @@ -214,7 +214,7 @@ client->bits.localsock.private = (void *)lock_hash; } - lock_cmd = args[0] & 0x3F; + lock_cmd = args[0] & (LCK_NONBLOCK | LCK_HOLD | LCK_SCOPE_MASK | LCK_TYPE_MASK); lock_flags = args[1]; lockname = &args[2]; DEBUGLOG("doing PRE command LOCK_VG '%s' at %x (client=%p)\n", lockname, lock_cmd, client); @@ -237,7 +237,7 @@ lock_cmd &= ~LCK_TYPE_MASK; lock_cmd |= LCK_PREAD; } - status = sync_lock(lockname, (int)lock_cmd, (lock_flags & LCK_NONBLOCK) ? LKF_NOQUEUE : 0, &lkid); + status = sync_lock(lockname, (int)lock_cmd, (lock_cmd & LCK_NONBLOCK) ? LKF_NOQUEUE : 0, &lkid); if (status) status = errno; else --- LVM2/daemons/clvmd/lvm-functions.c 2009/11/23 10:44:51 1.72 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 18:42:03 1.73 @@ -542,7 +542,7 @@ lock out on this node (because we are the node modifying the metadata) before suspending cluster-wide. */ - if (command == LCK_LV_SUSPEND) { + if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_SUSPEND) { DEBUGLOG("pre_lock_lv: resource '%s', cmd = %s, flags = %s\n", resource, decode_locking_cmd(command), decode_flags(lock_flags)); @@ -559,7 +559,7 @@ int status; /* Opposite of above, done on resume after a metadata update */ - if (command == LCK_LV_RESUME) { + if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_RESUME) { int oldmode; DEBUGLOG From mbroz@sourceware.org Wed Dec 9 18:45:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 18:45:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/lvm-functions.c Message-ID: <20091209184514.9550.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 18:45:13 Modified files: . : WHATS_NEW daemons/clvmd : lvm-functions.c Log message: Allow implicit "convert" to the same lock mode. (Code already not fail if unlocking not locked resource.) This is needed in pre/post lock_lv call, where we can request the same lock on local node becuase of suspend call. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1344&r2=1.1345 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.73&r2=1.74 --- LVM2/WHATS_NEW 2009/12/09 18:42:02 1.1344 +++ LVM2/WHATS_NEW 2009/12/09 18:45:12 1.1345 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Allow implicit convert to the same cluster lock mode. Replace magic masks in cluster locking code by defined masks. Remove log volume from metadata if initial deactivation fails. Give better error message for pvmove when all data is skipped. --- LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 18:42:03 1.73 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 18:45:13 1.74 @@ -245,6 +245,11 @@ lvi = lookup_info(resource); + if (lvi && lvi->lock_mode == mode) { + DEBUGLOG("hold_lock, lock mode %d already held\n", mode); + return 0; + } + /* Only allow explicit conversions */ if (lvi && !(flags & LKF_CONVERT)) { errno = EBUSY; From mbroz@sourceware.org Wed Dec 9 18:55:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 18:55:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/lvm-functions.c Message-ID: <20091209185554.18558.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 18:55:53 Modified files: . : WHATS_NEW daemons/clvmd : lvm-functions.c Log message: Allow implicit lock conversion for pre/post callbacks. This is unnoticed regression from commit 31672ff60e405795cad70d6d7888ac011f5373ce The pre/post callback need to convert lock always, local node is going to modify metadata in this case, it it fails conversion, the call is ignored. Also it fixes bug when the lock is not yet held, we cannot set LKF_CONVERT in this case, it will fail because this lock do not exist. Note that the automatic conversion is still disabled in activate call, so the original fix (reactivation of exlusive LV) should be still in place. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1345&r2=1.1346 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.74&r2=1.75 --- LVM2/WHATS_NEW 2009/12/09 18:45:12 1.1345 +++ LVM2/WHATS_NEW 2009/12/09 18:55:53 1.1346 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Allow implicit lock conversion in pre/post callbacks on local node. Allow implicit convert to the same cluster lock mode. Replace magic masks in cluster locking code by defined masks. Remove log volume from metadata if initial deactivation fails. --- LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 18:45:13 1.74 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 18:55:53 1.75 @@ -274,7 +274,7 @@ return -1; lvi->lock_mode = mode; - status = sync_lock(resource, mode, flags, &lvi->lock_id); + status = sync_lock(resource, mode, flags & ~LKF_CONVERT, &lvi->lock_id); saved_errno = errno; if (status) { free(lvi); @@ -348,7 +348,11 @@ mode = LKM_EXMODE; } - /* Try to get the lock if it's a clustered volume group */ + /* + * Try to get the lock if it's a clustered volume group. + * Use lock conversion only if requested, to prevent implicit conversion + * of exclusive lock to shared one during activation. + */ if (lock_flags & LCK_CLUSTER_VG) { status = hold_lock(resource, mode, LKF_NOQUEUE | (lock_flags & LCK_CONVERT?LKF_CONVERT:0)); if (status) { @@ -546,12 +550,13 @@ /* Nearly all the stuff happens cluster-wide. Apart from SUSPEND. Here we get the lock out on this node (because we are the node modifying the metadata) before suspending cluster-wide. + LKF_CONVERT is used always, local node is going to modify metadata */ if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_SUSPEND) { 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| (lock_flags & LCK_CONVERT?LKF_CONVERT:0))) + if (hold_lock(resource, LKM_PWMODE, LKF_NOQUEUE | LKF_CONVERT)) return errno; } return 0; @@ -583,7 +588,7 @@ return EIO; if (lvi.exists) { - if (hold_lock(resource, LKM_CRMODE, lock_flags & LCK_CONVERT?LKF_CONVERT:0)) + if (hold_lock(resource, LKM_CRMODE, LKF_CONVERT)) return errno; } else { if (hold_unlock(resource)) From mbroz@sourceware.org Wed Dec 9 19:00:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 19:00:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/lvm-functions.c Message-ID: <20091209190017.22077.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 19:00:16 Modified files: . : WHATS_NEW daemons/clvmd : lvm-functions.c Log message: Never ever use distributed lock for LV in non-clustered VG. The LV locks make sense only for clustered LVs. Properly check cluster flag and never issue cluster lock here. There are several places in code, where it is already checked, this patch add this check to all needed calls. In previous code the lock behaviour was inconsistent, for example, the pre/post callback can take lock even for local volume, but deactivate call do not released this lock and it remains held forever. The local LV lock request now just let run the underlying activation code on local node, the same process like in local locking. (Again, this is important for new mirror repair calls, here for local mirrors but with cluster locking enabled.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1346&r2=1.1347 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.75&r2=1.76 --- LVM2/WHATS_NEW 2009/12/09 18:55:53 1.1346 +++ LVM2/WHATS_NEW 2009/12/09 19:00:16 1.1347 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Never use distributed lock for LV in non-clustered VG. Allow implicit lock conversion in pre/post callbacks on local node. Allow implicit convert to the same cluster lock mode. Replace magic masks in cluster locking code by defined masks. --- LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 18:55:53 1.75 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 19:00:16 1.76 @@ -331,7 +331,8 @@ /* Is it already open ? */ oldmode = get_current_lock(resource); - if (oldmode == mode) { + if (oldmode == mode && (lock_flags & LCK_CLUSTER_VG)) { + DEBUGLOG("do_activate_lv, lock already held at %d\n", oldmode); return 0; /* Nothing to do */ } @@ -384,13 +385,13 @@ } /* Resume the LV if it was active */ -static int do_resume_lv(char *resource) +static int do_resume_lv(char *resource, unsigned char lock_flags) { int oldmode; /* Is it open ? */ oldmode = get_current_lock(resource); - if (oldmode == -1) { + if (oldmode == -1 && (lock_flags & LCK_CLUSTER_VG)) { DEBUGLOG("do_resume_lv, lock not already held\n"); return 0; /* We don't need to do anything */ } @@ -402,15 +403,15 @@ } /* Suspend the device if active */ -static int do_suspend_lv(char *resource) +static int do_suspend_lv(char *resource, unsigned char lock_flags) { int oldmode; struct lvinfo lvi; /* Is it open ? */ oldmode = get_current_lock(resource); - if (oldmode == -1) { - DEBUGLOG("do_suspend_lv, lock held at %d\n", oldmode); + if (oldmode == -1 && (lock_flags & LCK_CLUSTER_VG)) { + DEBUGLOG("do_suspend_lv, lock not already held\n"); return 0; /* Not active, so it's OK */ } @@ -502,14 +503,14 @@ break; case LCK_LV_SUSPEND: - status = do_suspend_lv(resource); + status = do_suspend_lv(resource, lock_flags); if (!status) suspended++; break; case LCK_UNLOCK: case LCK_LV_RESUME: /* if active */ - status = do_resume_lv(resource); + status = do_resume_lv(resource, lock_flags); if (!status) suspended--; break; @@ -552,7 +553,8 @@ before suspending cluster-wide. LKF_CONVERT is used always, local node is going to modify metadata */ - if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_SUSPEND) { + if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_SUSPEND && + (lock_flags & LCK_CLUSTER_VG)) { DEBUGLOG("pre_lock_lv: resource '%s', cmd = %s, flags = %s\n", resource, decode_locking_cmd(command), decode_flags(lock_flags)); @@ -569,7 +571,8 @@ int status; /* Opposite of above, done on resume after a metadata update */ - if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_RESUME) { + if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_RESUME && + (lock_flags & LCK_CLUSTER_VG)) { int oldmode; DEBUGLOG From mbroz@sourceware.org Wed Dec 9 19:01:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 19:01:00 -0000 Subject: LVM2 ./WHATS_NEW daemons/clvmd/lvm-functions.c Message-ID: <20091209190128.30634.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 19:01:28 Modified files: . : WHATS_NEW daemons/clvmd : lvm-functions.c Log message: Add memlock information to do_lock_lv debug output. This helps a lot to detect that something strange happened. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1347&r2=1.1348 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.76&r2=1.77 --- LVM2/WHATS_NEW 2009/12/09 19:00:16 1.1347 +++ LVM2/WHATS_NEW 2009/12/09 19:01:27 1.1348 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Add memlock information to do_lock_lv debug output. Never use distributed lock for LV in non-clustered VG. Allow implicit lock conversion in pre/post callbacks on local node. Allow implicit convert to the same cluster lock mode. --- LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 19:00:16 1.76 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 19:01:28 1.77 @@ -477,8 +477,8 @@ { int status = 0; - DEBUGLOG("do_lock_lv: resource '%s', cmd = %s, flags = %s\n", - resource, decode_locking_cmd(command), decode_flags(lock_flags)); + DEBUGLOG("do_lock_lv: resource '%s', cmd = %s, flags = %s, memlock = %d\n", + resource, decode_locking_cmd(command), decode_flags(lock_flags), memlock()); if (!cmd->config_valid || config_files_changed(cmd)) { /* Reinitialise various settings inc. logging, filters */ @@ -541,7 +541,7 @@ dm_pool_empty(cmd->mem); pthread_mutex_unlock(&lvm_lock); - DEBUGLOG("Command return is %d\n", status); + DEBUGLOG("Command return is %d, memlock is %d\n", status, memlock()); return status; } From mbroz@sourceware.org Wed Dec 9 19:29:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 19:29:00 -0000 Subject: LVM2 ./WHATS_NEW lib/metadata/metadata.c Message-ID: <20091209192904.24058.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 19:29:04 Modified files: . : WHATS_NEW lib/metadata : metadata.c Log message: Allow manipulation with precommited metadata even when a PV is missing. The new recovery code first tries to repair LV and then removes failed PV from VG. It means that during operation there can be VG with PV missing, and vg_read code handles it like not consistent VG. We already allows returning "inconsistent" commited metadata, for mirror repair we need this for precommited too. (The suspend call prepares precommited metadata to inactive table on other cluster nodes.) "Inconsistent" here means - correct metadata, just with some metadata areas not found (obviously on missing or failed PVs). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1348&r2=1.1349 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.300&r2=1.301 --- LVM2/WHATS_NEW 2009/12/09 19:01:27 1.1348 +++ LVM2/WHATS_NEW 2009/12/09 19:29:04 1.1349 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Allow use precommited metadata when a PV is missing. Add memlock information to do_lock_lv debug output. Never use distributed lock for LV in non-clustered VG. Allow implicit lock conversion in pre/post callbacks on local node. --- LVM2/lib/metadata/metadata.c 2009/12/03 19:18:34 1.300 +++ LVM2/lib/metadata/metadata.c 2009/12/09 19:29:04 1.301 @@ -2481,6 +2481,7 @@ int inconsistent = 0; int inconsistent_vgid = 0; int inconsistent_pvs = 0; + int inconsistent_seqno = 0; unsigned use_precommitted = precommitted; unsigned saved_handles_missing_pvs = cmd->handles_missing_pvs; struct dm_list *pvids; @@ -2556,6 +2557,7 @@ /* FIXME Also ensure contents same - checksum compare? */ if (correct_vg->seqno != vg->seqno) { inconsistent = 1; + inconsistent_seqno = 1; if (vg->seqno > correct_vg->seqno) { vg_release(correct_vg); correct_vg = vg; @@ -2679,6 +2681,7 @@ /* FIXME Also ensure contents same - checksums same? */ if (correct_vg->seqno != vg->seqno) { inconsistent = 1; + inconsistent_seqno = 1; if (!_update_pv_list(cmd->mem, &all_pvs, vg)) { vg_release(vg); vg_release(correct_vg); @@ -2706,6 +2709,16 @@ if (use_precommitted) { log_error("Inconsistent pre-commit metadata copies " "for volume group %s", vgname); + /* FIXME: during repair, there is inconsistent flag set because some metadata areas + * are missing (on missing PVs). Code should create list of missing PVs, compare it + * with PV marked missing in metadata and if equals, use it as consistent vg. + * For now, return precommited metadata if remainng seq match here to allow + * preloading table in suspend call. + */ + if (!inconsistent_seqno) { + *consistent = 0; + return correct_vg; + } vg_release(correct_vg); return NULL; } From mbroz@sourceware.org Wed Dec 9 19:30:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 19:30:00 -0000 Subject: LVM2/daemons/clvmd lvm-functions.c Message-ID: <20091209193057.24840.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 19:30:56 Modified files: daemons/clvmd : lvm-functions.c Log message: Fix missing include. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/clvmd/lvm-functions.c.diff?cvsroot=lvm2&r1=1.77&r2=1.78 --- LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 19:01:28 1.77 +++ LVM2/daemons/clvmd/lvm-functions.c 2009/12/09 19:30:56 1.78 @@ -52,6 +52,7 @@ #include "locking.h" #include "archiver.h" #include "defaults.h" +#include "memlock.h" static struct cmd_context *cmd = NULL; static struct dm_hash_table *lv_hash = NULL; From mbroz@sourceware.org Wed Dec 9 19:43:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 19:43:00 -0000 Subject: LVM2/lib/metadata mirror.c Message-ID: <20091209194339.28299.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 19:43:39 Modified files: lib/metadata : mirror.c Log message: Use more descriptive variable name for temporary layer lv. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.97&r2=1.98 --- LVM2/lib/metadata/mirror.c 2009/12/09 18:09:52 1.97 +++ LVM2/lib/metadata/mirror.c 2009/12/09 19:43:39 1.98 @@ -502,7 +502,7 @@ uint32_t s; struct logical_volume *sub_lv; struct logical_volume *detached_log_lv = NULL; - struct logical_volume *lv1 = NULL; + struct logical_volume *temp_layer_lv = NULL; struct lv_segment *mirrored_seg = first_seg(lv); uint32_t old_area_count = mirrored_seg->area_count; uint32_t new_area_count = mirrored_seg->area_count; @@ -561,11 +561,11 @@ * leave the LV as mirrored and let the lvconvert completion * to remove the layer. */ if (new_area_count == 1 && !is_temporary_mirror_layer(lv)) { - lv1 = seg_lv(mirrored_seg, 0); - lv1->status &= ~MIRROR_IMAGE; - lv_set_visible(lv1); + temp_layer_lv = seg_lv(mirrored_seg, 0); + temp_layer_lv->status &= ~MIRROR_IMAGE; + lv_set_visible(temp_layer_lv); detached_log_lv = detach_mirror_log(mirrored_seg); - if (!remove_layer_from_lv(lv, lv1)) + if (!remove_layer_from_lv(lv, temp_layer_lv)) return_0; lv->status &= ~MIRRORED; lv->status &= ~MIRROR_NOTSYNCED; @@ -616,9 +616,9 @@ * As it's now detached from mirrored_seg->lv we must resume it * explicitly. */ - if (lv1) { - if (!resume_lv(lv1->vg->cmd, lv1)) { - log_error("Problem resuming temporary LV, %s", lv1->name); + if (temp_layer_lv) { + if (!resume_lv(temp_layer_lv->vg->cmd, temp_layer_lv)) { + log_error("Problem resuming temporary LV, %s", temp_layer_lv->name); return 0; } @@ -647,7 +647,7 @@ return_0; } - if (lv1 && !_delete_lv(lv, lv1)) + if (temp_layer_lv && !_delete_lv(lv, temp_layer_lv)) return_0; if (detached_log_lv && !_delete_lv(lv, detached_log_lv)) From mbroz@sourceware.org Wed Dec 9 19:53:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Wed, 09 Dec 2009 19:53:00 -0000 Subject: LVM2 ./WHATS_NEW lib/metadata/mirror.c Message-ID: <20091209195340.30677.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-09 19:53:39 Modified files: . : WHATS_NEW lib/metadata : mirror.c Log message: Call explicitly suspend for temporary mirror layer. The memlock_inc() fix is wrong, memlock count is not propagated to long living process (clvmd) and just it underflow there. Also suspend is needed to pre-load precommited metadata on other nodes (remapping to error taget in this case). With explicit suspend we generate lock request and code can update memlock count. (Infinitely "locked" memory caused that fs_unlock() was not called properly and on cluster nodes remains old links in /dev/mapper for not active devices.) (N.B. failing of suspend call here is not handled as fatal error - the LV is going to be removed later anyway.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1349&r2=1.1350 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.98&r2=1.99 --- LVM2/WHATS_NEW 2009/12/09 19:29:04 1.1349 +++ LVM2/WHATS_NEW 2009/12/09 19:53:39 1.1350 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Explicitly call suspend for temporary mirror layer. Allow use precommited metadata when a PV is missing. Add memlock information to do_lock_lv debug output. Never use distributed lock for LV in non-clustered VG. --- LVM2/lib/metadata/mirror.c 2009/12/09 19:43:39 1.98 +++ LVM2/lib/metadata/mirror.c 2009/12/09 19:53:39 1.99 @@ -603,6 +603,16 @@ return 0; } + /* FIXME: second suspend should not be needed + * Explicitly suspend temporary LV + * This balance memlock_inc() calls with memlock_dec() in resume + * (both localy and in cluster) and also properly propagates precommited + * metadata into dm table on other nodes. + * (visible flag set causes the suspend is not properly propagated?) + */ + if (temp_layer_lv && !suspend_lv(temp_layer_lv->vg->cmd, temp_layer_lv)) + log_error("Problem suspending temporary LV %s", temp_layer_lv->name); + if (!vg_commit(mirrored_seg->lv->vg)) { resume_lv(mirrored_seg->lv->vg->cmd, mirrored_seg->lv); return 0; @@ -616,23 +626,9 @@ * As it's now detached from mirrored_seg->lv we must resume it * explicitly. */ - if (temp_layer_lv) { - if (!resume_lv(temp_layer_lv->vg->cmd, temp_layer_lv)) { - log_error("Problem resuming temporary LV, %s", temp_layer_lv->name); - return 0; - } - - /* - * The code above calls a suspend_lv once, however we now need - * to resume 2 LVs, due to image removal: the mirror image - * itself here, and now the remaining mirror LV. Since - * suspend_lv/resume_lv call memlock_inc/memlock_dec and these - * need to be balanced, we need to call an extra memlock_inc() - * here to balance for the this extra resume -- the following - * one could otherwise either deadlock due to suspended - * devices, or alternatively drop memlock_count below 0. - */ - memlock_inc(); + if (temp_layer_lv && !resume_lv(temp_layer_lv->vg->cmd, temp_layer_lv)) { + log_error("Problem resuming temporary LV, %s", temp_layer_lv->name); + return 0; } if (!resume_lv(mirrored_seg->lv->vg->cmd, mirrored_seg->lv)) { From jbrassow@sourceware.org Thu Dec 10 22:06:00 2009 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 10 Dec 2009 22:06:00 -0000 Subject: LVM2/test t-mirror-lvconvert.sh Message-ID: <20091210220615.13274.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: jbrassow@sourceware.org 2009-12-10 22:06:15 Modified files: test : t-mirror-lvconvert.sh Log message: s/=/==/ Typo was causing sub test to always return success. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-mirror-lvconvert.sh.diff?cvsroot=lvm2&r1=1.11&r2=1.12 --- LVM2/test/t-mirror-lvconvert.sh 2009/08/02 21:59:21 1.11 +++ LVM2/test/t-mirror-lvconvert.sh 2009/12/10 22:06:15 1.12 @@ -87,7 +87,7 @@ { local lv=$1 local mlog=$(lvs --noheadings -omirror_log $lv | sed -e 's/ //g') - [ "$(basename $lv)_mlog" = "$mlog" ] + [ "$(basename $lv)_mlog" == "$mlog" ] } wait_conversion_() From zkabelac@sourceware.org Fri Dec 11 13:04:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Fri, 11 Dec 2009 13:04:00 -0000 Subject: LVM2/tools dmsetup.c Message-ID: <20091211130430.15673.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-12-11 13:04:30 Modified files: tools : dmsetup.c Log message: Fix coredump and memory leak for 'dmsetup help -c' Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/dmsetup.c.diff?cvsroot=lvm2&r1=1.128&r2=1.129 --- LVM2/tools/dmsetup.c 2009/11/13 12:43:22 1.128 +++ LVM2/tools/dmsetup.c 2009/12/11 13:04:30 1.129 @@ -2402,7 +2402,7 @@ size_t len = 0; int r = 0; - if (!strcmp(c->name, "splitname")) + if (c && !strcmp(c->name, "splitname")) options = (char *) splitname_report_options; /* emulate old dmsetup behaviour */ @@ -2591,7 +2591,11 @@ _switches[OPTIONS_ARG] = 1; _string_args[OPTIONS_ARG] = (char *) "help"; _switches[SORT_ARG] = 0; - + + if (_report) { + dm_report_free(_report); + _report = NULL; + } (void) _report_init(NULL); } From zkabelac@sourceware.org Fri Dec 11 13:11:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Fri, 11 Dec 2009 13:11:00 -0000 Subject: LVM2 ./WHATS_NEW ./WHATS_NEW_DM tools/pvresize ... Message-ID: <20091211131157.19255.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-12-11 13:11:56 Modified files: . : WHATS_NEW WHATS_NEW_DM tools : pvresize.c toollib.c Log message: Fix unlocking vg in some pvresize and toollib error paths. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1350&r2=1.1351 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.321&r2=1.322 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvresize.c.diff?cvsroot=lvm2&r1=1.33&r2=1.34 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.c.diff?cvsroot=lvm2&r1=1.179&r2=1.180 --- LVM2/WHATS_NEW 2009/12/09 19:53:39 1.1350 +++ LVM2/WHATS_NEW 2009/12/11 13:11:56 1.1351 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Fix unlocking vg in some pvresize and toollib error paths. Explicitly call suspend for temporary mirror layer. Allow use precommited metadata when a PV is missing. Add memlock information to do_lock_lv debug output. --- LVM2/WHATS_NEW_DM 2009/12/07 12:03:47 1.321 +++ LVM2/WHATS_NEW_DM 2009/12/11 13:11:56 1.322 @@ -1,5 +1,6 @@ Version 1.02.41 - ==================================== + Fix coredump and memory leak for 'dmsetup help -c'. Disable udev rules for change events with DISK_RO set. Version 1.02.40 - 19th November 2009 --- LVM2/tools/pvresize.c 2009/09/14 22:47:49 1.33 +++ LVM2/tools/pvresize.c 2009/12/11 13:11:56 1.34 @@ -60,8 +60,12 @@ vg = vg_read_for_update(cmd, vg_name, NULL, 0); - if (vg_read_error(vg)) - goto bad; + if (vg_read_error(vg)) { + vg_release(vg); + log_error("Unable to read volume group \"%s\".", + vg_name); + return 0; + } if (!(pvl = find_pv_in_vg(vg, pv_name))) { log_error("Unable to find \"%s\" in volume group \"%s\"", --- LVM2/tools/toollib.c 2009/11/24 16:13:03 1.179 +++ LVM2/tools/toollib.c 2009/12/11 13:11:56 1.180 @@ -315,7 +315,7 @@ dm_pool_strdup(cmd->mem, lv_name + 1))) { log_error("strlist allocation failed"); - vg_release(vg); + unlock_and_release_vg(cmd, vg, vgname); return ECMD_FAILED; } } @@ -367,8 +367,8 @@ if (!(pvl = find_pv_in_vg(vg, pv_dev_name(pv)))) { log_error("Unable to find %s in volume group %s", pv_dev_name(pv), vg_name); - vg_release(vg); - return ECMD_FAILED; + unlock_and_release_vg(cmd, vg, vg_name); + return ECMD_FAILED; } pv = pvl->pv; From zkabelac@sourceware.org Fri Dec 11 13:14:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Fri, 11 Dec 2009 13:14:00 -0000 Subject: LVM2 ./WHATS_NEW lib/metadata/metadata.c Message-ID: <20091211131445.21267.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-12-11 13:14:45 Modified files: . : WHATS_NEW lib/metadata : metadata.c Log message: Destroy allocated mempool in _vg_read_orphans() error path. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1351&r2=1.1352 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.301&r2=1.302 --- LVM2/WHATS_NEW 2009/12/11 13:11:56 1.1351 +++ LVM2/WHATS_NEW 2009/12/11 13:14:44 1.1352 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Destroy allocated mempool in _vg_read_orphans() error path. Fix unlocking vg in some pvresize and toollib error paths. Explicitly call suspend for temporary mirror layer. Allow use precommited metadata when a PV is missing. --- LVM2/lib/metadata/metadata.c 2009/12/09 19:29:04 1.301 +++ LVM2/lib/metadata/metadata.c 2009/12/11 13:14:44 1.302 @@ -2380,7 +2380,7 @@ if (!(vg = dm_pool_zalloc(mem, sizeof(*vg)))) { log_error("vg allocation failed"); - return NULL; + goto bad; } dm_list_init(&vg->pvs); dm_list_init(&vg->lvs); From zkabelac@sourceware.org Fri Dec 11 13:16:00 2009 From: zkabelac@sourceware.org (zkabelac@sourceware.org) Date: Fri, 11 Dec 2009 13:16:00 -0000 Subject: LVM2 lib/display/display.c lib/filters/filter- ... Message-ID: <20091211131641.22034.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2009-12-11 13:16:39 Modified files: lib/display : display.c lib/filters : filter-persistent.c filter.c lib/format1 : format1.c lvm1-label.c lib/format_pool: format_pool.c pool_label.c lib/format_text: format-text.c lib/locking : locking.c no_locking.c lib/misc : lvm-string.c libdm : libdm-deptree.c tools : dmsetup.c lvmcmdlib.c pvscan.c Log message: Cleanup returns for void functions. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/display/display.c.diff?cvsroot=lvm2&r1=1.108&r2=1.109 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/filters/filter-persistent.c.diff?cvsroot=lvm2&r1=1.38&r2=1.39 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/filters/filter.c.diff?cvsroot=lvm2&r1=1.50&r2=1.51 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/format1.c.diff?cvsroot=lvm2&r1=1.114&r2=1.115 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format1/lvm1-label.c.diff?cvsroot=lvm2&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/format_pool.c.diff?cvsroot=lvm2&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_pool/pool_label.c.diff?cvsroot=lvm2&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.116&r2=1.117 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/locking.c.diff?cvsroot=lvm2&r1=1.67&r2=1.68 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/no_locking.c.diff?cvsroot=lvm2&r1=1.19&r2=1.20 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/misc/lvm-string.c.diff?cvsroot=lvm2&r1=1.17&r2=1.18 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-deptree.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.129&r2=1.130 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvmcmdlib.c.diff?cvsroot=lvm2&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/pvscan.c.diff?cvsroot=lvm2&r1=1.48&r2=1.49 --- LVM2/lib/display/display.c 2009/11/24 22:55:56 1.108 +++ LVM2/lib/display/display.c 2009/12/11 13:16:37 1.109 @@ -327,8 +327,6 @@ pv->pe_count, pv->pe_count - pv->pe_alloc_count, pv->pe_alloc_count, *uuid ? uuid : "none"); - - return; } void pvdisplay_segments(const struct physical_volume *pv) @@ -355,7 +353,6 @@ } log_print(" "); - return; } /* FIXME Include label fields */ @@ -424,8 +421,6 @@ log_print("Allocated PE %u", pv->pe_alloc_count); log_print("PV UUID %s", *uuid ? uuid : "none"); log_print(" "); - - return; } int pvdisplay_short(const struct cmd_context *cmd __attribute((unused)), @@ -470,7 +465,6 @@ /* FIXME Add num allocated to struct! lv->lv_allocated_le, */ (lv->alloc == ALLOC_CONTIGUOUS ? 2 : 0), lv->read_ahead, inkernel ? info.major : -1, inkernel ? info.minor : -1); - return; } int lvdisplay_full(struct cmd_context *cmd, @@ -654,7 +648,6 @@ void vgdisplay_extents(const struct volume_group *vg __attribute((unused))) { - return; } void vgdisplay_full(const struct volume_group *vg) @@ -729,8 +722,6 @@ log_print("VG UUID %s", uuid); log_print(" "); - - return; } void vgdisplay_colons(const struct volume_group *vg) @@ -779,7 +770,6 @@ vg->extent_count - vg->free_count, vg->free_count, uuid[0] ? uuid : "none"); - return; } void vgdisplay_short(const struct volume_group *vg) @@ -792,7 +782,6 @@ ((uint64_t) vg->extent_count - vg->free_count) * vg->extent_size), display_size(vg->cmd, vg_free(vg))); - return; } void display_formats(const struct cmd_context *cmd) --- LVM2/lib/filters/filter-persistent.c 2009/07/08 18:13:32 1.38 +++ LVM2/lib/filters/filter-persistent.c 2009/12/11 13:16:38 1.39 @@ -171,8 +171,6 @@ if (!first) fprintf(fp, "\n\t]\n"); - - return; } int persistent_filter_dump(struct dev_filter *f) --- LVM2/lib/filters/filter.c 2009/10/27 17:00:46 1.50 +++ LVM2/lib/filters/filter.c 2009/12/11 13:16:38 1.51 @@ -331,5 +331,4 @@ void lvm_type_filter_destroy(struct dev_filter *f) { dm_free(f); - return; } --- LVM2/lib/format1/format1.c 2009/07/30 17:45:28 1.114 +++ LVM2/lib/format1/format1.c 2009/12/11 13:16:38 1.115 @@ -480,7 +480,6 @@ static void _format1_destroy_instance(struct format_instance *fid __attribute((unused))) { - return; } static void _format1_destroy(const struct format_type *fmt) --- LVM2/lib/format1/lvm1-label.c 2009/07/15 20:02:46 1.21 +++ LVM2/lib/format1/lvm1-label.c 2009/12/11 13:16:38 1.22 @@ -96,7 +96,6 @@ static void _lvm1_destroy_label(struct labeller *l __attribute((unused)), struct label *label __attribute((unused))) { - return; } static void _lvm1_destroy(struct labeller *l) --- LVM2/lib/format_pool/format_pool.c 2009/07/30 17:45:29 1.25 +++ LVM2/lib/format_pool/format_pool.c 2009/12/11 13:16:38 1.26 @@ -281,7 +281,6 @@ static void _pool_destroy_instance(struct format_instance *fid __attribute((unused))) { - return; } static void _pool_destroy(const struct format_type *fmt) --- LVM2/lib/format_pool/pool_label.c 2008/01/30 13:59:59 1.8 +++ LVM2/lib/format_pool/pool_label.c 2009/12/11 13:16:38 1.9 @@ -73,7 +73,6 @@ static void _pool_destroy_label(struct labeller *l __attribute((unused)), struct label *label __attribute((unused))) { - return; } static void _label_pool_destroy(struct labeller *l) --- LVM2/lib/format_text/format-text.c 2009/11/24 22:55:56 1.116 +++ LVM2/lib/format_text/format-text.c 2009/12/11 13:16:38 1.117 @@ -1593,7 +1593,6 @@ static void _text_destroy_instance(struct format_instance *fid __attribute((unused))) { - return; } static void _free_dirs(struct dm_list *dir_list) --- LVM2/lib/locking/locking.c 2009/11/23 10:55:14 1.67 +++ LVM2/lib/locking/locking.c 2009/12/11 13:16:38 1.68 @@ -145,8 +145,6 @@ } _signals_blocked = 1; - - return; } static void _unblock_signals(void) @@ -161,8 +159,6 @@ } _signals_blocked = 0; - - return; } static void _lock_memory(lv_operation_t lv_op) --- LVM2/lib/locking/no_locking.c 2009/09/14 22:47:49 1.19 +++ LVM2/lib/locking/no_locking.c 2009/12/11 13:16:38 1.20 @@ -27,12 +27,10 @@ static void _no_fin_locking(void) { - return; } static void _no_reset_locking(void) { - return; } static int _no_lock_resource(struct cmd_context *cmd, const char *resource, --- LVM2/lib/misc/lvm-string.c 2008/03/12 16:03:22 1.17 +++ LVM2/lib/misc/lvm-string.c 2009/12/11 13:16:39 1.18 @@ -125,7 +125,7 @@ */ static void _quote_hyphens(char **out, const char *src) { - return _quote_characters(out, src, '-', '-', 0); + _quote_characters(out, src, '-', '-', 0); } /* --- LVM2/libdm/libdm-deptree.c 2009/12/03 09:58:30 1.63 +++ LVM2/libdm/libdm-deptree.c 2009/12/11 13:16:39 1.64 @@ -268,7 +268,7 @@ static void _remove_from_toplevel(struct dm_tree_node *node) { - return _unlink_nodes(&node->dtree->root, node); + _unlink_nodes(&node->dtree->root, node); } static int _add_to_bottomlevel(struct dm_tree_node *node) @@ -278,7 +278,7 @@ static void _remove_from_bottomlevel(struct dm_tree_node *node) { - return _unlink_nodes(node, &node->dtree->root); + _unlink_nodes(node, &node->dtree->root); } static int _link_tree_nodes(struct dm_tree_node *parent, struct dm_tree_node *child) --- LVM2/tools/dmsetup.c 2009/12/11 13:04:30 1.129 +++ LVM2/tools/dmsetup.c 2009/12/11 13:16:39 1.130 @@ -2571,7 +2571,6 @@ fprintf(out, "Tree options are: ascii, utf, vt100; compact, inverted, notrunc;\n" " [no]device, active, open, rw and uuid.\n"); fprintf(out, "\n"); - return; } static void _losetup_usage(FILE *out) --- LVM2/tools/lvmcmdlib.c 2009/11/19 01:11:57 1.10 +++ LVM2/tools/lvmcmdlib.c 2009/12/11 13:16:39 1.11 @@ -102,8 +102,6 @@ struct cmd_context *cmd = (struct cmd_context *) handle; cmd->default_settings.verbose = level - VERBOSE_BASE_LEVEL; - - return; } void lvm2_log_fn(lvm2_log_fn_t log_fn) --- LVM2/tools/pvscan.c 2009/09/14 22:47:49 1.48 +++ LVM2/tools/pvscan.c 2009/12/11 13:16:39 1.49 @@ -94,7 +94,6 @@ display_size(cmd, (uint64_t) (pv_pe_count(pv) - pv_pe_alloc_count(pv)) * pv_pe_size(pv))); - return; } int pvscan(struct cmd_context *cmd, int argc __attribute((unused)), From mornfall@sourceware.org Wed Dec 16 19:22:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Wed, 16 Dec 2009 19:22:00 -0000 Subject: LVM2 lib/activate/dev_manager.c lib/cache/lvmc ... Message-ID: <20091216192214.22164.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-12-16 19:22:13 Modified files: lib/activate : dev_manager.c lib/cache : lvmcache.c lib/format_text: export.c text_label.c lib/locking : locking.c lib/log : log.c log.h lib/metadata : metadata.c lib/mm : memlock.c lib/striped : striped.c tools : lvm.c lvmcmdline.c Log message: #define an INTERNAL_ERROR macro and use it throughout LVM. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.166&r2=1.167 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/cache/lvmcache.c.diff?cvsroot=lvm2&r1=1.73&r2=1.74 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/export.c.diff?cvsroot=lvm2&r1=1.72&r2=1.73 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/text_label.c.diff?cvsroot=lvm2&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/locking/locking.c.diff?cvsroot=lvm2&r1=1.68&r2=1.69 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/log/log.c.diff?cvsroot=lvm2&r1=1.54&r2=1.55 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/log/log.h.diff?cvsroot=lvm2&r1=1.46&r2=1.47 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.302&r2=1.303 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/mm/memlock.c.diff?cvsroot=lvm2&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/striped/striped.c.diff?cvsroot=lvm2&r1=1.29&r2=1.30 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvm.c.diff?cvsroot=lvm2&r1=1.110&r2=1.111 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvmcmdline.c.diff?cvsroot=lvm2&r1=1.108&r2=1.109 --- LVM2/lib/activate/dev_manager.c 2009/12/03 10:01:30 1.166 +++ LVM2/lib/activate/dev_manager.c 2009/12/16 19:22:11 1.167 @@ -852,7 +852,7 @@ dm_tree_node_add_target_area(node, NULL, dlid, extent_size * seg_le(seg, s)); } else { - log_error("Internal error: Unassigned area found in LV %s.", + log_error(INTERNAL_ERROR "Unassigned area found in LV %s.", seg->lv->name); return 0; } @@ -911,7 +911,7 @@ uint64_t extent_size = seg->lv->vg->extent_size; if (!seg->segtype->ops->add_target_line) { - log_error("_emit_target: Internal error: Can't handle " + log_error(INTERNAL_ERROR "_emit_target cannot handle " "segment type %s", seg->segtype->name); return 0; } --- LVM2/lib/cache/lvmcache.c 2009/11/24 16:11:37 1.73 +++ LVM2/lib/cache/lvmcache.c 2009/12/16 19:22:12 1.74 @@ -227,7 +227,7 @@ vgname2 = dm_hash_get_key(_lock_hash, n); if (!_vgname_order_correct(vgname2, vgname)) { - log_errno(EDEADLK, "Internal error: VG lock %s must " + log_errno(EDEADLK, INTERNAL_ERROR "VG lock %s must " "be requested before %s, not after.", vgname, vgname2); return_0; @@ -245,7 +245,7 @@ } if (dm_hash_lookup(_lock_hash, vgname)) - log_error("Internal error: Nested locking attempted on VG %s.", + log_error(INTERNAL_ERROR "Nested locking attempted on VG %s.", vgname); if (!dm_hash_insert(_lock_hash, vgname, (void *) 1)) @@ -268,7 +268,7 @@ void lvmcache_unlock_vgname(const char *vgname) { if (!dm_hash_lookup(_lock_hash, vgname)) - log_error("Internal error: Attempt to unlock unlocked VG %s.", + log_error(INTERNAL_ERROR "Attempt to unlock unlocked VG %s.", vgname); _update_cache_lock_state(vgname, 0); @@ -1102,7 +1102,7 @@ uint32_t vgstatus, const char *creation_host) { if (!vgname && !info->vginfo) { - log_error("Internal error: NULL vgname handed to cache"); + log_error(INTERNAL_ERROR "NULL vgname handed to cache"); /* FIXME Remove this */ vgname = info->fmt->orphan_vg_name; vgid = vgname; @@ -1296,7 +1296,7 @@ if (!strcmp(vgname, VG_GLOBAL)) _vg_global_lock_held = 1; else - log_error("Internal error: Volume Group %s was not unlocked", + log_error(INTERNAL_ERROR "Volume Group %s was not unlocked", dm_hash_get_key(_lock_hash, n)); } @@ -1333,7 +1333,7 @@ } if (!dm_list_empty(&_vginfos)) - log_error("Internal error: _vginfos list should be empty"); + log_error(INTERNAL_ERROR "_vginfos list should be empty"); dm_list_init(&_vginfos); if (retain_orphans) --- LVM2/lib/format_text/export.c 2009/11/24 22:55:56 1.72 +++ LVM2/lib/format_text/export.c 2009/12/16 19:22:12 1.73 @@ -99,7 +99,7 @@ static void _dec_indent(struct formatter *f) { if (!f->indent--) { - log_error("Internal error tracking indentation"); + log_error(INTERNAL_ERROR "problem tracking indentation"); f->indent = 0; } } --- LVM2/lib/format_text/text_label.c 2009/11/24 22:55:56 1.26 +++ LVM2/lib/format_text/text_label.c 2009/12/16 19:22:12 1.27 @@ -137,7 +137,7 @@ mda2 ? "s)" : ""); if (da1 < 0) { - log_error("Internal error: %s label header currently requires " + log_error(INTERNAL_ERROR "%s label header currently requires " "a data area.", dev_name(info->dev)); return 0; } --- LVM2/lib/locking/locking.c 2009/12/11 13:16:38 1.68 +++ LVM2/lib/locking/locking.c 2009/12/16 19:22:12 1.69 @@ -349,12 +349,12 @@ assert(resource); if (!*resource) { - log_error("Internal error: Use of P_orphans is deprecated."); + log_error(INTERNAL_ERROR "Use of P_orphans is deprecated."); return 0; } if (*resource == '#' && (flags & LCK_CACHE)) { - log_error("Internal error: P_%s referenced", resource); + log_error(INTERNAL_ERROR "P_%s referenced", resource); return 0; } @@ -394,7 +394,7 @@ if (flags == LCK_NONE) { - log_debug("Internal error: %s: LCK_NONE lock requested", vol); + log_debug(INTERNAL_ERROR "%s: LCK_NONE lock requested", vol); return 1; } --- LVM2/lib/log/log.c 2009/12/01 13:54:27 1.54 +++ LVM2/lib/log/log.c 2009/12/16 19:22:12 1.55 @@ -184,8 +184,8 @@ level &= ~_LOG_STDERR; if (_abort_on_internal_errors && - !strncmp(format, "Internal error:", - strlen("Internal error:"))) + !strncmp(format, INTERNAL_ERROR, + strlen(INTERNAL_ERROR))) internal_error = 1; if (_log_suppress == 2) --- LVM2/lib/log/log.h 2009/07/16 13:13:33 1.46 +++ LVM2/lib/log/log.h 2009/12/16 19:22:12 1.47 @@ -53,6 +53,7 @@ #define _LOG_WARN 4 #define _LOG_ERR 3 #define _LOG_FATAL 2 +#define INTERNAL_ERROR "Internal error: " #define log_debug(x...) LOG_LINE(_LOG_DEBUG, x) #define log_info(x...) LOG_LINE(_LOG_INFO, x) --- LVM2/lib/metadata/metadata.c 2009/12/11 13:14:44 1.302 +++ LVM2/lib/metadata/metadata.c 2009/12/16 19:22:12 1.303 @@ -2107,7 +2107,7 @@ if (!id_write_format(&pvl->pv->id, uuid, sizeof(uuid))) stack; - log_error("Internal error: Duplicate PV id " + log_error(INTERNAL_ERROR "Duplicate PV id " "%s detected for %s in %s.", uuid, pv_dev_name(pvl->pv), vg->name); @@ -2116,14 +2116,14 @@ } if (strcmp(pvl->pv->vg_name, vg->name)) { - log_error("Internal error: VG name for PV %s is corrupted", + log_error(INTERNAL_ERROR "VG name for PV %s is corrupted", pv_dev_name(pvl->pv)); r = 0; } } if (!check_pv_segments(vg)) { - log_error("Internal error: PV segments corrupted in %s.", + log_error(INTERNAL_ERROR "PV segments corrupted in %s.", vg->name); r = 0; } @@ -2159,7 +2159,7 @@ */ if (((uint32_t) dm_list_size(&vg->lvs)) != vg_visible_lvs(vg) + snapshot_count(vg) + hidden_lv_count) { - log_error("Internal error: #internal LVs (%u) != #LVs (%" + log_error(INTERNAL_ERROR "#internal LVs (%u) != #LVs (%" PRIu32 ") + #snapshots (%" PRIu32 ") + #internal LVs %u in VG %s", dm_list_size(&vg->lvs), vg_visible_lvs(vg), snapshot_count(vg), hidden_lv_count, vg->name); @@ -2171,7 +2171,7 @@ if (lvl == lvl2) break; if (!strcmp(lvl->lv->name, lvl2->lv->name)) { - log_error("Internal error: Duplicate LV name " + log_error(INTERNAL_ERROR "Duplicate LV name " "%s detected in %s.", lvl->lv->name, vg->name); r = 0; @@ -2181,7 +2181,7 @@ if (!id_write_format(&lvl->lv->lvid.id[1], uuid, sizeof(uuid))) stack; - log_error("Internal error: Duplicate LV id " + log_error(INTERNAL_ERROR "Duplicate LV id " "%s detected for %s and %s in %s.", uuid, lvl->lv->name, lvl2->lv->name, vg->name); @@ -2192,7 +2192,7 @@ dm_list_iterate_items(lvl, &vg->lvs) { if (!check_lv_segments(lvl->lv, 1)) { - log_error("Internal error: LV segments corrupted in %s.", + log_error(INTERNAL_ERROR "LV segments corrupted in %s.", lvl->lv->name); r = 0; } @@ -2200,7 +2200,7 @@ if (!(vg->fid->fmt->features & FMT_UNLIMITED_VOLS) && (!vg->max_lv || !vg->max_pv)) { - log_error("Internal error: Volume group %s has limited PV/LV count" + log_error(INTERNAL_ERROR "Volume group %s has limited PV/LV count" " but limit is not set.", vg->name); r = 0; } @@ -2311,7 +2311,7 @@ int failed = 0; if (!vgname_is_locked(vg->name)) { - log_error("Internal error: Attempt to write new VG metadata " + log_error(INTERNAL_ERROR "Attempt to write new VG metadata " "without locking %s", vg->name); return cache_updated; } @@ -2491,7 +2491,7 @@ if (is_orphan_vg(vgname)) { if (use_precommitted) { - log_error("Internal error: vg_read_internal requires vgname " + log_error(INTERNAL_ERROR "vg_read_internal requires vgname " "with pre-commit."); return NULL; } @@ -2802,7 +2802,7 @@ return NULL; if (!check_pv_segments(vg)) { - log_error("Internal error: PV segments corrupted in %s.", + log_error(INTERNAL_ERROR "PV segments corrupted in %s.", vg->name); vg_release(vg); return NULL; @@ -2810,7 +2810,7 @@ dm_list_iterate_items(lvl, &vg->lvs) { if (!check_lv_segments(lvl->lv, 1)) { - log_error("Internal error: LV segments corrupted in %s.", + log_error(INTERNAL_ERROR "LV segments corrupted in %s.", lvl->lv->name); vg_release(vg); return NULL; @@ -2826,7 +2826,7 @@ return; if (vg->cmd && vg->vgmem == vg->cmd->mem) - log_error("Internal error: global memory pool used for VG %s", + log_error(INTERNAL_ERROR "global memory pool used for VG %s", vg->name); dm_pool_destroy(vg->vgmem); @@ -3520,6 +3520,7 @@ /* Found vgname so cannot reserve. */ unlock_vg(cmd, vgname); + log_error("A volume group called '%s' already exists.", vg_name); return FAILED_EXIST; } --- LVM2/lib/mm/memlock.c 2009/11/19 01:11:57 1.14 +++ LVM2/lib/mm/memlock.c 2009/12/16 19:22:12 1.15 @@ -144,7 +144,7 @@ void memlock_dec(void) { if (!_memlock_count) - log_error("Internal error: _memlock_count has dropped below 0."); + log_error(INTERNAL_ERROR "_memlock_count has dropped below 0."); --_memlock_count; _unlock_mem_if_possible(); log_debug("memlock_count dec to %d", _memlock_count); @@ -167,7 +167,7 @@ void memlock_dec_daemon(void) { if (!_memlock_count_daemon) - log_error("Internal error: _memlock_count_daemon has dropped below 0."); + log_error(INTERNAL_ERROR "_memlock_count_daemon has dropped below 0."); --_memlock_count_daemon; _unlock_mem_if_possible(); log_debug("memlock_count_daemon dec to %d", _memlock_count_daemon); --- LVM2/lib/striped/striped.c 2009/09/28 16:23:46 1.29 +++ LVM2/lib/striped/striped.c 2009/12/16 19:22:12 1.30 @@ -168,7 +168,7 @@ uint32_t *pvmove_mirror_count __attribute((unused))) { if (!seg->area_count) { - log_error("Internal error: striped add_target_line called " + log_error(INTERNAL_ERROR "striped add_target_line called " "with no areas for %s.", seg->lv->name); return 0; } --- LVM2/tools/lvm.c 2008/12/18 05:27:18 1.110 +++ LVM2/tools/lvm.c 2009/12/16 19:22:13 1.111 @@ -237,7 +237,7 @@ argv[0]); if ((ret != ECMD_PROCESSED) && !error_message_produced()) { - log_debug("Internal error: Failed command did not use log_error"); + log_debug(INTERNAL_ERROR "Failed command did not use log_error"); log_error("Command failed with status code %d.", ret); } _write_history(); --- LVM2/tools/lvmcmdline.c 2009/11/03 15:50:44 1.108 +++ LVM2/tools/lvmcmdline.c 2009/12/16 19:22:13 1.109 @@ -1243,7 +1243,7 @@ ret = lvm_run_command(cmd, argc, argv); if (ret != ECMD_PROCESSED) { if (!error_message_produced()) { - log_debug("Internal error: Failed command did not use log_error"); + log_debug(INTERNAL_ERROR "Failed command did not use log_error"); log_error("Command failed with status code %d.", ret); } break; @@ -1368,7 +1368,7 @@ log_error("No such command. Try 'help'."); if ((ret != ECMD_PROCESSED) && !error_message_produced()) { - log_debug("Internal error: Failed command did not use log_error"); + log_debug(INTERNAL_ERROR "Failed command did not use log_error"); log_error("Command failed with status code %d.", ret); } From mornfall@sourceware.org Wed Dec 16 19:26:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Wed, 16 Dec 2009 19:26:00 -0000 Subject: LVM2/lib/metadata metadata.c Message-ID: <20091216192621.24022.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-12-16 19:26:21 Modified files: lib/metadata : metadata.c Log message: Revert unintended change that slipped in with last checkin. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.303&r2=1.304 --- LVM2/lib/metadata/metadata.c 2009/12/16 19:22:12 1.303 +++ LVM2/lib/metadata/metadata.c 2009/12/16 19:26:20 1.304 @@ -3520,7 +3520,6 @@ /* Found vgname so cannot reserve. */ unlock_vg(cmd, vgname); - log_error("A volume group called '%s' already exists.", vg_name); return FAILED_EXIST; } From mornfall@sourceware.org Thu Dec 17 13:54:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Thu, 17 Dec 2009 13:54:00 -0000 Subject: LVM2/tools vgreduce.c Message-ID: <20091217135446.11173.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-12-17 13:54:46 Modified files: tools : vgreduce.c Log message: Also clean up MISSING devices in --removemissing --force in vgreduce. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgreduce.c.diff?cvsroot=lvm2&r1=1.98&r2=1.99 --- LVM2/tools/vgreduce.c 2009/09/14 22:47:50 1.98 +++ LVM2/tools/vgreduce.c 2009/12/17 13:54:46 1.99 @@ -224,7 +224,7 @@ */ dm_list_iterate_safe(pvh, pvht, &vg->pvs) { pvl = dm_list_item(pvh, struct pv_list); - if (pvl->pv->dev) + if (pvl->pv->dev && !(pvl->pv->status & MISSING_PV)) continue; if (!_remove_pv(vg, pvl, 0)) return_0; From mornfall@sourceware.org Thu Dec 17 15:38:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Thu, 17 Dec 2009 15:38:00 -0000 Subject: LVM2 lib/metadata/mirror.c test/t-lvconvert-re ... Message-ID: <20091217153831.25837.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-12-17 15:38:30 Modified files: lib/metadata : mirror.c test : t-lvconvert-repair.sh Log message: Fix removal of multiple devices from a mirror (+ regression test). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.99&r2=1.100 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-lvconvert-repair.sh.diff?cvsroot=lvm2&r1=1.2&r2=1.3 --- LVM2/lib/metadata/mirror.c 2009/12/09 19:53:39 1.99 +++ LVM2/lib/metadata/mirror.c 2009/12/17 15:38:29 1.100 @@ -533,6 +533,7 @@ _is_mirror_image_removable(sub_lv, removable_pvs)) { if (!shift_mirror_images(mirrored_seg, s)) return_0; + s--; /* adjust counter after shifting */ new_area_count--; } } @@ -783,7 +784,7 @@ DEFAULT_MIRROR_LOG_FAULT_POLICY); else policy = find_config_str(NULL, "activation/mirror_device_fault_policy", - DEFAULT_MIRROR_DEV_FAULT_POLICY); + DEFAULT_MIRROR_IMAGE_FAULT_POLICY); if (!strcmp(policy, "remove")) return MIRROR_REMOVE; --- LVM2/test/t-lvconvert-repair.sh 2009/06/04 12:01:16 1.2 +++ LVM2/test/t-lvconvert-repair.sh 2009/12/17 15:38:29 1.3 @@ -11,9 +11,36 @@ . ./test-utils.sh -prepare_vg 4 +prepare_vg 5 + +# fail multiple devices + +lvcreate -m 3 -L 1 -n 3way $vg +disable_dev $dev2 $dev4 +echo n | lvconvert -i 1 --repair $vg/3way +lvs -a -o +devices > lvlist +not grep unknown lvlist +vgreduce --removemissing $vg +enable_dev $dev2 $dev4 +lvchange -a n $vg/3way + +vgremove -ff $vg +vgcreate $vg $dev1 $dev2 $dev3 $dev4 + +lvcreate -m 2 -L 1 -n 4way $vg +disable_dev $dev1 $dev2 +echo n | lvconvert -i 1 --repair $vg/4way +lvs -a -o +devices > lvlist +not grep unknown lvlist +vgreduce --removemissing $vg +enable_dev $dev1 $dev2 +lvchange -a n $vg/4way + +# fail single devices + +vgremove -ff $vg +vgcreate $vg $dev1 $dev2 $dev3 -vgreduce $vg $dev4 lvcreate -m 1 -L 1 -n mirror $vg lvchange -a n $vg/mirror From mornfall@sourceware.org Thu Dec 17 15:59:00 2009 From: mornfall@sourceware.org (mornfall@sourceware.org) Date: Thu, 17 Dec 2009 15:59:00 -0000 Subject: LVM2/lib/metadata mirror.c Message-ID: <20091217155954.4044.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mornfall@sourceware.org 2009-12-17 15:59:54 Modified files: lib/metadata : mirror.c Log message: Revert another unintended change that snuck in. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.100&r2=1.101 --- LVM2/lib/metadata/mirror.c 2009/12/17 15:38:29 1.100 +++ LVM2/lib/metadata/mirror.c 2009/12/17 15:59:53 1.101 @@ -784,7 +784,7 @@ DEFAULT_MIRROR_LOG_FAULT_POLICY); else policy = find_config_str(NULL, "activation/mirror_device_fault_policy", - DEFAULT_MIRROR_IMAGE_FAULT_POLICY); + DEFAULT_MIRROR_DEV_FAULT_POLICY); if (!strcmp(policy, "remove")) return MIRROR_REMOVE; From mbroz@sourceware.org Fri Dec 18 12:44:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Fri, 18 Dec 2009 12:44:00 -0000 Subject: LVM2 ./WHATS_NEW lib/metadata/metadata.c Message-ID: <20091218124421.2378.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-18 12:44:20 Modified files: . : WHATS_NEW lib/metadata : metadata.c Log message: Remove missing flag if PV reappeared and is empty. When PV device reappears with old metadata, it is always updated to new version byt atutomatic metadata repair. Remove missing flag if device is empty. If device contains allocated extents, issue warning that user must remove volumes and re-add this PV before manipulating with this volume. This partially solves bug 547842 when one PV (log) is failed, dmeventd removes that device and later this device reappears and is wrongly added into VG marked missing. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1352&r2=1.1353 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.304&r2=1.305 --- LVM2/WHATS_NEW 2009/12/11 13:14:44 1.1352 +++ LVM2/WHATS_NEW 2009/12/18 12:44:20 1.1353 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Remove missing flag in metadata if PV reappeared and is empty. Destroy allocated mempool in _vg_read_orphans() error path. Fix unlocking vg in some pvresize and toollib error paths. Explicitly call suspend for temporary mirror layer. --- LVM2/lib/metadata/metadata.c 2009/12/16 19:26:20 1.304 +++ LVM2/lib/metadata/metadata.c 2009/12/18 12:44:20 1.305 @@ -2457,6 +2457,25 @@ return ret; } +static void check_reappeared_pv(struct volume_group *correct_vg, + struct physical_volume *pv) +{ + struct pv_list *pvl; + + dm_list_iterate_items(pvl, &correct_vg->pvs) + if (pv->dev == pvl->pv->dev && pvl->pv->status & MISSING_PV) { + log_warn("Missing device %s reappeared, updating " + "metadata for VG %s to version %u.", + pv_dev_name(pvl->pv), pv_vg_name(pvl->pv), + correct_vg->seqno); + if (pvl->pv->pe_alloc_count == 0) { + pv->status &= ~MISSING_PV; + pvl->pv->status &= ~MISSING_PV; + } else + log_warn("Device still marked missing because of alocated data " + "on it, remove volumes and consider vgreduce --removemissing."); + } +} /* Caller sets consistent to 1 if it's safe for vg_read_internal to correct * inconsistent metadata on disk (i.e. the VG write lock is held). * This guarantees only consistent metadata is returned. @@ -2737,6 +2756,13 @@ log_warn("WARNING: Inconsistent metadata found for VG %s - updating " "to use version %u", vgname, correct_vg->seqno); + /* + * If PV is marked missing but we found it, + * update metadata and remove MISSING flag + */ + dm_list_iterate_items(pvl, &all_pvs) + check_reappeared_pv(correct_vg, pvl->pv); + cmd->handles_missing_pvs = 1; if (!vg_write(correct_vg)) { log_error("Automatic metadata correction failed"); From mbroz@sourceware.org Fri Dec 18 12:45:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Fri, 18 Dec 2009 12:45:00 -0000 Subject: LVM2 ./WHATS_NEW lib/metadata/metadata.c Message-ID: <20091218124542.3474.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-18 12:45:41 Modified files: . : WHATS_NEW lib/metadata : metadata.c Log message: Drop metadata cache after device was autorepaired and removed from VG. All long running processes must reload metadata when some device becomes orphan after repair. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1353&r2=1.1354 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.305&r2=1.306 --- LVM2/WHATS_NEW 2009/12/18 12:44:20 1.1353 +++ LVM2/WHATS_NEW 2009/12/18 12:45:41 1.1354 @@ -1,5 +1,6 @@ Version 2.02.57 - ==================================== + Drop metadata cache after device was autorepaired and removed from VG. Remove missing flag in metadata if PV reappeared and is empty. Destroy allocated mempool in _vg_read_orphans() error path. Fix unlocking vg in some pvresize and toollib error paths. --- LVM2/lib/metadata/metadata.c 2009/12/18 12:44:20 1.305 +++ LVM2/lib/metadata/metadata.c 2009/12/18 12:45:41 1.306 @@ -2794,6 +2794,9 @@ vg_release(correct_vg); return_NULL; } + + /* Refresh metadata after orphan write */ + drop_cached_metadata(correct_vg); next_pv: ; } From mbroz@sourceware.org Mon Dec 28 18:33:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Mon, 28 Dec 2009 18:33:00 -0000 Subject: LVM2/test t-lvconvert-repair.sh t-lvcreate-ope ... Message-ID: <20091228183305.16103.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-28 18:33:04 Modified files: test : t-lvconvert-repair.sh t-lvcreate-operation.sh t-lvcreate-pvtags.sh t-metadata.sh t-pvmove-basic.sh t-read-ahead.sh t-vgcreate-usage.sh t-vgmerge-operation.sh t-vgmerge-usage.sh t-vgreduce-usage.sh t-vgsplit-operation.sh test-utils.sh Log message: Explicitly use non-clustered vgcreate in test. (So the tests can run under cluster locking and do not require cluster mirror or snapshots.) Add vgscan before block device readahead change (flush long running process - clvmd - dev cache.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-lvconvert-repair.sh.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-lvcreate-operation.sh.diff?cvsroot=lvm2&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-lvcreate-pvtags.sh.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-metadata.sh.diff?cvsroot=lvm2&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-pvmove-basic.sh.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-read-ahead.sh.diff?cvsroot=lvm2&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgcreate-usage.sh.diff?cvsroot=lvm2&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgmerge-operation.sh.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgmerge-usage.sh.diff?cvsroot=lvm2&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgreduce-usage.sh.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgsplit-operation.sh.diff?cvsroot=lvm2&r1=1.23&r2=1.24 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/test-utils.sh.diff?cvsroot=lvm2&r1=1.15&r2=1.16 --- LVM2/test/t-lvconvert-repair.sh 2009/12/17 15:38:29 1.3 +++ LVM2/test/t-lvconvert-repair.sh 2009/12/28 18:33:04 1.4 @@ -25,7 +25,7 @@ lvchange -a n $vg/3way vgremove -ff $vg -vgcreate $vg $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg $dev1 $dev2 $dev3 $dev4 lvcreate -m 2 -L 1 -n 4way $vg disable_dev $dev1 $dev2 @@ -39,7 +39,7 @@ # fail single devices vgremove -ff $vg -vgcreate $vg $dev1 $dev2 $dev3 +vgcreate -c n $vg $dev1 $dev2 $dev3 lvcreate -m 1 -L 1 -n mirror $vg --- LVM2/test/t-lvcreate-operation.sh 2008/11/11 15:29:24 1.1 +++ LVM2/test/t-lvcreate-operation.sh 2009/12/28 18:33:04 1.2 @@ -23,7 +23,7 @@ aux prepare_pvs 2 aux pvcreate --metadatacopies 0 $dev1 -aux vgcreate $vg $devs +aux vgcreate -c n $vg $devs #COMM create snapshots of LVs on --metadatacopies 0 PV (bz450651) lvcreate -n$lv1 -l4 $vg $dev1 --- LVM2/test/t-lvcreate-pvtags.sh 2008/11/10 12:43:35 1.5 +++ LVM2/test/t-lvcreate-pvtags.sh 2009/12/28 18:33:04 1.6 @@ -14,7 +14,7 @@ # not required, just testing aux pvcreate --metadatacopies 0 $dev1 -vgcreate $vg $devs +vgcreate -c n $vg $devs pvchange --addtag fast $devs # 3 stripes with 3 PVs (selected by tag, @fast) is fine --- LVM2/test/t-metadata.sh 2008/11/11 15:46:15 1.3 +++ LVM2/test/t-metadata.sh 2009/12/28 18:33:04 1.4 @@ -32,7 +32,7 @@ for mdacp in 1 0; do pvcreate --metadatacopies $mdacp $devs pvcreate $dev1 - vgcreate $vg $devs + vgcreate -c n $vg $devs lvcreate -n $lv1 -l 2 -i5 -I256 $vg lvcreate -n $lv2 -m2 -l 2 $vg #lvchange -an $vg @@ -51,5 +51,5 @@ pvcreate -M1 $dev1 pvcreate -M1 $dev2 pvcreate -M1 $dev3 -vgcreate -M1 $vg $dev1 $dev2 $dev3 +vgcreate -M1 -c n $vg $dev1 $dev2 $dev3 pvchange --uuid $dev1 --- LVM2/test/t-pvmove-basic.sh 2009/05/19 09:51:03 1.5 +++ LVM2/test/t-pvmove-basic.sh 2009/12/28 18:33:04 1.6 @@ -366,7 +366,7 @@ vgremove -ff $vg pvcreate $devs pvcreate --metadatacopies 0 $dev1 $dev2 -vgcreate $vg $devs +vgcreate -c n $vg $devs lvcreate -l4 -n $lv1 $vg $dev1 pvmove $dev1 --- LVM2/test/t-read-ahead.sh 2009/09/30 16:13:53 1.9 +++ LVM2/test/t-read-ahead.sh 2009/12/28 18:33:04 1.10 @@ -45,6 +45,7 @@ #COMM "read ahead is properly inherited from underlying PV" blockdev --setra 768 $dev1 +vgscan lvcreate -n $lv -L4m $vg $dev1 test $(blockdev --getra $G_dev_/$vg/$lv) -eq 768 lvremove -ff $vg --- LVM2/test/t-vgcreate-usage.sh 2009/10/31 16:43:07 1.13 +++ LVM2/test/t-vgcreate-usage.sh 2009/12/28 18:33:04 1.14 @@ -18,7 +18,7 @@ pvcreate --metadatacopies 0 $dev3 #COMM 'vgcreate accepts 8.00m physicalextentsize for VG' -vgcreate $vg --physicalextentsize 8.00m $dev1 $dev2 +vgcreate -c n $vg --physicalextentsize 8.00m $dev1 $dev2 check_vg_field_ $vg vg_extent_size 8.00m vgremove $vg # try vgck and to remove it again - should fail (but not segfault) @@ -26,31 +26,31 @@ not vgck $vg #COMM 'vgcreate accepts smaller (128) maxlogicalvolumes for VG' -vgcreate $vg --maxlogicalvolumes 128 $dev1 $dev2 +vgcreate -c n $vg --maxlogicalvolumes 128 $dev1 $dev2 check_vg_field_ $vg max_lv 128 vgremove $vg #COMM 'vgcreate accepts smaller (128) maxphysicalvolumes for VG' -vgcreate $vg --maxphysicalvolumes 128 $dev1 $dev2 +vgcreate -c n $vg --maxphysicalvolumes 128 $dev1 $dev2 check_vg_field_ $vg max_pv 128 vgremove $vg #COMM 'vgcreate rejects a zero physical extent size' -not vgcreate --physicalextentsize 0 $vg $dev1 $dev2 2>err +not vgcreate -c n --physicalextentsize 0 $vg $dev1 $dev2 2>err grep "^ Physical extent size may not be zero\$" err #COMM 'vgcreate rejects "inherit" allocation policy' -not vgcreate --alloc inherit $vg $dev1 $dev2 2>err +not vgcreate -c n --alloc inherit $vg $dev1 $dev2 2>err grep "^ Volume Group allocation policy cannot inherit from anything\$" err #COMM 'vgcreate rejects vgname "."' vginvalid=.; -not vgcreate $vginvalid $dev1 $dev2 2>err +not vgcreate -c n $vginvalid $dev1 $dev2 2>err grep "New volume group name \"$vginvalid\" is invalid\$" err #COMM 'vgcreate rejects vgname greater than 128 characters' vginvalid=thisnameisridiculouslylongtotestvalidationcodecheckingmaximumsizethisiswhathappenswhenprogrammersgetboredandorarenotcreativedonttrythisathome -not vgcreate $vginvalid $dev1 $dev2 2>err +not vgcreate -c n $vginvalid $dev1 $dev2 2>err grep "New volume group name \"$vginvalid\" is invalid\$" err #COMM 'vgcreate rejects already existing vgname "/tmp/$vg"' @@ -59,29 +59,29 @@ #grep "New volume group name \"$vg\" is invalid\$" err #COMM "vgcreate rejects repeated invocation (run 2 times) (bz178216)" -vgcreate $vg $dev1 $dev2 -not vgcreate $vg $dev1 $dev2 +vgcreate -c n $vg $dev1 $dev2 +not vgcreate -c n $vg $dev1 $dev2 vgremove -ff $vg #COMM 'vgcreate rejects MaxLogicalVolumes > 255' -not vgcreate --metadatatype 1 --maxlogicalvolumes 1024 $vg $dev1 $dev2 2>err +not vgcreate -c n --metadatatype 1 --maxlogicalvolumes 1024 $vg $dev1 $dev2 2>err grep "^ Number of volumes may not exceed 255\$" err #COMM "vgcreate fails when the only pv has --metadatacopies 0" -not vgcreate $vg $dev3 +not vgcreate -c n $vg $dev3 # Test default (4MB) vg_extent_size as well as limits of extent_size -not vgcreate --physicalextentsize 0k $vg $dev1 $dev2 -vgcreate --physicalextentsize 1k $vg $dev1 $dev2 +not vgcreate -c n --physicalextentsize 0k $vg $dev1 $dev2 +vgcreate -c n --physicalextentsize 1k $vg $dev1 $dev2 check_vg_field_ $vg vg_extent_size 1.00k vgremove -ff $vg -not vgcreate --physicalextentsize 3K $vg $dev1 $dev2 -not vgcreate --physicalextentsize 1024t $vg $dev1 $dev2 +not vgcreate -c n --physicalextentsize 3K $vg $dev1 $dev2 +not vgcreate -c n --physicalextentsize 1024t $vg $dev1 $dev2 #not vgcreate --physicalextentsize 1T $vg $dev1 $dev2 # FIXME: vgcreate allows physicalextentsize larger than pv size! # Test default max_lv, max_pv, extent_size, alloc_policy, clustered -vgcreate $vg $dev1 $dev2 +vgcreate -c n $vg $dev1 $dev2 check_vg_field_ $vg vg_extent_size 4.00m check_vg_field_ $vg max_lv 0 check_vg_field_ $vg max_pv 0 @@ -92,14 +92,14 @@ # --force, --yes, --metadata{size|copies|type}, --zero # --dataalignment[offset] pvremove $dev1 $dev2 -vgcreate --force --yes --zero y $vg $dev1 $dev2 +vgcreate -c n --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 + vgcreate -c n --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 @@ -108,14 +108,14 @@ # pvmetadatacopies for i in 1 2 do - vgcreate --pvmetadatacopies $i $vg $dev1 + vgcreate -c n --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 +not vgcreate -c n --metadatacopies 0 $vg $dev1 pvcreate --metadatacopies 1 $dev2 -vgcreate --pvmetadatacopies 0 $vg $dev1 $dev2 +vgcreate -c n --pvmetadatacopies 0 $vg $dev1 $dev2 check_pv_field_ $dev1 pv_mda_count 0 check_pv_field_ $dev2 pv_mda_count 1 vgremove -f $vg @@ -123,7 +123,7 @@ # metadatasize, dataalignment, dataalignmentoffset #COMM 'pvcreate sets data offset next to mda area' -vgcreate --metadatasize 100k --dataalignment 100k $vg $dev1 +vgcreate -c n --metadatasize 100k --dataalignment 100k $vg $dev1 check_pv_field_ $dev1 pe_start 200.00k vgremove -f $vg pvremove -f $dev1 @@ -131,7 +131,7 @@ # 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 +vgcreate -c n --metadatasize 128k --dataalignmentoffset 7s $vg $dev1 check_pv_field_ $dev1 pe_start $pv_align vgremove -f $vg pvremove -f $dev1 @@ -139,21 +139,21 @@ # metadatatype for i in 1 2 do - vgcreate -M $i $vg $dev1 + vgcreate -c n -M $i $vg $dev1 check_vg_field_ $vg vg_fmt lvm$i vgremove -f $vg pvremove -f $dev1 done # vgcreate fails if pv belongs to existing vg -vgcreate $vg1 $dev1 $dev2 +vgcreate -c n $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 +vgcreate -c n $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 --- LVM2/test/t-vgmerge-operation.sh 2008/11/10 12:41:52 1.5 +++ LVM2/test/t-vgmerge-operation.sh 2009/12/28 18:33:04 1.6 @@ -16,8 +16,8 @@ aux prepare_pvs 4 64 # 'vgmerge succeeds with single linear LV in source VG' -vgcreate $vg1 $dev1 $dev2 -vgcreate $vg2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 +vgcreate -c n $vg2 $dev3 $dev4 lvcreate -l 4 -n $lv1 $vg1 $dev1 vgchange -an $vg1 vg_validate_pvlv_counts_ $vg1 2 1 0 @@ -27,8 +27,8 @@ vgremove -f $vg2 # 'vgmerge succeeds with single linear LV in source and destination VG' -vgcreate $vg1 $dev1 $dev2 -vgcreate $vg2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 +vgcreate -c n $vg2 $dev3 $dev4 lvcreate -l 4 -n $lv1 $vg1 lvcreate -l 4 -n $lv2 $vg2 vgchange -an $vg1 @@ -40,8 +40,8 @@ vgremove -f $vg2 # 'vgmerge succeeds with linear LV + snapshots in source VG' -vgcreate $vg1 $dev1 $dev2 -vgcreate $vg2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 +vgcreate -c n $vg2 $dev3 $dev4 lvcreate -l 16 -n $lv1 $vg1 lvcreate -l 4 -s -n $lv2 $vg1/$lv1 vgchange -an $vg1 @@ -53,8 +53,8 @@ vgremove -f $vg2 # 'vgmerge succeeds with mirrored LV in source VG' -vgcreate $vg1 $dev1 $dev2 $dev3 -vgcreate $vg2 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 +vgcreate -c n $vg2 $dev4 lvcreate -l 4 -n $lv1 -m1 $vg1 vgchange -an $vg1 vg_validate_pvlv_counts_ $vg1 3 1 0 @@ -65,8 +65,8 @@ vgremove -f $vg2 # 'vgmerge rejects LV name collision' -vgcreate $vg1 $dev1 $dev2 -vgcreate $vg2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 +vgcreate -c n $vg2 $dev3 $dev4 lvcreate -l 4 -n $lv1 $vg1 lvcreate -l 4 -n $lv1 $vg2 vgchange -an $vg1 --- LVM2/test/t-vgmerge-usage.sh 2009/09/02 18:31:11 1.6 +++ LVM2/test/t-vgmerge-usage.sh 2009/12/28 18:33:04 1.7 @@ -17,34 +17,34 @@ # 'vgmerge normal operation' # ensure ordering does not matter -vgcreate $vg1 $dev1 $dev2 -vgcreate $vg2 $dev3 $dev4 +vgcreate $vg1 $dev1 $dev2 +vgcreate $vg2 $dev3 $dev4 vgmerge $vg1 $vg2 vgremove $vg1 -vgcreate $vg2 $dev1 $dev2 -vgcreate $vg1 $dev3 $dev4 +vgcreate -c n $vg2 $dev1 $dev2 +vgcreate -c n $vg1 $dev3 $dev4 vgmerge $vg2 $vg1 vgremove $vg2 # 'vgmerge rejects duplicate vg name' -vgcreate $vg1 $dev1 $dev2 -vgcreate $vg2 $dev3 $dev4 +vgcreate $vg1 $dev1 $dev2 +vgcreate $vg2 $dev3 $dev4 not vgmerge $vg1 $vg1 2>err grep "^ Duplicate volume group name \"$vg1\"\$" err vgremove $vg2 vgremove $vg1 # 'vgmerge rejects vgs with incompatible extent_size' -vgcreate --physicalextentsize 4M $vg1 $dev1 $dev2 -vgcreate --physicalextentsize 8M $vg2 $dev3 $dev4 +vgcreate --physicalextentsize 4M $vg1 $dev1 $dev2 +vgcreate --physicalextentsize 8M $vg2 $dev3 $dev4 not vgmerge $vg1 $vg2 2>err grep "^ Extent sizes differ" err vgremove $vg2 vgremove $vg1 # 'vgmerge rejects vgmerge because max_pv is exceeded' -vgcreate --maxphysicalvolumes 2 $vg1 $dev1 $dev2 -vgcreate --maxphysicalvolumes 2 $vg2 $dev3 $dev4 +vgcreate --maxphysicalvolumes 2 $vg1 $dev1 $dev2 +vgcreate --maxphysicalvolumes 2 $vg2 $dev3 $dev4 not vgmerge $vg1 $vg2 2>err grep "^ Maximum number of physical volumes (2) exceeded" err vgremove $vg2 @@ -71,4 +71,3 @@ grep "^ Maximum number of logical volumes (2) exceeded" err vgremove -f $vg2 vgremove -f $vg1 - --- LVM2/test/t-vgreduce-usage.sh 2008/11/10 12:43:35 1.5 +++ LVM2/test/t-vgreduce-usage.sh 2009/12/28 18:33:04 1.6 @@ -19,18 +19,18 @@ pvcreate -M$mdatype $dev1 $dev2 # (lvm$mdatype) vgreduce removes only the specified pv from vg (bz427382)" ' - vgcreate -M$mdatype $vg1 $dev1 $dev2 + vgcreate -c n -M$mdatype $vg1 $dev1 $dev2 vgreduce $vg1 $dev1 check_pv_field_ $dev2 vg_name $vg1 vgremove -f $vg1 # (lvm$mdatype) vgreduce rejects removing the last pv (--all) - vgcreate -M$mdatype $vg1 $dev1 $dev2 + vgcreate -c n -M$mdatype $vg1 $dev1 $dev2 not vgreduce --all $vg1 vgremove -f $vg1 # (lvm$mdatype) vgreduce rejects removing the last pv - vgcreate -M$mdatype $vg1 $dev1 $dev2 + vgcreate -c n -M$mdatype $vg1 $dev1 $dev2 not vgreduce $vg1 $dev1 $dev2 vgremove -f $vg1 @@ -44,13 +44,13 @@ pvcreate --metadatacopies 0 -M$mdatype $dev3 $dev4 # (lvm$mdatype) vgreduce rejects removing pv with the last mda copy (bz247448) -vgcreate -M$mdatype $vg1 $dev1 $dev3 +vgcreate -c n -M$mdatype $vg1 $dev1 $dev3 not vgreduce $vg1 $dev1 vgremove -f $vg1 #COMM "(lvm$mdatype) vgreduce --removemissing --force repares to linear (bz221921)" # (lvm$mdatype) setup: create mirror & damage one pv -vgcreate -M$mdatype $vg1 $dev1 $dev2 $dev3 +vgcreate -c n -M$mdatype $vg1 $dev1 $dev2 $dev3 lvcreate -n $lv1 -m1 -l 4 $vg1 lvcreate -n $lv2 -l 4 $vg1 $dev2 lvcreate -n $lv3 -l 4 $vg1 $dev3 @@ -66,7 +66,7 @@ #COMM "vgreduce rejects --removemissing --mirrorsonly --force when nonmirror lv lost too" # (lvm$mdatype) setup: create mirror + linear lvs -vgcreate -M$mdatype $vg1 $devs +vgcreate -c n -M$mdatype $vg1 $devs lvcreate -n $lv2 -l 4 $vg1 lvcreate -m1 -n $lv1 -l 4 $vg1 $dev1 $dev2 $dev3 lvcreate -n $lv3 -l 4 $vg1 $dev3 @@ -76,7 +76,7 @@ aux disable_dev $dev1 #pvcreate -ff -y $dev1 # vgreduce rejects --removemissing --mirrorsonly --force when nonmirror lv lost too -not vgreduce --removemissing --mirrorsonly --force $vg1 +not vgreduce -c n --removemissing --mirrorsonly --force $vg1 aux enable_dev $dev1 --- LVM2/test/t-vgsplit-operation.sh 2008/09/30 18:29:10 1.23 +++ LVM2/test/t-vgsplit-operation.sh 2009/12/28 18:33:04 1.24 @@ -75,9 +75,9 @@ vgremove -f $vg2 COMM "vgsplit correctly splits mirror LV into $i VG ($j args)" - vgcreate $vg1 $dev1 $dev2 $dev3 + vgcreate -c n $vg1 $dev1 $dev2 $dev3 if [ $i = existing ]; then - vgcreate $vg2 $dev4 + vgcreate -c n $vg2 $dev4 fi lvcreate -l 64 -m1 -n $lv1 $vg1 $dev1 $dev2 $dev3 vgchange -an $vg1 @@ -95,9 +95,9 @@ vgremove -f $vg2 COMM "vgsplit correctly splits origin and snapshot LV into $i VG ($j args)" - vgcreate $vg1 $dev1 $dev2 + vgcreate -c n $vg1 $dev1 $dev2 if [ $i = existing ]; then - vgcreate $vg2 $dev3 $dev4 + vgcreate -c n $vg2 $dev3 $dev4 fi lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2 lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1 @@ -117,9 +117,9 @@ vgremove -f $vg2 COMM "vgsplit correctly splits linear LV but not snap+origin LV into $i VG ($j args)" - vgcreate $vg1 $dev1 $dev2 + vgcreate -c n $vg1 $dev1 $dev2 if [ $i = existing ]; then - vgcreate $vg2 $dev3 + vgcreate -c n $vg2 $dev3 fi lvcreate -l 64 -i 2 -n $lv1 $vg1 lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1 @@ -145,9 +145,9 @@ vgremove -f $vg2 COMM "vgsplit correctly splits linear LV but not mirror LV into $i VG ($j args)" - vgcreate $vg1 $dev1 $dev2 $dev3 + vgcreate -c n $vg1 $dev1 $dev2 $dev3 if [ $i = existing ]; then - vgcreate $vg2 $dev5 + vgcreate -c n $vg2 $dev5 fi lvcreate -l 64 -m1 -n $lv1 $vg1 $dev1 $dev2 $dev3 vgextend $vg1 $dev4 @@ -193,7 +193,7 @@ vgremove -ff $vg1 COMM "vgsplit fails splitting one LV with 2 snapshots, only origin LV specified" -vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 $dev4 lvcreate -l 16 -n $lv1 $vg1 $dev1 $dev2 lvcreate -l 4 -n $lv2 -s $vg1/$lv1 lvcreate -l 4 -n $lv3 -s $vg1/$lv1 @@ -206,7 +206,7 @@ vgremove -ff $vg1 COMM "vgsplit fails splitting one LV with 2 snapshots, only snapshot LV specified" -vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 $dev4 lvcreate -l 16 -n $lv1 $vg1 $dev1 $dev2 lvcreate -l 4 -n $lv2 -s $vg1/$lv1 lvcreate -l 4 -n $lv3 -s $vg1/$lv1 @@ -219,7 +219,7 @@ vgremove -ff $vg1 COMM "vgsplit fails splitting one mirror LV, only one PV specified" -vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 $dev4 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 vg_validate_pvlv_counts_ $vg1 4 1 0 vgchange -an $vg1 @@ -227,7 +227,7 @@ vgremove -ff $vg1 COMM "vgsplit fails splitting 1 mirror + 1 striped LV, only striped LV specified" -vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 $dev4 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 lvcreate -l 16 -n $lv2 -i 2 $vg1 $dev3 $dev4 vg_validate_pvlv_counts_ $vg1 4 2 0 @@ -239,7 +239,7 @@ # Verify vgsplit rejects active LVs only when active LVs involved in split # COMM "vgsplit fails, active mirror involved in split" -vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 $dev4 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 lvcreate -l 16 -n $lv2 $vg1 $dev4 lvchange -an $vg1/$lv2 @@ -249,7 +249,7 @@ vgremove -ff $vg1 COMM "vgsplit succeeds, active mirror not involved in split" -vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 $dev4 lvcreate -l 16 -n $lv1 -m1 $vg1 $dev1 $dev2 $dev3 lvcreate -l 16 -n $lv2 $vg1 $dev4 lvchange -an $vg1/$lv2 @@ -261,7 +261,7 @@ vgremove -ff $vg2 COMM "vgsplit fails, active snapshot involved in split" -vgcreate $vg1 $dev1 $dev2 $dev3 $dev4 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 $dev4 lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2 lvcreate -l 4 -i 2 -s -n $lv2 $vg1/$lv1 lvcreate -l 64 -i 2 -n $lv3 $vg1 $dev3 $dev4 @@ -273,7 +273,7 @@ vgremove -ff $vg1 COMM "vgsplit succeeds, active snapshot not involved in split" -vgcreate $vg1 $dev1 $dev2 $dev3 +vgcreate -c n $vg1 $dev1 $dev2 $dev3 lvcreate -l 64 -i 2 -n $lv1 $vg1 $dev1 $dev2 lvcreate -l 4 -s -n $lv2 $vg1/$lv1 vgextend $vg1 $dev4 --- LVM2/test/test-utils.sh 2009/11/30 17:17:12 1.15 +++ LVM2/test/test-utils.sh 2009/12/28 18:33:04 1.16 @@ -174,7 +174,7 @@ prepare_vg() { prepare_pvs "$@" - vgcreate $vg $devs + vgcreate -c n $vg $devs } prepare_lvmconf() { From mbroz@sourceware.org Mon Dec 28 18:34:00 2009 From: mbroz@sourceware.org (mbroz@sourceware.org) Date: Mon, 28 Dec 2009 18:34:00 -0000 Subject: LVM2/tools vgcreate.c Message-ID: <20091228183446.17181.qmail@sourceware.org> CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2009-12-28 18:34:46 Modified files: tools : vgcreate.c Log message: Fix previous vgcreate commit to not call unpaired unlock. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.76&r2=1.77 --- LVM2/tools/vgcreate.c 2009/12/03 19:20:49 1.76 +++ LVM2/tools/vgcreate.c 2009/12/28 18:34:45 1.77 @@ -60,7 +60,8 @@ log_error("A volume group called %s already exists.", vp_new.vg_name); else log_error("Can't get lock for %s.", vp_new.vg_name); - goto bad; + vg_release(vg); + return ECMD_FAILED; } if (!vg_set_extent_size(vg, vp_new.extent_size) || @@ -68,7 +69,7 @@ !vg_set_max_pv(vg, vp_new.max_pv) || !vg_set_alloc_policy(vg, vp_new.alloc) || !vg_set_clustered(vg, vp_new.clustered)) - goto_bad; + goto bad_orphan; if (!lock_vol(cmd, VG_ORPHANS, LCK_VG_WRITE)) { log_error("Can't get lock for orphan PVs");