Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=c33770c02d9d6b9deddbc…
Commit: c33770c02d9d6b9deddbc1b3c52c77c1a17ea246
Parent: 50800e33d56176e034970f93c5f87f59ecd569db
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Fri Mar 22 12:07:31 2019 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Apr 4 13:21:38 2019 -0500
lvmlockd: do not allow mirror LV to be activated shared
This reverts 518a8e8cfbb672c2bf5e3455f1fe7cd8d94eb5b0
"lvmlockd: activate mirror LVs in shared mode with cmirrord"
because while activating a mirror LV with cmirrord worked,
changes to the active cmirror did not work.
---
lib/commands/toolcontext.h | 1 -
lib/locking/lvmlockd.c | 38 +-------------------------------------
lib/metadata/mirror.c | 12 ------------
lib/mirror/mirrored.c | 9 ---------
man/lvmlockd.8_main | 2 +-
5 files changed, 2 insertions(+), 60 deletions(-)
diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h
index 2ce243e..fea0e51 100644
--- a/lib/commands/toolcontext.h
+++ b/lib/commands/toolcontext.h
@@ -159,7 +159,6 @@ struct cmd_context {
unsigned lockd_gl_removed:1;
unsigned lockd_vg_default_sh:1;
unsigned lockd_vg_enforce_sh:1;
- unsigned lockd_lv_sh:1;
unsigned lockd_lv_sh_for_ex:1;
unsigned vg_notify:1;
unsigned lv_notify:1;
diff --git a/lib/locking/lvmlockd.c b/lib/locking/lvmlockd.c
index 60e0617..1e3553d 100644
--- a/lib/locking/lvmlockd.c
+++ b/lib/locking/lvmlockd.c
@@ -2160,15 +2160,6 @@ int lockd_lv_name(struct cmd_context *cmd, struct volume_group *vg,
return 0;
}
- /*
- * This is a hack for mirror LVs which need to know at a very low level
- * which lock mode the LV is being activated with so that it can pick
- * a mirror log type during activation. Do not use this for anything
- * else.
- */
- if (mode && !strcmp(mode, "sh"))
- cmd->lockd_lv_sh = 1;
-
if (!mode)
mode = "ex";
@@ -2302,31 +2293,6 @@ static int _lockd_lv_thin(struct cmd_context *cmd, struct logical_volume *lv,
}
/*
- * Only the combination of dlm + corosync + cmirrord allows
- * mirror LVs to be activated in shared mode on multiple nodes.
- */
-static int _lockd_lv_mirror(struct cmd_context *cmd, struct logical_volume *lv,
- const char *def_mode, uint32_t flags)
-{
- if (!strcmp(lv->vg->lock_type, "sanlock"))
- flags |= LDLV_MODE_NO_SH;
-
- else if (!strcmp(lv->vg->lock_type, "dlm") && def_mode && !strcmp(def_mode, "sh")) {
-#ifdef CMIRRORD_PIDFILE
- if (!cmirrord_is_running()) {
- log_error("cmirrord must be running to activate an LV in shared mode.");
- return 0;
- }
-#else
- flags |= LDLV_MODE_NO_SH;
-#endif
- }
-
- return lockd_lv_name(cmd, lv->vg, lv->name, &lv->lvid.id[1],
- lv->lock_args, def_mode, flags);
-}
-
-/*
* If the VG has no lock_type, then this function can return immediately.
* The LV itself may have no lock (NULL lv->lock_args), but the lock request
* may be directed to another lock, e.g. the pool LV lock in _lockd_lv_thin.
@@ -2379,14 +2345,12 @@ int lockd_lv(struct cmd_context *cmd, struct logical_volume *lv,
*/
if (lv_is_external_origin(lv) ||
lv_is_thin_type(lv) ||
+ lv_is_mirror_type(lv) ||
lv_is_raid_type(lv) ||
lv_is_cache_type(lv)) {
flags |= LDLV_MODE_NO_SH;
}
- if (lv_is_mirror_type(lv))
- return _lockd_lv_mirror(cmd, lv, def_mode, flags);
-
return lockd_lv_name(cmd, lv->vg, lv->name, &lv->lvid.id[1],
lv->lock_args, def_mode, flags);
}
diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c
index 6950546..8459457 100644
--- a/lib/metadata/mirror.c
+++ b/lib/metadata/mirror.c
@@ -2056,18 +2056,6 @@ int lv_add_mirrors(struct cmd_context *cmd, struct logical_volume *lv,
return 0;
}
- if (lv->vg->lock_type && !strcmp(lv->vg->lock_type, "dlm") && cmd->lockd_lv_sh) {
- if (!cluster_mirror_is_available(cmd)) {
- log_error("Shared cluster mirrors are not available.");
- return 0;
- }
-
- if (log_count > 1) {
- log_error("Log type, \"mirrored\", is unavailable to cluster mirrors.");
- return 0;
- }
- }
-
/* For corelog mirror, activation code depends on
* the global mirror_in_sync status. As we are adding
* a new mirror, it should be set as 'out-of-sync'
diff --git a/lib/mirror/mirrored.c b/lib/mirror/mirrored.c
index 7fa8714..aaaa0b8 100644
--- a/lib/mirror/mirrored.c
+++ b/lib/mirror/mirrored.c
@@ -278,15 +278,6 @@ static int _add_log(struct dm_pool *mem, struct lv_segment *seg,
char *log_dlid = NULL;
uint32_t log_flags = 0;
- if (seg->lv->vg->lock_type && !strcmp(seg->lv->vg->lock_type, "dlm")) {
- /*
- * If shared lock was used due to -asy, then we set clustered
- * to use a clustered mirror log with cmirrod.
- */
- if (seg->lv->vg->cmd->lockd_lv_sh)
- clustered = 1;
- }
-
if (seg->log_lv) {
/* If disk log, use its UUID */
if (!(log_dlid = build_dm_uuid(mem, seg->log_lv, NULL))) {
diff --git a/man/lvmlockd.8_main b/man/lvmlockd.8_main
index 50b3473..0feab80 100644
--- a/man/lvmlockd.8_main
+++ b/man/lvmlockd.8_main
@@ -545,7 +545,7 @@ report an error and fail.
The shared mode is intended for a multi-host/cluster application or
file system.
LV types that cannot be used concurrently
-from multiple hosts include thin, cache, raid, and snapshot.
+from multiple hosts include thin, cache, raid, mirror, and snapshot.
.IP \fBn\fP
The command deactivates the LV. After deactivating the LV, the command
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=e27d0271557d4b93e87a7…
Commit: e27d0271557d4b93e87a70854b3c7f1cc6008155
Parent: 7c3de2fd935aee428af8d75e774f5dd23a74c409
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Apr 3 13:01:06 2019 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Apr 3 13:28:22 2019 +0200
thin: resize metadata with data
When data are growing, adapt also size of metadata.
As we get way too many reports from users doing huge growths of
data portion while keep metadata small and avoiding using monitoring.
So to enhance the user-experience in case user requests grown of
thin-pool (without passing PV list for growth) - lvm2 will automaticaly
grown also the metadata part of thin-pool (if possible).
---
WHATS_NEW | 1 +
lib/metadata/lv_manip.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 0f1fe1b..00c96b5 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.03.02 -
===================================
+ Automatically grow thin metadata, when thin data gets too big.
Add synchronization with udev before removing cached devices.
Add support for caching VDO LVs and VDOPOOL LVs.
Add support for vgsplit with cached devices.
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index cc391b6..a13ba31 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -5664,6 +5664,24 @@ int lv_resize(struct logical_volume *lv,
if (!_lvresize_prepare(&lv, lp, pvh))
return_0;
+ if (lp->resize != LV_REDUCE && !aux_lv && !lp->poolmetadata_size &&
+ &lv->vg->pvs == pvh && lv_is_thin_pool_data(lv)) {
+ /* When thin-pool data part is extended, automatically extend also metadata part
+ * to have the metadata chunks for adressing all data blocks
+ * Do this only when PV list is not defined and --poolmetadatasize is unspecified */
+ aux_lp = *lp;
+ seg = get_only_segment_using_this_lv(lv);
+ aux_lp.size = estimate_thin_pool_metadata_size(lp->extents, lv->vg->extent_size, seg->chunk_size);
+ if (aux_lp.size > seg->metadata_lv->size) {
+ log_verbose("Also going to resize thin-pool metadata to match bigger data.");
+ aux_lv = _lvresize_setup_aux(seg->metadata_lv, &aux_lp);
+ aux_lp.sign = SIGN_NONE;
+ if (!_lvresize_prepare(&aux_lv, &aux_lp, pvh))
+ return_0;
+ } else
+ aux_lp.size = 0;
+ }
+
if (((lp->resize == LV_REDUCE) ||
(aux_lv && aux_lp.resize == LV_REDUCE)) &&
(pvh != &vg->pvs))