Accepting request 310530 from home:jeff_mahoney:branches:Base:System

- Update to 2.02.120
  - Fixed numerous bugs(see WHATS_NEW for full details)
  - Deleted dab3ebce-devices-Do-not-support-unpartitioned-DASD.patch (upstream)

OBS-URL: https://build.opensuse.org/request/show/310530
OBS-URL: https://build.opensuse.org/package/show/Base:System/lvm2?expand=0&rev=130
This commit is contained in:
LiuhuaMelody Wang 2015-06-08 01:48:46 +00:00 committed by Git OBS Bridge
parent c1e9200334
commit b4c433fdb0
12 changed files with 105 additions and 156 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:de9cb0acfb9c5a6afa6184160c9e066f19043677f91a72c741d153efcd2874a5
size 1524844

View File

@ -1,7 +0,0 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
iEYEABECAAYFAlR5ALcACgkQIoGRwVZ+LBfcYACfcsCo+Im/tR2gbHDpSA5Qg9Vo
iqIAoOjwTzT8Mcwgz7cpUdl7iLhoaola
=BmR+
-----END PGP SIGNATURE-----

3
LVM2.2.02.120.tgz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8d6bd02f7d00315482538ece3e831cd81709c29d74ce71229c60192fb166081a
size 1653183

7
LVM2.2.02.120.tgz.asc Normal file
View File

@ -0,0 +1,7 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (GNU/Linux)
iEYEABECAAYFAlVWcqQACgkQIoGRwVZ+LBeiKgCg6vIAWhC7AZcf01Qf505sty3A
HOwAoJGo8JYHscwGMo3FSIkLWHjbcRq0
=96gn
-----END PGP SIGNATURE-----

View File

@ -456,7 +456,7 @@ Subject: Parallelize dispatching
- if (!lv_is_pvmove(lv) && !lv_is_locked(lv) && - if (!lv_is_pvmove(lv) && !lv_is_locked(lv) &&
- lv_is_active(lv) && - lv_is_active(lv) &&
- !lv_is_active_exclusive_locally(lv) && /* lv_is_active_remotely */ - !lv_is_active_exclusive_locally(lv) && /* lv_is_active_remotely */
- !_cluster_mirror_is_available(lv)) { - !cluster_mirror_is_available(lv->vg->cmd)) {
- log_error("Shared cluster mirrors are not available."); - log_error("Shared cluster mirrors are not available.");
- return 0; - return 0;
- } - }

View File

