mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
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.
This commit is contained in:
parent
50800e33d5
commit
c33770c02d
@ -159,7 +159,6 @@ struct cmd_context {
|
|||||||
unsigned lockd_gl_removed:1;
|
unsigned lockd_gl_removed:1;
|
||||||
unsigned lockd_vg_default_sh:1;
|
unsigned lockd_vg_default_sh:1;
|
||||||
unsigned lockd_vg_enforce_sh:1;
|
unsigned lockd_vg_enforce_sh:1;
|
||||||
unsigned lockd_lv_sh:1;
|
|
||||||
unsigned lockd_lv_sh_for_ex:1;
|
unsigned lockd_lv_sh_for_ex:1;
|
||||||
unsigned vg_notify:1;
|
unsigned vg_notify:1;
|
||||||
unsigned lv_notify:1;
|
unsigned lv_notify:1;
|
||||||
|
@ -2160,15 +2160,6 @@ int lockd_lv_name(struct cmd_context *cmd, struct volume_group *vg,
|
|||||||
return 0;
|
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)
|
if (!mode)
|
||||||
mode = "ex";
|
mode = "ex";
|
||||||
|
|
||||||
@ -2301,31 +2292,6 @@ static int _lockd_lv_thin(struct cmd_context *cmd, struct logical_volume *lv,
|
|||||||
pool_lv->lock_args, def_mode, flags);
|
pool_lv->lock_args, def_mode, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* 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.
|
* 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
|
* The LV itself may have no lock (NULL lv->lock_args), but the lock request
|
||||||
@ -2379,14 +2345,12 @@ int lockd_lv(struct cmd_context *cmd, struct logical_volume *lv,
|
|||||||
*/
|
*/
|
||||||
if (lv_is_external_origin(lv) ||
|
if (lv_is_external_origin(lv) ||
|
||||||
lv_is_thin_type(lv) ||
|
lv_is_thin_type(lv) ||
|
||||||
|
lv_is_mirror_type(lv) ||
|
||||||
lv_is_raid_type(lv) ||
|
lv_is_raid_type(lv) ||
|
||||||
lv_is_cache_type(lv)) {
|
lv_is_cache_type(lv)) {
|
||||||
flags |= LDLV_MODE_NO_SH;
|
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],
|
return lockd_lv_name(cmd, lv->vg, lv->name, &lv->lvid.id[1],
|
||||||
lv->lock_args, def_mode, flags);
|
lv->lock_args, def_mode, flags);
|
||||||
}
|
}
|
||||||
|
@ -2056,18 +2056,6 @@ int lv_add_mirrors(struct cmd_context *cmd, struct logical_volume *lv,
|
|||||||
return 0;
|
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
|
/* For corelog mirror, activation code depends on
|
||||||
* the global mirror_in_sync status. As we are adding
|
* the global mirror_in_sync status. As we are adding
|
||||||
* a new mirror, it should be set as 'out-of-sync'
|
* a new mirror, it should be set as 'out-of-sync'
|
||||||
|
@ -278,15 +278,6 @@ static int _add_log(struct dm_pool *mem, struct lv_segment *seg,
|
|||||||
char *log_dlid = NULL;
|
char *log_dlid = NULL;
|
||||||
uint32_t log_flags = 0;
|
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 (seg->log_lv) {
|
||||||
/* If disk log, use its UUID */
|
/* If disk log, use its UUID */
|
||||||
if (!(log_dlid = build_dm_uuid(mem, seg->log_lv, NULL))) {
|
if (!(log_dlid = build_dm_uuid(mem, seg->log_lv, NULL))) {
|
||||||
|
@ -545,7 +545,7 @@ report an error and fail.
|
|||||||
The shared mode is intended for a multi-host/cluster application or
|
The shared mode is intended for a multi-host/cluster application or
|
||||||
file system.
|
file system.
|
||||||
LV types that cannot be used concurrently
|
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
|
.IP \fBn\fP
|
||||||
The command deactivates the LV. After deactivating the LV, the command
|
The command deactivates the LV. After deactivating the LV, the command
|
||||||
|
Loading…
x
Reference in New Issue
Block a user