@ -1,58 +0,0 @@
Index: LVM2.2.02.114/lib/device/dev-type.c
===================================================================
--- LVM2.2.02.114.orig/lib/device/dev-type.c
+++ LVM2.2.02.114/lib/device/dev-type.c
@@ -112,6 +112,10 @@ struct dev_types *create_dev_types(const
if (!strncmp("drbd", line + i, 4) && isspace(*(line + i + 4)))
dt->drbd_major = line_maj;
+ /* Look for DASD */
+ if (!strncmp("dasd", line + i, 4) && isspace(*(line + i + 4)))
+ dt->dasd_major = line_maj;
+
/* Look for EMC powerpath */
if (!strncmp("emcpower", line + i, 8) && isspace(*(line + i + 8)))
dt->emcpower_major = line_maj;
@@ -203,6 +207,9 @@ int dev_subsystem_part_major(struct dev_
if (MAJOR(dev->dev) == dt->emcpower_major)
return 1;
+ if (MAJOR(dev->dev) == dt->dasd_major)
+ return 1;
+
if (MAJOR(dev->dev) == dt->power2_major)
return 1;
@@ -222,6 +229,9 @@ const char *dev_subsystem_name(struct de
if (MAJOR(dev->dev) == dt->drbd_major)
return "DRBD";
+ if (MAJOR(dev->dev) == dt->dasd_major)
+ return "DASD";
+
if (MAJOR(dev->dev) == dt->emcpower_major)
return "EMCPOWER";
@@ -319,6 +329,10 @@ int dev_is_partitioned(struct dev_types
if (!_is_partitionable(dt, dev))
return 0;
+ /* Unpartitioned DASD devices are not supported. */
+ if (MAJOR(dev->dev) == dt->dasd_major)
+ return 1;
+
return _has_partition_table(dev);
}
Index: LVM2.2.02.114/lib/device/dev-type.h
===================================================================
--- LVM2.2.02.114.orig/lib/device/dev-type.h
+++ LVM2.2.02.114/lib/device/dev-type.h
@@ -44,6 +44,7 @@ struct dev_types {
int device_mapper_major;
int emcpower_major;
int power2_major;
+ int dasd_major;
struct dev_type_def dev_type_array[NUMBER_OF_MAJORS];
};

View File

@ -3,8 +3,8 @@ Index: LVM2.2.02.109/libdm/Makefile.in
--- LVM2.2.02.109.orig/libdm/Makefile.in --- LVM2.2.02.109.orig/libdm/Makefile.in
+++ LVM2.2.02.109/libdm/Makefile.in +++ LVM2.2.02.109/libdm/Makefile.in
@@ -39,9 +39,9 @@ INCLUDES += @VALGRIND_CFLAGS@ @@ -39,9 +39,9 @@ INCLUDES += @VALGRIND_CFLAGS@
endif
CFLAGS += $(UDEV_CFLAGS) INCLUDES = -I$(srcdir)/$(interface)
-ifeq ("@STATIC_LINK@", "yes") -ifeq ("@STATIC_LINK@", "yes")
+#ifeq ("@STATIC_LINK@", "yes") +#ifeq ("@STATIC_LINK@", "yes")

View File

@ -1,33 +1,34 @@
--- ---
lib/config/config_settings.h | 1 + lib/config/config_settings.h | 3 +++
lib/config/defaults.h | 1 + lib/config/defaults.h | 1 +
lib/display/display.c | 14 ++++++++++---- lib/display/display.c | 13 +++++++++----
lib/display/display.h | 1 + 3 files changed, 13 insertions(+), 4 deletions(-)
4 files changed, 13 insertions(+), 4 deletions(-)
--- a/lib/config/config_settings.h --- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h +++ b/lib/config/config_settings.h
@@ -187,6 +187,7 @@ cfg_array(global_cache_check_options_CFG @@ -905,6 +905,9 @@ cfg_array(global_cache_check_options_CFG
cfg(global_cache_dump_executable_CFG, "cache_dump_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, CACHE_DUMP_CMD, vsn(2, 2, 108), NULL) cfg_array(global_cache_repair_options_CFG, "cache_repair_options", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, "#S" DEFAULT_CACHE_REPAIR_OPTIONS, vsn(2, 2, 108), NULL, 0, NULL,
cfg(global_cache_repair_executable_CFG, "cache_repair_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, CACHE_REPAIR_CMD, vsn(2, 2, 108), NULL) "List of options passed to the cache_repair command.\n")
cfg_array(global_cache_repair_options_CFG, "cache_repair_options", global_CFG_SECTION, 0, CFG_TYPE_STRING, "#S" DEFAULT_CACHE_REPAIR_OPTIONS, vsn(2, 2, 108), NULL)
+cfg(global_display_dm_name_for_lv_name_CFG, "display_dm_name_for_lv_name", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_DISPLAY_DM_NAME_FOR_LV_NAME, vsn(2, 2, 98), NULL)
cfg(activation_checks_CFG, "checks", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION_CHECKS, vsn(2, 2, 86), NULL) +cfg(global_display_dm_name_for_lv_name_CFG, "display_dm_name_for_lv_name", global_CFG_SECTION, CFG_DEFAULT_COMMENTED, CFG_TYPE_BOOL, DEFAULT_DISPLAY_DM_NAME_FOR_LV_NAME, vsn(2, 2, 98), NULL, 0, NULL,
cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_SYNC, vsn(2, 2, 51), NULL) + "Display dm name for lv name.\n")
+
cfg(global_system_id_source_CFG, "system_id_source", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SYSTEM_ID_SOURCE, vsn(2, 2, 117), NULL, 0, NULL,
"The method LVM uses to set the local system ID.\n"
"Volume Groups can also be given a system ID (by\n"
--- a/lib/config/defaults.h --- a/lib/config/defaults.h
+++ b/lib/config/defaults.h +++ b/lib/config/defaults.h
@@ -31,6 +31,7 @@ @@ -33,6 +33,7 @@
#define DEFAULT_PROC_DIR "/proc"
#define DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV 1 #define DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV 1
#define DEFAULT_EXTERNAL_DEVICE_INFO_SOURCE "none"
#define DEFAULT_SYSFS_SCAN 1 #define DEFAULT_SYSFS_SCAN 1
+#define DEFAULT_DISPLAY_DM_NAME_FOR_LV_NAME 0 +#define DEFAULT_DISPLAY_DM_NAME_FOR_LV_NAME 0
#define DEFAULT_MD_COMPONENT_DETECTION 1 #define DEFAULT_MD_COMPONENT_DETECTION 1
#define DEFAULT_FW_RAID_COMPONENT_DETECTION 0
#define DEFAULT_MD_CHUNK_ALIGNMENT 1 #define DEFAULT_MD_CHUNK_ALIGNMENT 1
#define DEFAULT_IGNORE_LVM_MIRRORS 1
--- a/lib/display/display.c --- a/lib/display/display.c
+++ b/lib/display/display.c +++ b/lib/display/display.c
@@ -461,10 +461,15 @@ int lvdisplay_full(struct cmd_context *c @@ -462,10 +462,15 @@ int lvdisplay_full(struct cmd_context *c
lv->vg->cmd->dev_dir, lv->vg->name, lv->name); lv->vg->cmd->dev_dir, lv->vg->name, lv->name);
else if (lv_is_visible(lv)) { else if (lv_is_visible(lv)) {
/* Thin pool does not have /dev/vg/name link */ /* Thin pool does not have /dev/vg/name link */

View File

@ -18,7 +18,7 @@ Signed-off-by: Guangliang Zhao <gzhao@suse.com>
--- a/lib/metadata/lv_manip.c --- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c
@@ -2481,6 +2481,25 @@ static uint32_t _calc_required_extents(s @@ -2455,6 +2455,25 @@ static uint32_t _calc_required_extents(s
return required; return required;
} }
@ -37,14 +37,14 @@ Signed-off-by: Guangliang Zhao <gzhao@suse.com>
+ * the alloc_state and reserved areas every time. + * the alloc_state and reserved areas every time.
+ */ + */
+ if (required > alloc_state->areas[ix_pva - 1].used) + if (required > alloc_state->areas[ix_pva - 1].used)
+ _reserve_area(alloc_state, pva, required, ix_pva - 1, + _reserve_area(ah, alloc_state, pva, required, ix_pva - 1,
+ pva->unreserved); + pva->unreserved);
+} +}
+ +
static void _clear_areas(struct alloc_state *alloc_state) static void _clear_areas(struct alloc_state *alloc_state)
{ {
uint32_t s; uint32_t s;
@@ -2575,6 +2594,7 @@ static int _find_some_parallel_space(str @@ -2580,6 +2599,7 @@ static int _find_some_parallel_space(str
const struct alloc_parms *alloc_parms = alloc_state->alloc_parms; const struct alloc_parms *alloc_parms = alloc_state->alloc_parms;
unsigned ix = 0; unsigned ix = 0;
unsigned last_ix; unsigned last_ix;
@ -52,7 +52,7 @@ Signed-off-by: Guangliang Zhao <gzhao@suse.com>
struct pv_map *pvm; struct pv_map *pvm;
struct pv_area *pva; struct pv_area *pva;
unsigned preferred_count = 0; unsigned preferred_count = 0;
@@ -2695,9 +2715,17 @@ static int _find_some_parallel_space(str @@ -2700,9 +2720,17 @@ static int _find_some_parallel_space(str
continue; continue;
case USE_AREA: case USE_AREA:

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Tue May 19 16:30:47 UTC 2015 - jeffm@suse.com
- Update to 2.02.120
- Fixed numerous bugs(see WHATS_NEW for full details)
- Deleted dab3ebce-devices-Do-not-support-unpartitioned-DASD.patch (upstream)
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Apr 3 02:45:02 UTC 2015 - lzhong@suse.com Fri Apr 3 02:45:02 UTC 2015 - lzhong@suse.com

View File

@ -16,8 +16,8 @@
# #
%define lvm2_version 2.02.114 %define lvm2_version 2.02.120
%define device_mapper_version 1.02.92 %define device_mapper_version 1.02.97
%define thin_provisioning_version 0.4.1 %define thin_provisioning_version 0.4.1
Name: lvm2 Name: lvm2
@ -38,8 +38,6 @@ Source16: csm-converter.tar.gz
Source50: thin-provisioning-tools-v%{thin_provisioning_version}.tar.gz Source50: thin-provisioning-tools-v%{thin_provisioning_version}.tar.gz
# Upstream patches first # Upstream patches first
# bsc#894202
Patch1: dab3ebce-devices-Do-not-support-unpartitioned-DASD.patch
# SUSE patches 1000- for LVM, 2000- for device mapper # SUSE patches 1000- for LVM, 2000- for device mapper
Patch1001: improve_probing.diff Patch1001: improve_probing.diff
@ -124,7 +122,6 @@ Volume Manager.
%prep %prep
%setup -q -n LVM2.%{version} -a 50 -a 16 %setup -q -n LVM2.%{version} -a 50 -a 16
%patch1 -p1
%patch1001 -p1 %patch1001 -p1
%patch1002 -p1 %patch1002 -p1
%patch1003 -p1 %patch1003 -p1
@ -287,6 +284,7 @@ popd
%dir /usr/lib/tmpfiles.d %dir /usr/lib/tmpfiles.d
%ghost %{_sysconfdir}/lvm/cache/.cache %ghost %{_sysconfdir}/lvm/cache/.cache
%{_sysconfdir}/lvm/profile/*.profile %{_sysconfdir}/lvm/profile/*.profile
%{_sysconfdir}/lvm/lvmlocal.conf
%{_udevdir}/rules.d/11-dm-lvm.rules %{_udevdir}/rules.d/11-dm-lvm.rules
%{_udevdir}/rules.d/69-dm-lvm-metad.rules %{_udevdir}/rules.d/69-dm-lvm-metad.rules
%{_unitdir}/blk-availability.service %{_unitdir}/blk-availability.service

View File

@ -19,51 +19,53 @@ always be placed on pvs with differnt tags.
Signed-off-by: Guangliang Zhao <gzhao@suse.com> Signed-off-by: Guangliang Zhao <gzhao@suse.com>
--- ---
conf/example.conf.in | 17 +++++++++++++++++ conf/example.conf.in | 17 +++++++++++++++++
lib/config/config_settings.h | 1 + lib/config/config_settings.h | 3 +++
lib/config/defaults.h | 1 + lib/config/defaults.h | 1 +
lib/metadata/lv_manip.c | 36 ++++++++++++++++++++++++++++++++++++ lib/metadata/lv_manip.c | 35 +++++++++++++++++++++++++++++++++++
man/lvcreate.8.in | 4 ++++ man/lvcreate.8.in | 4 ++++
5 files changed, 59 insertions(+) 5 files changed, 60 insertions(+)
--- a/conf/example.conf.in --- a/conf/example.conf.in
+++ b/conf/example.conf.in +++ b/conf/example.conf.in
@@ -315,6 +315,23 @@ allocation { @@ -359,6 +359,23 @@ allocation {
# # option is used directly.
wipe_signatures_when_zeroing_new_lvs = 1 wipe_signatures_when_zeroing_new_lvs = 1
+ # Set to 1 to guarantee that mirror leg will always be placed on + # Set to 1 to guarantee that mirror leg will always be placed on
+ # different PVs(with different tags) from the other mirror legs. + # different PVs(with different tags) from the other mirror legs.
+ # + #
+ # If you want to enable this feature, the following conditions + # If you want to enable this feature, the following conditions
+ # must be met: + # must be met:
+ # 1) The mirror_legs_require_separate_pvs must be set to 1, the + # 1) The mirror_legs_require_separate_pvs must be set to 1, the
+ # default value is 0. + # default value is 0.
+ # 2) The cling_tag_list must be activated. + # 2) The cling_tag_list must be activated.
+ # 3) The length of all pvs with same tag must greater than or equal + # 3) The length of all pvs with same tag must greater than or equal
+ # to the mirror's. + # to the mirror's.
+ +
+ # This feature is only for the first allocation, on the other hand + # This feature is only for the first allocation, on the other hand
+ # when creating new mirrored lvs. + # when creating new mirrored lvs.
+ # Please note that the commond may fail if the number of all tags + # Please note that the commond may fail if the number of all tags
+ # on the pvs less than the mirror legs number. + # on the pvs less than the mirror legs number.
+ mirror_legs_require_separate_pvs = 0 + mirror_legs_require_separate_pvs = 0
+ +
# Set to 1 to guarantee that mirror logs will always be placed on # Configuration option allocation/mirror_logs_require_separate_pvs.
# different PVs from the mirror images. This was the default # Mirror logs and images will always use different PVs.
# until version 2.02.85. # The default setting changed in version 2.02.85.
--- a/lib/config/config_settings.h --- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h +++ b/lib/config/config_settings.h
@@ -119,6 +119,7 @@ cfg(allocation_maximise_cling_CFG, "maxi @@ -457,6 +457,9 @@ cfg(allocation_mirror_logs_require_separ
cfg(allocation_use_blkid_wiping_CFG, "use_blkid_wiping", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), NULL) "Mirror logs and images will always use different PVs.\n"
cfg(allocation_wipe_signatures_when_zeroing_new_lvs_CFG, "wipe_signatures_when_zeroing_new_lvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, 1, vsn(2, 2, 105), NULL) "The default setting changed in version 2.02.85.\n")
cfg(allocation_mirror_logs_require_separate_pvs_CFG, "mirror_logs_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 85), NULL)
+cfg(allocation_mirror_legs_require_separate_pvs_CFG, "mirror_legs_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MIRROR_LEGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 98), NULL) +cfg(allocation_mirror_legs_require_separate_pvs_CFG, "mirror_legs_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_MIRROR_LEGS_REQUIRE_SEPARATE_PVS, vsn(2, 2, 98), NULL, 0, NULL,
cfg(allocation_cache_pool_metadata_require_separate_pvs_CFG, "cache_pool_metadata_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_CACHE_POOL_METADATA_REQUIRE_SEPARATE_PVS, vsn(2, 2, 106), NULL) + "Mirror legs will always use different PVs.\n")
cfg(allocation_cache_pool_cachemode_CFG, "cache_pool_cachemode", allocation_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_CACHE_POOL_CACHEMODE, vsn(2, 2, 113), NULL) +
cfg_runtime(allocation_cache_pool_chunk_size_CFG, "cache_pool_chunk_size", allocation_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_INT, vsn(2, 2, 106), NULL) cfg(allocation_cache_pool_metadata_require_separate_pvs_CFG, "cache_pool_metadata_require_separate_pvs", allocation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_CACHE_POOL_METADATA_REQUIRE_SEPARATE_PVS, vsn(2, 2, 106), NULL, 0, NULL,
"Cache pool metadata and data will always use different PVs.\n")
--- a/lib/config/defaults.h --- a/lib/config/defaults.h
+++ b/lib/config/defaults.h +++ b/lib/config/defaults.h
@@ -125,6 +125,7 @@ @@ -132,6 +132,7 @@
#define DEFAULT_MAX_LV 0 #define DEFAULT_MAX_LV 0
#define DEFAULT_ALLOC_POLICY ALLOC_NORMAL #define DEFAULT_ALLOC_POLICY ALLOC_NORMAL
#define DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS 0 #define DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS 0
@ -73,7 +75,7 @@ Signed-off-by: Guangliang Zhao <gzhao@suse.com>
--- a/lib/metadata/lv_manip.c --- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c
@@ -1409,6 +1409,9 @@ struct alloc_handle { @@ -1447,6 +1447,9 @@ struct alloc_handle {
unsigned maximise_cling; unsigned maximise_cling;
unsigned mirror_logs_separate; /* Force mirror logs on separate PVs? */ unsigned mirror_logs_separate; /* Force mirror logs on separate PVs? */
@ -83,28 +85,10 @@ Signed-off-by: Guangliang Zhao <gzhao@suse.com>
/* /*
* RAID devices require a metadata area that accompanies each * RAID devices require a metadata area that accompanies each
@@ -1598,6 +1601,7 @@ static struct alloc_handle *_alloc_init( @@ -2542,6 +2545,32 @@ static int _limit_to_one_area_per_tag(st
ah->parity_count = parity_count;
ah->region_size = region_size;
ah->alloc = alloc;
+ ah->segtype = segtype;
/*
* For the purposes of allocation, area_count and parity_count are
@@ -1609,6 +1613,7 @@ static struct alloc_handle *_alloc_init(
ah->area_multiple = _calc_area_multiple(segtype, area_count + parity_count, stripes);
//FIXME: s/mirror_logs_separate/metadata_separate/ so it can be used by others?
ah->mirror_logs_separate = find_config_tree_bool(cmd, allocation_mirror_logs_require_separate_pvs_CFG, NULL);
+ ah->mirror_legs_separate = find_config_tree_bool(cmd, allocation_mirror_legs_require_separate_pvs_CFG, NULL);
if (mirrors || stripes)
total_extents = new_extents;
@@ -2533,6 +2538,33 @@ static void _report_needed_allocation_sp
(metadata_count == 1) ? "" : "s",
metadata_size);
} }
+
+/* /*
+ * Return -1 if we don't need check tags, or there aren't any areas in alloc_status + * Return -1 if we don't need check tags, or there aren't any areas in alloc_status
+ * have the same tag with pva, the index otherwise. + * have the same tag with pva, the index otherwise.
+ */ + */
@ -130,10 +114,11 @@ Signed-off-by: Guangliang Zhao <gzhao@suse.com>
+ return -1; + return -1;
+} +}
+ +
/* +/*
* Returns 1 regardless of whether any space was found, except on error. * Returns 1 regardless of whether any space was found, except on error.
*/ */
@@ -2663,6 +2695,10 @@ static int _find_some_parallel_space(str static int _find_some_parallel_space(struct alloc_handle *ah,
@@ -2671,6 +2700,10 @@ static int _find_some_parallel_space(str
continue; continue;
case USE_AREA: case USE_AREA:
@ -144,16 +129,32 @@ Signed-off-by: Guangliang Zhao <gzhao@suse.com>
/* /*
* Except with ALLOC_ANYWHERE, replace first area with this * Except with ALLOC_ANYWHERE, replace first area with this
* one which is smaller but still big enough. * one which is smaller but still big enough.
@@ -3151,6 +3184,7 @@ static struct alloc_handle *_alloc_init(
ah->parity_count = parity_count;
ah->region_size = region_size;
ah->alloc = alloc;
+ ah->segtype = segtype;
/*
* For the purposes of allocation, area_count and parity_count are
@@ -3162,6 +3196,7 @@ static struct alloc_handle *_alloc_init(
ah->area_multiple = _calc_area_multiple(segtype, area_count + parity_count, stripes);
//FIXME: s/mirror_logs_separate/metadata_separate/ so it can be used by others?
ah->mirror_logs_separate = find_config_tree_bool(cmd, allocation_mirror_logs_require_separate_pvs_CFG, NULL);
+ ah->mirror_legs_separate = find_config_tree_bool(cmd, allocation_mirror_legs_require_separate_pvs_CFG, NULL);
if (mirrors || stripes)
total_extents = new_extents;
--- a/man/lvcreate.8.in --- a/man/lvcreate.8.in
+++ b/man/lvcreate.8.in +++ b/man/lvcreate.8.in
@@ -284,6 +284,10 @@ will create a persistent log that is its @@ -333,6 +333,10 @@ Using \fIcore\fP means the mirror is reg
Using \fIcore\fP means the mirror is regenerated by copying the data
from the first device each time the logical volume is activated, from the first device each time the logical volume is activated,
like after every reboot. like after every reboot.
+.br .br
+Every leg of the mirrored logical volume could be placed on the pvs with +Every leg of the mirrored logical volume could be placed on the pvs with
+same tag, see details(mirror_legs_require_separate_pvs) in lvm.conf. +same tag, see details(mirror_legs_require_separate_pvs) in lvm.conf.
+ +
.br +.br
Using \fImirrored\fP will create a persistent log that is itself mirrored. Using \fImirrored\fP will create a persistent log that is itself mirrored.
.TP .TP
.BR \-\-monitor " {" \fIy | \fIn }