diff --git a/LVM2.2.02.173.tgz b/LVM2.2.02.173.tgz deleted file mode 100644 index d591af5..0000000 --- a/LVM2.2.02.173.tgz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ceb9168c7e009ef487f96a1fe969b23cbb07d920ffb71769affdbdf30fea8d64 -size 2363504 diff --git a/LVM2.2.02.173.tgz.asc b/LVM2.2.02.173.tgz.asc deleted file mode 100644 index 880470d..0000000 --- a/LVM2.2.02.173.tgz.asc +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.14 (GNU/Linux) - -iEYEABECAAYFAllw138ACgkQIoGRwVZ+LBcXbwCeI1gt2DZhVSuyEN784ynSzaHb -VoYAoOOY7HFlESPCTBoFKks4zY/9Ou5D -=Na9K ------END PGP SIGNATURE----- diff --git a/LVM2.2.02.175.tgz b/LVM2.2.02.175.tgz new file mode 100644 index 0000000..a1f377f --- /dev/null +++ b/LVM2.2.02.175.tgz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4db7a3ec6d082be212f759279b54bcdfd3c3797a5ea67605746049b004632559 +size 2373834 diff --git a/LVM2.2.02.175.tgz.asc b/LVM2.2.02.175.tgz.asc new file mode 100644 index 0000000..cd9f8bb --- /dev/null +++ b/LVM2.2.02.175.tgz.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.14 (GNU/Linux) + +iEYEABECAAYFAlnX9XgACgkQIoGRwVZ+LBeZnQCg7JNQyFkEkfNptzLGNCVLlA2S +77oAoPAYBrpUR+ID/KAH6+MkNU9bmTK4 +=0AnW +-----END PGP SIGNATURE----- diff --git a/simplify-special-case-for-md-in-69-dm-lvm-metadata.patch b/bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch similarity index 100% rename from simplify-special-case-for-md-in-69-dm-lvm-metadata.patch rename to bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch diff --git a/dmeventd-fix-dso-name-wrong-compare.patch b/bug-935623_dmeventd-fix-dso-name-wrong-compare.patch similarity index 100% rename from dmeventd-fix-dso-name-wrong-compare.patch rename to bug-935623_dmeventd-fix-dso-name-wrong-compare.patch diff --git a/lvm2-testsuite.patch b/bug-950089_test-fix-lvm2-testsuite-build-error.patch similarity index 67% rename from lvm2-testsuite.patch rename to bug-950089_test-fix-lvm2-testsuite-build-error.patch index 2bc7ff5..9614869 100644 --- a/lvm2-testsuite.patch +++ b/bug-950089_test-fix-lvm2-testsuite-build-error.patch @@ -2,13 +2,24 @@ commit 0402acbbb9f8f6066a3f7899e8cc3ae72b84ee20 Author: Zhilong Liu Date: Wed Dec 7 02:43:10 2016 -0500 - add a new test package named lvm2-testsuite(bnc#950089) - + lvm2-testsuite.patch - Currently this new package is not enabled by default. - Please set enable_testsuite to 1 to turn it on in the - spec file. - - Signed-off-by: Zhilong Liu +add a new test package named lvm2-testsuite(bnc#950089) + + lvm2-testsuite.patch +Currently this new package is not enabled by default. +Please set enable_testsuite to 1 to turn it on in the + spec file. + +Eric: + +This patch is to solve the following obs building error: + +""" +E: arch-dependent-file-in-usr-share (Badness: 590) /usr/share/lvm2-testsuite/api/lvtest.t +... +""" + +So, move the *.t binary into /usr/lib/lvm2-testsuite/. + +Signed-off-by: Zhilong Liu diff --git a/test/Makefile.in b/test/Makefile.in index f152868..f0845d7 100644 diff --git a/lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch b/bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch similarity index 100% rename from lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch rename to bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch diff --git a/cluster_support_mirrord_log.diff b/cluster_support_mirrord_log.diff deleted file mode 100644 index f5b2593..0000000 --- a/cluster_support_mirrord_log.diff +++ /dev/null @@ -1,528 +0,0 @@ -Subject: Parallelize dispatching ---- - daemons/cmirrord/Makefile.in | 2 - daemons/cmirrord/cluster.c | 110 +++++++++++++++++++++++++++---------------- - daemons/cmirrord/functions.c | 37 ++++++++++++-- - daemons/cmirrord/local.c | 3 - - lib/metadata/mirror.c | 24 --------- - lib/mirror/mirrored.c | 5 + - tools/lvconvert.c | 9 --- - 7 files changed, 109 insertions(+), 81 deletions(-) - -Index: LVM2.2.02.168/daemons/cmirrord/Makefile.in -=================================================================== ---- LVM2.2.02.168.orig/daemons/cmirrord/Makefile.in -+++ LVM2.2.02.168/daemons/cmirrord/Makefile.in -@@ -26,7 +26,7 @@ TARGETS = cmirrord - - include $(top_builddir)/make.tmpl - --LIBS += -ldevmapper -+LIBS += -ldevmapper -lpthread - LMLIBS += $(CPG_LIBS) $(SACKPT_LIBS) - CFLAGS += $(CPG_CFLAGS) $(SACKPT_CFLAGS) $(EXTRA_EXEC_CFLAGS) - LDFLAGS += $(EXTRA_EXEC_LDFLAGS) -Index: LVM2.2.02.168/daemons/cmirrord/cluster.c -=================================================================== ---- LVM2.2.02.168.orig/daemons/cmirrord/cluster.c -+++ LVM2.2.02.168/daemons/cmirrord/cluster.c -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - #if CMIRROR_HAS_CHECKPOINT - #include - #include -@@ -152,9 +153,11 @@ struct clog_cpg { - struct checkpoint_data *checkpoint_list; - int idx; - char debugging[DEBUGGING_HISTORY][DEBUGGING_BUFLEN]; -+ pthread_t thread_pid; - }; - - static struct dm_list clog_cpg_list; -+static pthread_rwlock_t clog_cpg_lock = PTHREAD_RWLOCK_INITIALIZER; - - /* - * cluster_send -@@ -169,12 +172,14 @@ int cluster_send(struct clog_request *rq - struct iovec iov; - struct clog_cpg *entry; - -+ pthread_rwlock_rdlock(&clog_cpg_lock); - dm_list_iterate_items(entry, &clog_cpg_list) - if (!strncmp(entry->name.value, rq->u_rq.uuid, - CPG_MAX_NAME_LENGTH)) { - found = 1; - break; - } -+ pthread_rwlock_unlock(&clog_cpg_lock); - - if (!found) { - rq->u_rq.error = -ENOENT; -@@ -255,11 +260,11 @@ static struct clog_request *get_matching - return NULL; - } - --static char rq_buffer[DM_ULOG_REQUEST_SIZE]; - static int handle_cluster_request(struct clog_cpg *entry __attribute__((unused)), - struct clog_request *rq, int server) - { - int r = 0; -+ char rq_buffer[DM_ULOG_REQUEST_SIZE]; - struct clog_request *tmp = (struct clog_request *)rq_buffer; - - /* -@@ -370,9 +375,13 @@ static struct clog_cpg *find_clog_cpg(cp - { - struct clog_cpg *match; - -+ pthread_rwlock_rdlock(&clog_cpg_lock); - dm_list_iterate_items(match, &clog_cpg_list) -- if (match->handle == handle) -+ if (match->handle == handle) { -+ pthread_rwlock_unlock(&clog_cpg_lock); - return match; -+ } -+ pthread_rwlock_unlock(&clog_cpg_lock); - - return NULL; - } -@@ -982,34 +991,21 @@ static int resend_requests(struct clog_c - return r; - } - --static int do_cluster_work(void *data __attribute__((unused))) -+static void cluster_thread_fn(void *data) - { - int r = CS_OK; -- struct clog_cpg *entry, *tmp; -- -- dm_list_iterate_items_safe(entry, tmp, &clog_cpg_list) { -- r = cpg_dispatch(entry->handle, CS_DISPATCH_ALL); -- if (r != CS_OK) { -- if ((r == CS_ERR_BAD_HANDLE) && -- ((entry->state == INVALID) || -- (entry->state == LEAVING))) -- /* It's ok if we've left the cluster */ -- r = CS_OK; -- else -- LOG_ERROR("cpg_dispatch failed: %s", -- str_ais_error(r)); -- } -- -- if (entry->free_me) { -- free(entry); -- continue; -- } -- do_checkpoints(entry, 0); -- -- resend_requests(entry); -+ struct clog_cpg *match = data; -+ r = cpg_dispatch(match->handle, CS_DISPATCH_BLOCKING); -+ if (r != CS_OK) { -+ if ((r == CS_ERR_BAD_HANDLE) && -+ ((match->state == INVALID) || -+ (match->state == LEAVING))) -+ /* It's ok if we've left the cluster */ -+ r = CS_OK; -+ else -+ LOG_ERROR("cpg_dispatch failed: %s", -+ str_ais_error(r)); - } -- -- return (r == CS_OK) ? 0 : -1; /* FIXME: good error number? */ - } - - static int flush_startup_list(struct clog_cpg *entry) -@@ -1062,23 +1058,37 @@ static int flush_startup_list(struct clo - return 0; - } - -+static void do_cpg_message_callback(struct clog_cpg *match, uint32_t nodeid, -+ void *msg, size_t msg_len); -+ - static void cpg_message_callback(cpg_handle_t handle, const struct cpg_name *gname __attribute__((unused)), - uint32_t nodeid, uint32_t pid __attribute__((unused)), - void *msg, size_t msg_len) - { -+ struct clog_cpg *entry; -+ -+ entry = find_clog_cpg(handle); -+ if (!entry) { -+ LOG_ERROR("Unable to find clog_cpg for cluster message"); -+ return; -+ } -+ do_cpg_message_callback(entry, nodeid, msg, msg_len); -+ -+ do_checkpoints(entry, 0); -+ resend_requests(entry); -+ -+} -+ -+static void do_cpg_message_callback(struct clog_cpg *match, uint32_t nodeid, -+ void *msg, size_t msg_len) -+{ - int i; - int r = 0; - int i_am_server; - int response = 0; - struct clog_request *rq = msg; - struct clog_request *tmp_rq, *tmp_rq2; -- struct clog_cpg *match; - -- match = find_clog_cpg(handle); -- if (!match) { -- LOG_ERROR("Unable to find clog_cpg for cluster message"); -- return; -- } - - /* - * Perform necessary endian and version compatibility conversions -@@ -1384,7 +1394,7 @@ static void cpg_leave_callback(struct cl - size_t member_list_entries) - { - unsigned i; -- int j, fd; -+ int j; - uint32_t lowest = match->lowest_id; - struct clog_request *rq, *n; - struct checkpoint_data *p_cp, *c_cp; -@@ -1395,10 +1405,9 @@ static void cpg_leave_callback(struct cl - /* Am I leaving? */ - if (my_cluster_id == left->nodeid) { - LOG_DBG("Finalizing leave..."); -+ pthread_rwlock_wrlock(&clog_cpg_lock); - dm_list_del(&match->list); -- -- cpg_fd_get(match->handle, &fd); -- links_unregister(fd); -+ pthread_rwlock_unlock(&clog_cpg_lock); - - cluster_postsuspend(match->name.value, match->luid); - -@@ -1526,11 +1535,13 @@ static void cpg_config_callback(cpg_hand - struct clog_cpg *match; - int found = 0; - -+ pthread_rwlock_rdlock(&clog_cpg_lock); - dm_list_iterate_items(match, &clog_cpg_list) - if (match->handle == handle) { - found = 1; - break; - } -+ pthread_rwlock_unlock(&clog_cpg_lock); - - if (!found) { - LOG_ERROR("Unable to find match for CPG config callback"); -@@ -1547,6 +1558,16 @@ static void cpg_config_callback(cpg_hand - else - cpg_leave_callback(match, left_list, - member_list, member_list_entries); -+ -+ -+ if (match->free_me) { -+ LOG_DBG("closing thread %x", (unsigned int)match->thread_pid); -+ free(match); -+ return; -+ } -+ -+ do_checkpoints(match, 0); -+ resend_requests(match); - } - - cpg_callbacks_t cpg_callbacks = { -@@ -1614,12 +1635,16 @@ int create_cluster_cpg(char *uuid, uint6 - size_t size; - struct clog_cpg *new = NULL; - struct clog_cpg *tmp; -+ pthread_t new_pid; - -+ pthread_rwlock_rdlock(&clog_cpg_lock); - dm_list_iterate_items(tmp, &clog_cpg_list) - if (!strncmp(tmp->name.value, uuid, CPG_MAX_NAME_LENGTH)) { - LOG_ERROR("Log entry already exists: %s", uuid); -+ pthread_rwlock_unlock(&clog_cpg_lock); - return -EEXIST; - } -+ pthread_rwlock_unlock(&clog_cpg_lock); - - new = malloc(sizeof(*new)); - if (!new) { -@@ -1661,13 +1686,16 @@ int create_cluster_cpg(char *uuid, uint6 - } - - new->cpg_state = VALID; -+ pthread_rwlock_wrlock(&clog_cpg_lock); - dm_list_add(&clog_cpg_list, &new->list); -+ pthread_rwlock_unlock(&clog_cpg_lock); -+ - LOG_DBG("New handle: %llu", (unsigned long long)new->handle); - LOG_DBG("New name: %s", new->name.value); - -- /* FIXME: better variable */ -- cpg_fd_get(new->handle, &r); -- links_register(r, "cluster", do_cluster_work, NULL); -+ pthread_create(&new_pid, NULL, (void *)cluster_thread_fn, (void*)new); -+ new->thread_pid = new_pid; -+ pthread_detach(new_pid); - - return 0; - } -@@ -1736,9 +1764,11 @@ int destroy_cluster_cpg(char *uuid) - { - struct clog_cpg *del, *tmp; - -+ pthread_rwlock_rdlock(&clog_cpg_lock); - dm_list_iterate_items_safe(del, tmp, &clog_cpg_list) - if (!strncmp(del->name.value, uuid, CPG_MAX_NAME_LENGTH)) - _destroy_cluster_cpg(del); -+ pthread_rwlock_unlock(&clog_cpg_lock); - - return 0; - } -Index: LVM2.2.02.168/daemons/cmirrord/functions.c -=================================================================== ---- LVM2.2.02.168.orig/daemons/cmirrord/functions.c -+++ LVM2.2.02.168/daemons/cmirrord/functions.c -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - - #define BYTE_SHIFT 3 - -@@ -107,6 +108,9 @@ struct recovery_request { - static DM_LIST_INIT(log_list); - static DM_LIST_INIT(log_pending_list); - -+static pthread_rwlock_t log_list_lock = PTHREAD_RWLOCK_INITIALIZER; -+static pthread_rwlock_t log_pending_lock = PTHREAD_RWLOCK_INITIALIZER; -+ - static int log_test_bit(dm_bitset_t bs, int bit) - { - return dm_bit(bs, bit) ? 1 : 0; -@@ -153,11 +157,15 @@ static struct log_c *get_log(const char - { - struct log_c *lc; - -+ pthread_rwlock_rdlock(&log_list_lock); - dm_list_iterate_items(lc, &log_list) - if (!strcmp(lc->uuid, uuid) && -- (!luid || (luid == lc->luid))) -+ (!luid || (luid == lc->luid))) { -+ pthread_rwlock_unlock(&log_list_lock); - return lc; -+ } - -+ pthread_rwlock_unlock(&log_list_lock); - return NULL; - } - -@@ -173,10 +181,14 @@ static struct log_c *get_pending_log(con - { - struct log_c *lc; - -+ pthread_rwlock_rdlock(&log_pending_lock); - dm_list_iterate_items(lc, &log_pending_list) - if (!strcmp(lc->uuid, uuid) && -- (!luid || (luid == lc->luid))) -+ (!luid || (luid == lc->luid))) { -+ pthread_rwlock_unlock(&log_pending_lock); - return lc; -+ } -+ pthread_rwlock_unlock(&log_pending_lock); - - return NULL; - } -@@ -521,7 +533,9 @@ static int _clog_ctr(char *uuid, uint64_ - LOG_DBG("Disk log ready"); - } - -+ pthread_rwlock_wrlock(&log_pending_lock); - dm_list_add(&log_pending_list, &lc->list); -+ pthread_rwlock_unlock(&log_pending_lock); - - return 0; - fail: -@@ -651,7 +665,10 @@ static int clog_dtr(struct dm_ulog_reque - - LOG_DBG("[%s] Cluster log removed", SHORT_UUID(lc->uuid)); - -+ pthread_rwlock_wrlock(&log_list_lock); - dm_list_del(&lc->list); -+ pthread_rwlock_unlock(&log_list_lock); -+ - if (lc->disk_fd != -1 && close(lc->disk_fd)) - LOG_ERROR("Failed to close disk log: %s", - strerror(errno)); -@@ -723,8 +740,13 @@ int cluster_postsuspend(char *uuid, uint - lc->resume_override = 0; - - /* move log to pending list */ -+ pthread_rwlock_wrlock(&log_list_lock); - dm_list_del(&lc->list); -+ pthread_rwlock_unlock(&log_list_lock); -+ -+ pthread_rwlock_wrlock(&log_pending_lock); - dm_list_add(&log_pending_list, &lc->list); -+ pthread_rwlock_unlock(&log_pending_lock); - - return 0; - } -@@ -828,9 +850,9 @@ no_disk: - if (commit_log && (lc->disk_fd >= 0)) { - rq->error = write_log(lc); - if (rq->error) -- LOG_ERROR("Failed initial disk log write"); -+ LOG_ERROR("[%s] Failed initial disk log write", SHORT_UUID(lc->uuid)); - else -- LOG_DBG("Disk log initialized"); -+ LOG_DBG("[%s] Disk log initialized", SHORT_UUID(lc->uuid)); - lc->touched = 0; - } - out: -@@ -912,8 +934,13 @@ int local_resume(struct dm_ulog_request - } - - /* move log to official list */ -+ pthread_rwlock_wrlock(&log_pending_lock); - dm_list_del(&lc->list); -+ pthread_rwlock_unlock(&log_pending_lock); -+ -+ pthread_rwlock_wrlock(&log_list_lock); - dm_list_add(&log_list, &lc->list); -+ pthread_rwlock_unlock(&log_list_lock); - } - - return 0; -@@ -1936,7 +1963,6 @@ void log_debug(void) - - LOG_ERROR(""); - LOG_ERROR("LOG COMPONENT DEBUGGING::"); -- LOG_ERROR("Official log list:"); - LOG_ERROR("Pending log list:"); - dm_list_iterate_items(lc, &log_pending_list) { - LOG_ERROR("%s", lc->uuid); -@@ -1946,6 +1972,7 @@ void log_debug(void) - print_bits(lc->clean_bits, 1); - } - -+ LOG_ERROR("Official log list:"); - dm_list_iterate_items(lc, &log_list) { - LOG_ERROR("%s", lc->uuid); - LOG_ERROR(" recoverer : %" PRIu32, lc->recoverer); -Index: LVM2.2.02.168/daemons/cmirrord/local.c -=================================================================== ---- LVM2.2.02.168.orig/daemons/cmirrord/local.c -+++ LVM2.2.02.168/daemons/cmirrord/local.c -@@ -29,13 +29,13 @@ - - static int cn_fd = -1; /* Connector (netlink) socket fd */ - static char recv_buf[2048]; --static char send_buf[2048]; - - - /* FIXME: merge this function with kernel_send_helper */ - static int kernel_ack(uint32_t seq, int error) - { - int r; -+ char send_buf[2048]; - struct nlmsghdr *nlh = (struct nlmsghdr *)send_buf; - struct cn_msg *msg = NLMSG_DATA(nlh); - -@@ -179,6 +179,7 @@ static int kernel_send_helper(void *data - int r; - struct nlmsghdr *nlh; - struct cn_msg *msg; -+ char send_buf[2048]; - - memset(send_buf, 0, sizeof(send_buf)); - -Index: LVM2.2.02.168/lib/metadata/mirror.c -=================================================================== ---- LVM2.2.02.168.orig/lib/metadata/mirror.c -+++ LVM2.2.02.168/lib/metadata/mirror.c -@@ -1925,11 +1925,6 @@ int add_mirror_log(struct cmd_context *c - unsigned old_log_count; - int r = 0; - -- if (vg_is_clustered(lv->vg) && (log_count > 1)) { -- log_error("Log type, \"mirrored\", is unavailable to cluster mirrors."); -- return 0; -- } -- - if (dm_list_size(&lv->segments) != 1) { - log_error("Multiple-segment mirror is not supported."); - return 0; -@@ -2090,27 +2085,6 @@ int lv_add_mirrors(struct cmd_context *c - return 0; - } - -- if (vg_is_clustered(lv->vg)) { -- /* FIXME: move this test out of this function */ -- /* Skip test for pvmove mirrors, it can use local mirror */ -- if (!lv_is_pvmove(lv) && !lv_is_locked(lv) && -- lv_is_active(lv) && -- !lv_is_active_exclusive_locally(lv) && /* lv_is_active_remotely */ -- !cluster_mirror_is_available(lv->vg->cmd)) { -- log_error("Shared cluster mirrors are not available."); -- return 0; -- } -- -- /* -- * No mirrored logs for cluster mirrors until -- * log daemon is multi-threaded. -- */ -- 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' -Index: LVM2.2.02.168/lib/mirror/mirrored.c -=================================================================== ---- LVM2.2.02.168.orig/lib/mirror/mirrored.c -+++ LVM2.2.02.168/lib/mirror/mirrored.c -@@ -293,12 +293,15 @@ static int _add_log(struct dm_pool *mem, - return 0; - } - } else { -- /* If core log, use mirror's UUID and set DM_CORELOG flag */ -+ /* If core log, use mirror's (UUID + CORE) and set DM_CORELOG flag */ - if (!(log_dlid = build_dm_uuid(mem, seg->lv, NULL))) { - log_error("Failed to build uuid for mirror LV %s.", - seg->lv->name); - return 0; - } -+ if (clustered) -+ memcpy(&log_dlid[strlen(log_dlid) - 4], "CORE", 4); -+ - log_flags |= DM_CORELOG; - } - -Index: LVM2.2.02.168/tools/lvconvert.c -=================================================================== ---- LVM2.2.02.168.orig/tools/lvconvert.c -+++ LVM2.2.02.168/tools/lvconvert.c -@@ -1375,15 +1375,6 @@ static int _lvconvert_mirrors_parse_para - - *new_log_count = arg_int_value(cmd, mirrorlog_ARG, lp->corelog ? MIRROR_LOG_CORE : DEFAULT_MIRRORLOG); - -- /* -- * No mirrored logs for cluster mirrors until -- * log daemon is multi-threaded. -- */ -- if ((*new_log_count == MIRROR_LOG_MIRRORED) && vg_is_clustered(lv->vg)) { -- log_error("Log type, \"mirrored\", is unavailable to cluster mirrors."); -- return 0; -- } -- - log_verbose("Setting logging type to %s.", get_mirror_log_name(*new_log_count)); - - /* diff --git a/clvmd.ocf b/clvmd.ocf deleted file mode 100644 index 8c406f9..0000000 --- a/clvmd.ocf +++ /dev/null @@ -1,353 +0,0 @@ -#!/bin/bash -# Copyright (c) 2008 Xinwei Hu All Rights Reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of version 2 of the GNU General Public License as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Further, this software is distributed without any warranty that it is -# free of the rightful claim of any third person regarding infringement -# or the like. Any license provided herein, whether implied or -# otherwise, applies only to this software file. Patent licenses, if -# any, provided herein do not apply to combinations of this program with -# other software, or any other product whatsoever. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. -# -####################################################################### - -# OCF initialization -. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs - -# Parameter defaults -: ${OCF_RESKEY_CRM_meta_globally_unique:="false"} -: ${OCF_RESKEY_daemon_timeout:="80"} -: ${OCF_RESKEY_daemon_options:="-d0"} - -sbindir=$HA_SBIN_DIR - -# Common variables -DAEMON="${sbindir}/clvmd" -CMIRRORD="${sbindir}/cmirrord" -LVMCONF="${sbindir}/lvmconf" - -time_to_seconds() { - local val - val=$1 - case $val in - *h) echo $(( $(echo $val | sed -e "s/h$//") * 3600 ));; - *ms) echo $(( $(echo $val | sed -e "s/ms$//") / 1000 ));; - *s) echo $val | sed -e "s/s$//";; - *m) echo $(( $(echo $val | sed -e "s/m$//") * 60 ));; - *) echo "$val";; - esac -} - -OCF_RESKEY_daemon_timeout=$(time_to_seconds ${OCF_RESKEY_daemon_timeout}) - -status_daemons() -{ - PID=`pidofproc "$DAEMON"` - NPID=`pidofproc "$CMIRRORD"` - if [ -n "$PID" -a -n "$NPID" ]; then - return $OCF_SUCCESS - fi - return $OCF_NOT_RUNNING -} - -status_clvmd() -{ - PID=`pidofproc "$DAEMON"` - if [ -n "$PID" ]; then - return $OCF_SUCCESS - fi - return $OCF_NOT_RUNNING -} - -status_cmirrord() -{ - PID=`pidofproc "$CMIRRORD"` - if [ -n "$PID" ]; then - return $OCF_SUCCESS - fi - return $OCF_NOT_RUNNING -} - -bringup_clvmd() -{ - if [ ! -e "$DAEMON" ]; then - ocf_log err "Required binary not found: $DAEMON" - return $OCF_ERR_INSTALLED - fi - - start_daemon "$DAEMON" "$OCF_RESKEY_daemon_options"; rc=$? - if [ $rc != 0 ]; then - ocf_log err "Could not start $DAEMON" - return $OCF_ERR_GENERIC - fi - - sleep 1 - COUNT=0 - rc=$OCF_NOT_RUNNING - - while [ $rc = $OCF_NOT_RUNNING ]; do - COUNT=`expr $COUNT + 1` - if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then - ocf_log err "`basename $DAEMON` did not come up" - return $OCF_ERR_GENERIC - fi - status_clvmd; rc=$? - sleep 1 - done - - return $rc -} - -bringup_cmirrord() -{ - if [ ! -e "$CMIRRORD" ]; then - ocf_log err "Required binary not found: $DAEMON" - return $OCF_ERR_INSTALLED - fi - - start_daemon "$CMIRRORD"; rc=$? - if [ $rc != 0 ]; then - ocf_log err "Could not start $CMIRRORD" - return $OCF_ERR_GENERIC - fi - - sleep 1 - COUNT=0 - rc=$OCF_NOT_RUNNING - - while [ $rc = $OCF_NOT_RUNNING ]; do - COUNT=`expr $COUNT + 1` - if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then - ocf_log err "`basename $DAEMON` did not come up" - return $OCF_ERR_GENERIC - fi - status_cmirrord; rc=$? - sleep 1 - done - - return $rc -} - - -kill_clvmd() -{ - status_clvmd; rc=$? - if [ $rc != $OCF_SUCCESS ]; then - return $rc - fi - - ocf_log info "Stopping `basename "$DAEMON"`" - killproc -INT "$DAEMON" - - sleep 1 - status_daemons; rc=$? - - COUNT=0 - while [ $rc = $OCF_SUCCESS ]; do - COUNT=`expr $COUNT + 1` - if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then - ocf_log err "`basename $DAEMON` shutdown emergency" - killproc -9 "$DAEMON" - status_clvmd; rc=$? - if [ $rc = $OCF_NOT_RUNNING ]; then - return $OCF_SUCCESS - else - return $OCF_ERR_GENERIC - fi - fi - killproc -INT "$DAEMON" - sleep 1 - status_clvmd; rc=$? - done - - return $OCF_SUCCESS -} - -kill_cmirrord() -{ - status_cmirrord; rc=$? - if [ $rc != $OCF_SUCCESS ]; then - return $rc - fi - - ocf_log info "Stopping `basename "$CMIRRORD"`" - killproc -INT "$CMIRRORD" - - sleep 1 - status_cmirrord; rc=$? - - COUNT=0 - while [ $rc = $OCF_SUCCESS ]; do - COUNT=`expr $COUNT + 1` - if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then - ocf_log err "`basename $CMIRRORD` shutdown emergency" - killproc -9 "$CMIRRORD" - status_cmirrord; rc=$? - if [ $rc = $OCF_NOT_RUNNING ]; then - return $OCF_SUCCESS - else - return $OCF_ERR_GENERIC - fi - fi - killproc -INT "$CMIRRORD" - sleep 1 - status_cmirrord; rc=$? - done - - return $OCF_SUCCESS -} - - -clvmd_start() -{ - clvmd_validate - ocf_log info "Starting $OCF_RESOURCE_INSTANCE" - - # autoset locking type to clusted when lvmconf tool is available - if [ -x "$LVMCONF" ]; then - $LVMCONF --enable-cluster > /dev/null 2>&1 - fi - - status_clvmd; rc=$? - if [ $rc == $OCF_NOT_RUNNING ]; then - bringup_clvmd; rc=$? - if [ $rc != $OCF_SUCCESS ]; then - return $OCF_ERR_GENERIC - fi - fi - - status_cmirrord; rc=$? - if [ $rc == $OCF_NOT_RUNNING ]; then - bringup_cmirrord; rc=$? - if [ $rc != $OCF_SUCCESS ]; then - kill_clvmd - return $OCF_ERR_GENERIC - fi - fi - - return $OCF_SUCCESS -} - -clvmd_stop() { - clvmd_validate - ocf_log info "Stopping $OCF_RESOURCE_INSTANCE" - - status_clvmd; rc=$? - if [ $rc != $OCF_NOT_RUNNING ]; then - kill_clvmd; krc=$? - if [ $krc != $OCF_SUCCESS ]; then - ocf_log err "Failed to stop clvmd" - return $OCF_ERR_GENERIC - fi - fi - - status_cmirrord; rc=$? - if [ $rc != $OCF_NOT_RUNNING ]; then - kill_cmirrord; krc=$? - if [ $krc != $OCF_SUCCESS ]; then - ocf_log err "Failed to stop cmirrord" - return $OCF_ERR_GENERIC - fi - fi - - return $OCF_SUCCESS -} - -clvmd_monitor() { - clvmd_validate - - status_daemons - return $? -} - -clvmd_usage() { - echo "usage: $0 {start|stop|monitor|validate-all|meta-data}" - echo " Expects to have a fully populated OCF RA-compliant environment set." - echo " In particualr, a value for OCF_ROOT" -} - -clvmd_validate() { - : TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED - case ${OCF_RESKEY_CRM_meta_globally_unique} in - yes|Yes|true|True|1) - ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute" - exit $OCF_ERR_CONFIGURED - ;; - esac - - return $OCF_SUCCESS -} - -meta_data() { - cat < - - - 1.0 - -This is a Resource Agent for both clvmd and cmirrord. -It starts clvmd and cmirrord as anonymous clones. - - clvmd resource agent - - - - -Number of seconds to allow the control daemon to come up and down - - Daemon Timeout - - - - - -Options to clvmd. Refer to clvmd.8 for detailed descriptions. - - Daemon Options - - - - - - - - - - - - -END -} - -case $__OCF_ACTION in -meta-data) meta_data - exit $OCF_SUCCESS - ;; -start) clvmd_start - ;; -stop) clvmd_stop - ;; -monitor) clvmd_monitor - ;; -validate-all) clvmd_validate - ;; -usage|help) clvmd_usage - exit $OCF_SUCCESS - ;; -*) clvmd_usage - exit $OCF_ERR_UNIMPLEMENTED - ;; -esac - -exit $? diff --git a/cmirrord.ocf b/cmirrord.ocf deleted file mode 100644 index 64554d4..0000000 --- a/cmirrord.ocf +++ /dev/null @@ -1,235 +0,0 @@ -#!/bin/bash -# Copyright (c) 2008 Xinwei Hu All Rights Reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of version 2 of the GNU General Public License as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Further, this software is distributed without any warranty that it is -# free of the rightful claim of any third person regarding infringement -# or the like. Any license provided herein, whether implied or -# otherwise, applies only to this software file. Patent licenses, if -# any, provided herein do not apply to combinations of this program with -# other software, or any other product whatsoever. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. -# -####################################################################### - -# OCF initialization -. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs - -# Parameter defaults -: ${OCF_RESKEY_CRM_meta_globally_unique:="false"} -: ${OCF_RESKEY_daemon_timeout:="80"} - -sbindir=$HA_SBIN_DIR - -# Common variables -DAEMON="${sbindir}/cmirrord" - -time_to_seconds() { - local val - val=$1 - case $val in - *h) echo $(( $(echo $val | sed -e "s/h$//") * 3600 ));; - *ms) echo $(( $(echo $val | sed -e "s/ms$//") / 1000 ));; - *s) echo $val | sed -e "s/s$//";; - *m) echo $(( $(echo $val | sed -e "s/m$//") * 60 ));; - *) echo "$val";; - esac -} - -OCF_RESKEY_daemon_timeout=$(time_to_seconds ${OCF_RESKEY_daemon_timeout}) - -status_daemon() -{ - PID=`pidofproc "$DAEMON"` - if [ -n "$PID" ]; then - return $OCF_SUCCESS - fi - return $OCF_NOT_RUNNING -} - -bringup_daemon() -{ - if [ ! -e "$DAEMON" ]; then - ocf_log err "Required binary not found: $DAEMON" - return $OCF_ERR_INSTALLED - fi - - start_daemon "$DAEMON"; rc=$? - if [ $rc != 0 ]; then - ocf_log err "Could not start $DAEMON" - return $OCF_ERR_GENERIC - fi - - sleep 1 - COUNT=0 - rc=$OCF_NOT_RUNNING - - while [ $rc = $OCF_NOT_RUNNING ]; do - COUNT=`expr $COUNT + 1` - if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then - ocf_log err "`basename $DAEMON` did not come up" - return $OCF_ERR_GENERIC - fi - status_daemon; rc=$? - sleep 1 - done - - return $rc -} - -kill_daemon() -{ - status_daemon; rc=$? - if [ $rc != $OCF_SUCCESS ]; then - return $rc - fi - - ocf_log info "Stopping `basename "$DAEMON"`" - killproc -INT "$DAEMON" - - sleep 1 - status_daemon; rc=$? - - COUNT=0 - while [ $rc = $OCF_SUCCESS ]; do - COUNT=`expr $COUNT + 1` - if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then - ocf_log err "`basename $DAEMON` shutdown emergency" - killproc -9 "$DAEMON" - status_daemon; rc=$? - if [ $rc = $OCF_NOT_RUNNING ]; then - return $OCF_SUCCESS - else - return $OCF_ERR_GENERIC - fi - fi - killproc -INT "$DAEMON" - sleep 1 - status_daemon; rc=$? - done - - return $OCF_SUCCESS -} - -cmirrord_start() { - - cmirrord_monitor; rc=$? - if [ $rc != $OCF_NOT_RUNNING ]; then - return $rc - fi - - ocf_log info "Starting $OCF_RESOURCE_INSTANCE" - - bringup_daemon - return $? -} - -cmirrord_stop() { - cmirrord_monitor; rc=$? - case $rc in - $OCF_NOT_RUNNING) return $OCF_SUCCESS;; - esac - - ocf_log info "Stopping $OCF_RESOURCE_INSTANCE" - - kill_daemon -} - -cmirrord_monitor() { - cmirrord_validate - - status_daemon - return $? -} - -cmirrord_usage() { - echo "usage: $0 {start|stop|monitor|validate-all|meta-data}" - echo " Expects to have a fully populated OCF RA-compliant environment set." - echo " In particualr, a value for OCF_ROOT" -} - -cmirrord_validate() { - : TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED - case ${OCF_RESKEY_CRM_meta_globally_unique} in - yes|Yes|true|True|1) - ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute" - exit $OCF_ERR_CONFIGURED - ;; - esac - - return $OCF_SUCCESS -} - -meta_data() { - cat < - - - 1.0 - -This is a cmirrord Resource Agent. -It starts cmirrord as anonymous clones. - - cmirrord resource agent - - - - -Number of seconds to allow the control daemon to come up and down - - Daemon Timeout - - - - - -Options to cmirrord. Cmirrord actually doesn't accept any options -for now. - - Daemon Options - - - - - - - - - - - - -END -} - -case $__OCF_ACTION in -meta-data) meta_data - exit $OCF_SUCCESS - ;; -start) cmirrord_start - ;; -stop) cmirrord_stop - ;; -monitor) cmirrord_monitor - ;; -validate-all) cmirrord_validate - ;; -usage|help) cmirrord_usage - exit $OCF_SUCCESS - ;; -*) cmirrord_usage - exit $OCF_ERR_UNIMPLEMENTED - ;; -esac - -exit $? diff --git a/cmirrord_improvment_performance.patch b/cmirrord_improvment_performance.patch deleted file mode 100644 index 2fc7c61..0000000 --- a/cmirrord_improvment_performance.patch +++ /dev/null @@ -1,161 +0,0 @@ -Index: LVM2.2.02.111/daemons/cmirrord/cluster.c -=================================================================== ---- LVM2.2.02.111.orig/daemons/cmirrord/cluster.c -+++ LVM2.2.02.111/daemons/cmirrord/cluster.c -@@ -358,6 +358,10 @@ static int handle_cluster_response(struc - /* FIXME: Ensure memcpy cannot explode */ - memcpy(orig_rq, rq, sizeof(*rq) + rq->u_rq.data_size); - -+ /* make sure the response of DM_ULOG_FLUSH has no payload */ -+ if (orig_rq->u_rq.request_type == DM_ULOG_FLUSH) -+ orig_rq->u_rq.data_size = 0; -+ - r = kernel_send(&orig_rq->u_rq); - if (r) - LOG_ERROR("Failed to send response to kernel"); -Index: LVM2.2.02.111/daemons/cmirrord/functions.c -=================================================================== ---- LVM2.2.02.111.orig/daemons/cmirrord/functions.c -+++ LVM2.2.02.111/daemons/cmirrord/functions.c -@@ -374,7 +374,7 @@ static int find_disk_path(char *major_mi - // return r ? -errno : 0; - } - --static int _clog_ctr(char *uuid, uint64_t luid, -+static int _clog_ctr(char *uuid, uint64_t luid, uint32_t version, - int argc, char **argv, uint64_t device_size) - { - int i; -@@ -443,6 +443,8 @@ static int _clog_ctr(char *uuid, uint64_ - log_sync = NOSYNC; - else if (!strcmp(argv[i], "block_on_error")) - block_on_error = 1; -+ else if (!strcmp(argv[i], "integrated_flush") && version > 2) -+ LOG_PRINT("support integrated_flush"); - } - - lc = dm_zalloc(sizeof(*lc)); -@@ -608,7 +610,7 @@ static int clog_ctr(struct dm_ulog_reque - return -EINVAL; - } - -- r = _clog_ctr(rq->uuid, rq->luid, argc - 1, argv + 1, device_size); -+ r = _clog_ctr(rq->uuid, rq->luid, rq->version, argc - 1, argv + 1, device_size); - - /* We join the CPG when we resume */ - -@@ -1053,12 +1055,14 @@ static int clog_in_sync(struct dm_ulog_r - return 0; - } - -+static int _clog_mark_region(struct log_c * lc, struct dm_ulog_request *rq, uint32_t originator); -+ - /* - * clog_flush - * @rq - * - */ --static int clog_flush(struct dm_ulog_request *rq, int server) -+static int clog_flush(struct dm_ulog_request *rq, uint32_t originator, int server) - { - int r = 0; - struct log_c *lc = get_log(rq->uuid, rq->luid); -@@ -1069,6 +1073,15 @@ static int clog_flush(struct dm_ulog_req - if (!lc->touched) - return 0; - -+ /* flush has payload to mark region */ -+ if(rq->data_size) { -+ r = _clog_mark_region(lc, rq, originator); -+ if (r) { -+ LOG_ERROR("mark region failed in integrated flush"); -+ return r; -+ } -+ } -+ - /* - * Do the actual flushing of the log only - * if we are the server. -@@ -1131,25 +1144,11 @@ static int mark_region(struct log_c *lc, - return 0; - } - --/* -- * clog_mark_region -- * @rq -- * -- * rq may contain more than one mark request. We -- * can determine the number from the 'data_size' field. -- * -- * Returns: 0 on success, -EXXX on failure -- */ --static int clog_mark_region(struct dm_ulog_request *rq, uint32_t originator) -+static int _clog_mark_region(struct log_c * lc, struct dm_ulog_request *rq, uint32_t originator) - { - int r; - int count; - uint64_t *region; -- struct log_c *lc = get_log(rq->uuid, rq->luid); -- -- if (!lc) -- return -EINVAL; -- - if (rq->data_size % sizeof(uint64_t)) { - LOG_ERROR("Bad data size given for mark_region request"); - return -EINVAL; -@@ -1169,6 +1168,25 @@ static int clog_mark_region(struct dm_ul - return 0; - } - -+/* -+ * clog_mark_region -+ * @rq -+ * -+ * rq may contain more than one mark request. We -+ * can determine the number from the 'data_size' field. -+ * -+ * Returns: 0 on success, -EXXX on failure -+ */ -+static int clog_mark_region(struct dm_ulog_request *rq, uint32_t originator) -+{ -+ struct log_c *lc = get_log(rq->uuid, rq->luid); -+ -+ if (!lc) -+ return -EINVAL; -+ -+ return _clog_mark_region(lc, rq, originator); -+} -+ - static int clear_region(struct log_c *lc, uint64_t region, uint32_t who) - { - int other_matches = 0; -@@ -1700,7 +1718,7 @@ int do_request(struct clog_request *rq, - r = clog_in_sync(&rq->u_rq); - break; - case DM_ULOG_FLUSH: -- r = clog_flush(&rq->u_rq, server); -+ r = clog_flush(&rq->u_rq, rq->originator, server); - break; - case DM_ULOG_MARK_REGION: - r = clog_mark_region(&rq->u_rq, rq->originator); -Index: LVM2.2.02.111/libdm/libdm-deptree.c -=================================================================== ---- LVM2.2.02.111.orig/libdm/libdm-deptree.c -+++ LVM2.2.02.111/libdm/libdm-deptree.c -@@ -2254,10 +2254,12 @@ static int _mirror_emit_segment_line(str - return_0; - } - -- if (dm_log_userspace) -- EMIT_PARAMS(pos, "userspace %u %s clustered-%s", -- log_parm_count, seg->uuid, logtype); -- else -+ /* for cluster raid1, use integrated flush to improve performance */ -+ if (dm_log_userspace) { -+ log_parm_count ++; /* for integrated_flush */ -+ EMIT_PARAMS(pos, "userspace %u %s %s clustered-%s", -+ log_parm_count, seg->uuid, "integrated_flush", logtype); -+ } else - EMIT_PARAMS(pos, "%s %u", logtype, log_parm_count); - - if (seg->log) diff --git a/device-mapper.changes b/device-mapper.changes index 3b09034..d060af9 100644 --- a/device-mapper.changes +++ b/device-mapper.changes @@ -1,3 +1,29 @@ +------------------------------------------------------------------- +Mon Oct 23 07:50:33 UTC 2017 - zren@suse.com + +- Update to LVM2.2.02.175 +- Use week dependency for lvm2-lockd on libdlm and sanlock +- Rename/refresh patches: + - display-dm-name-for-lv-name.diff to fate-309425_display-dm-name-for-lv-name.patch + - fsadm-add-support-for-btrfs.patch to fate-31841_fsadm-add-support-for-btrfs.patch + - dmeventd-fix-dso-name-wrong-compare.patch to bug-935623_dmeventd-fix-dso-name-wrong-compare.patch + - lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch to bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch + - simplify-special-case-for-md-in-69-dm-lvm-metadata.patch to bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch + +------------------------------------------------------------------- +Thu Sep 14 09:51:18 UTC 2017 - zren@suse.com + +- Drop resource agents for clvmd and cmirror (bsc#1058680) + - clvmd.ocf + - cmirrord.ocf +- Drop all patches for cmirror (bsc#1058661) + - cluster_support_mirrord_log.diff + - cmirrord_improvment_performance.patch + - lvconvert-cluster-mirrored-disk-failed.patch + - improve-mirror-legs-on-different-tag-pvs.patch + - make-mirror-legs-on-different-tag-pvs.patch + - use-mirrortype-asdefault-whenclvmdrunning.patch + ------------------------------------------------------------------- Fri Aug 18 09:53:39 UTC 2017 - mwilck@suse.com @@ -21,6 +47,7 @@ Tue Aug 1 05:59:29 UTC 2017 - zren@suse.com - pvcreate-enhance-the-error-message.patch - pvmove_support_clustered_vg.diff - version-plugins-in-libdir.patch + - lvm2-testsuite.patch ------------------------------------------------------------------- Tue Jul 25 13:48:00 UTC 2017 - zren@suse.com diff --git a/device-mapper.spec b/device-mapper.spec index a5a4740..c6c572f 100644 --- a/device-mapper.spec +++ b/device-mapper.spec @@ -19,8 +19,8 @@ %define libname libdevmapper1_03 %define libname_event libdevmapper-event1_03 ### COMMON-DEF-BEGIN ### -%define lvm2_version 2.02.173 -%define device_mapper_version 1.02.142 +%define lvm2_version 2.02.175 +%define device_mapper_version 1.02.144 %define thin_provisioning_version 0.7.0 ### COMMON-DEF-END ### Name: device-mapper @@ -52,27 +52,17 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build # Never upstream Patch1001: cmirrord_remove_date_time_from_compilation.patch #fate#309425 -Patch1002: display-dm-name-for-lv-name.diff -#fate#312248 -Patch1003: make-mirror-legs-on-different-tag-pvs.patch -Patch1004: improve-mirror-legs-on-different-tag-pvs.patch -#fate#315092 -Patch1005: cmirrord_improvment_performance.patch -#fate#314367 -Patch1006: cluster_support_mirrord_log.diff -Patch1007: lvconvert-cluster-mirrored-disk-failed.patch +Patch1002: fate-309425_display-dm-name-for-lv-name.patch #FATE#318413 -Patch1008: fsadm-add-support-for-btrfs.patch -#bnc#870824 -Patch1009: use-mirrortype-asdefault-whenclvmdrunning.patch +Patch1003: fate-31841_fsadm-add-support-for-btrfs.patch #bsc#935623 -Patch1010: dmeventd-fix-dso-name-wrong-compare.patch +Patch1004: bug-935623_dmeventd-fix-dso-name-wrong-compare.patch #bsc#960044 -Patch1011: lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch +Patch1005: bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch #SUSE patches 2000+ for device mapper, udev rules #bsc#1012973 -Patch2006: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch +Patch2006: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch ### COMMON-PATCH-END ### %description @@ -86,12 +76,6 @@ Programs and man pages for configuring and using the device mapper. %patch1003 -p1 %patch1004 -p1 %patch1005 -p1 -%patch1006 -p1 -%patch1007 -p1 -%patch1008 -p1 -%patch1009 -p1 -%patch1010 -p1 -%patch1011 -p1 %patch2006 -p1 ### COMMON-PREP-END ### @@ -100,7 +84,8 @@ extra_opts="" ### COMMON-CONFIG-BEGIN ### export PATH=$PATH:/sbin:%{_prefix}/sbin -sed -ie "s/%{device_mapper_version}/1.03.01/g" VERSION_DM +# Why this messy fix here? someone released a wrong version... +sed -ie "s/1.02.*/1.03.01/g" VERSION_DM %configure \ --enable-dmeventd \ --enable-cmdlib \ diff --git a/display-dm-name-for-lv-name.diff b/fate-309425_display-dm-name-for-lv-name.patch similarity index 100% rename from display-dm-name-for-lv-name.diff rename to fate-309425_display-dm-name-for-lv-name.patch diff --git a/fsadm-add-support-for-btrfs.patch b/fate-31841_fsadm-add-support-for-btrfs.patch similarity index 100% rename from fsadm-add-support-for-btrfs.patch rename to fate-31841_fsadm-add-support-for-btrfs.patch diff --git a/improve-mirror-legs-on-different-tag-pvs.patch b/improve-mirror-legs-on-different-tag-pvs.patch deleted file mode 100644 index d8c0a42..0000000 --- a/improve-mirror-legs-on-different-tag-pvs.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 69092b1179f4fbd0fae7e054665ad049dffd9966 Mon Sep 17 00:00:00 2001 -From: Guangliang Zhao -Date: Wed, 5 Dec 2012 18:25:04 +0800 -Subject: [PATCH 2/2] mirror: improve mirror legs on different tag pvs - -This patch will find the biggest eligible area every time, -and add it to the parallel areas. - -The previous just find the different tag pv area with all -found ones, if the new area's tag has appeared, just throw -it. The new will compare the length, and choose the longer -one. - -Signed-off-by: Guangliang Zhao ---- - lib/metadata/lv_manip.c | 34 +++++++++++++++++++++++++++++++--- - 1 file changed, 31 insertions(+), 3 deletions(-) - -Index: LVM2.2.02.139/lib/metadata/lv_manip.c -=================================================================== ---- LVM2.2.02.139.orig/lib/metadata/lv_manip.c -+++ LVM2.2.02.139/lib/metadata/lv_manip.c -@@ -2518,6 +2518,25 @@ static uint32_t _calc_required_extents(s - return required; - } - -+static void _replace_required_area(struct alloc_handle *ah, -+ uint32_t max_to_allocate, -+ unsigned ix_pva, struct pv_area *pva, -+ struct alloc_state *alloc_state, -+ alloc_policy_t alloc) -+{ -+ uint32_t required = _calc_required_extents(ah, pva, ix_pva, -+ max_to_allocate, alloc); -+ -+ /* -+ * We don't worry about the area replaced, because _clear_areas() and -+ * _reset_unreserved() called by _find_some_parallel_space() will clear -+ * the alloc_state and reserved areas every time. -+ */ -+ if (required > alloc_state->areas[ix_pva - 1].used) -+ _reserve_area(ah, alloc_state, pva, required, ix_pva - 1, -+ pva->unreserved); -+} -+ - static void _clear_areas(struct alloc_state *alloc_state) - { - uint32_t s; -@@ -2646,6 +2665,7 @@ static int _find_some_parallel_space(str - const struct alloc_parms *alloc_parms = alloc_state->alloc_parms; - unsigned ix = 0; - unsigned last_ix; -+ int ret; - struct pv_map *pvm; - struct pv_area *pva; - unsigned preferred_count = 0; -@@ -2766,9 +2786,17 @@ static int _find_some_parallel_space(str - continue; - - case USE_AREA: -- if(check_areas_separate_tags(ah, alloc_state, alloc_state->num_positional_areas, -- ix + alloc_state->num_positional_areas, pva) >= 0) -- goto next_pv; -+ ret = check_areas_separate_tags(ah, -+ alloc_state, alloc_state->num_positional_areas, -+ ix + alloc_state->num_positional_areas, pva); -+ if (ret >= 0) { -+ _replace_required_area(ah, -+ max_to_allocate, -+ ret + 1, pva, -+ alloc_state, -+ alloc_parms->alloc); -+ continue; -+ } - - /* - * Except with ALLOC_ANYWHERE, replace first area with this diff --git a/lvconvert-cluster-mirrored-disk-failed.patch b/lvconvert-cluster-mirrored-disk-failed.patch deleted file mode 100644 index 39bc02f..0000000 --- a/lvconvert-cluster-mirrored-disk-failed.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- - daemons/clvmd/lvm-functions.c | 11 +++++++---- - 1 file changed, 7 insertions(+), 4 deletions(-) - ---- a/daemons/clvmd/lvm-functions.c -+++ b/daemons/clvmd/lvm-functions.c -@@ -416,16 +416,18 @@ error: - /* Resume the LV if it was active */ - static int do_resume_lv(char *resource, unsigned char command, unsigned char lock_flags) - { -- int oldmode, origin_only, exclusive, revert; -+ int oldmode, origin_only, exclusive = 0, revert; - -+#if 0 - /* Is it open ? */ - oldmode = get_current_lock(resource); - if (oldmode == -1 && (command & LCK_CLUSTER_VG)) { - DEBUGLOG("do_resume_lv, lock not already held\n"); - return 0; /* We don't need to do anything */ - } -- origin_only = (lock_flags & LCK_ORIGIN_ONLY_MODE) ? 1 : 0; - exclusive = (oldmode == LCK_EXCL) ? 1 : 0; -+#endif -+ origin_only = (lock_flags & LCK_ORIGIN_ONLY_MODE) ? 1 : 0; - revert = (lock_flags & LCK_REVERT_MODE) ? 1 : 0; - - if (!lv_resume_if_active(cmd, resource, origin_only, exclusive, revert, NULL)) -@@ -439,16 +441,17 @@ static int do_suspend_lv(char *resource, - { - int oldmode; - unsigned origin_only = (lock_flags & LCK_ORIGIN_ONLY_MODE) ? 1 : 0; -- unsigned exclusive; -+ unsigned exclusive = 0; - -+#if 0 - /* Is it open ? */ - oldmode = get_current_lock(resource); - if (oldmode == -1 && (command & LCK_CLUSTER_VG)) { - DEBUGLOG("do_suspend_lv, lock not already held\n"); - return 0; /* Not active, so it's OK */ - } -- - exclusive = (oldmode == LCK_EXCL) ? 1 : 0; -+#endif - - /* Always call lv_suspend to read commited and precommited data */ - if (!lv_suspend_if_active(cmd, resource, origin_only, exclusive, NULL, NULL)) diff --git a/lvm2-clvm.changes b/lvm2-clvm.changes index 3b09034..d060af9 100644 --- a/lvm2-clvm.changes +++ b/lvm2-clvm.changes @@ -1,3 +1,29 @@ +------------------------------------------------------------------- +Mon Oct 23 07:50:33 UTC 2017 - zren@suse.com + +- Update to LVM2.2.02.175 +- Use week dependency for lvm2-lockd on libdlm and sanlock +- Rename/refresh patches: + - display-dm-name-for-lv-name.diff to fate-309425_display-dm-name-for-lv-name.patch + - fsadm-add-support-for-btrfs.patch to fate-31841_fsadm-add-support-for-btrfs.patch + - dmeventd-fix-dso-name-wrong-compare.patch to bug-935623_dmeventd-fix-dso-name-wrong-compare.patch + - lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch to bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch + - simplify-special-case-for-md-in-69-dm-lvm-metadata.patch to bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch + +------------------------------------------------------------------- +Thu Sep 14 09:51:18 UTC 2017 - zren@suse.com + +- Drop resource agents for clvmd and cmirror (bsc#1058680) + - clvmd.ocf + - cmirrord.ocf +- Drop all patches for cmirror (bsc#1058661) + - cluster_support_mirrord_log.diff + - cmirrord_improvment_performance.patch + - lvconvert-cluster-mirrored-disk-failed.patch + - improve-mirror-legs-on-different-tag-pvs.patch + - make-mirror-legs-on-different-tag-pvs.patch + - use-mirrortype-asdefault-whenclvmdrunning.patch + ------------------------------------------------------------------- Fri Aug 18 09:53:39 UTC 2017 - mwilck@suse.com @@ -21,6 +47,7 @@ Tue Aug 1 05:59:29 UTC 2017 - zren@suse.com - pvcreate-enhance-the-error-message.patch - pvmove_support_clustered_vg.diff - version-plugins-in-libdir.patch + - lvm2-testsuite.patch ------------------------------------------------------------------- Tue Jul 25 13:48:00 UTC 2017 - zren@suse.com diff --git a/lvm2-clvm.spec b/lvm2-clvm.spec index c159c7c..e6329d1 100644 --- a/lvm2-clvm.spec +++ b/lvm2-clvm.spec @@ -19,8 +19,8 @@ %define dlm_version 3.99.1 %define sanlock_version 3.3.0 ### COMMON-DEF-BEGIN ### -%define lvm2_version 2.02.173 -%define device_mapper_version 1.02.142 +%define lvm2_version 2.02.175 +%define device_mapper_version 1.02.144 %define thin_provisioning_version 0.7.0 ### COMMON-DEF-END ### Name: lvm2-clvm @@ -32,8 +32,6 @@ Group: Productivity/Clustering/HA Url: http://sources.redhat.com/cluster/clvm/ Source: ftp://sources.redhat.com/pub/lvm2/LVM2.%{lvm2_version}.tgz Source1: ftp://sources.redhat.com/pub/lvm2/LVM2.%{lvm2_version}.tgz.asc -Source2: clvmd.ocf -Source3: cmirrord.ocf BuildRequires: libcorosync-devel BuildRequires: libdlm-devel >= %{dlm_version} BuildRequires: pkgconfig @@ -55,27 +53,17 @@ Provides: cmirrord = %{version} # Never upstream Patch1001: cmirrord_remove_date_time_from_compilation.patch #fate#309425 -Patch1002: display-dm-name-for-lv-name.diff -#fate#312248 -Patch1003: make-mirror-legs-on-different-tag-pvs.patch -Patch1004: improve-mirror-legs-on-different-tag-pvs.patch -#fate#315092 -Patch1005: cmirrord_improvment_performance.patch -#fate#314367 -Patch1006: cluster_support_mirrord_log.diff -Patch1007: lvconvert-cluster-mirrored-disk-failed.patch +Patch1002: fate-309425_display-dm-name-for-lv-name.patch #FATE#318413 -Patch1008: fsadm-add-support-for-btrfs.patch -#bnc#870824 -Patch1009: use-mirrortype-asdefault-whenclvmdrunning.patch +Patch1003: fate-31841_fsadm-add-support-for-btrfs.patch #bsc#935623 -Patch1010: dmeventd-fix-dso-name-wrong-compare.patch +Patch1004: bug-935623_dmeventd-fix-dso-name-wrong-compare.patch #bsc#960044 -Patch1011: lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch +Patch1005: bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch #SUSE patches 2000+ for device mapper, udev rules #bsc#1012973 -Patch2006: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch +Patch2006: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch ### COMMON-PATCH-END ### %description @@ -90,12 +78,6 @@ A daemon for using LVM2 Logival Volumes in a clustered environment. %patch1003 -p1 %patch1004 -p1 %patch1005 -p1 -%patch1006 -p1 -%patch1007 -p1 -%patch1008 -p1 -%patch1009 -p1 -%patch1010 -p1 -%patch1011 -p1 %patch2006 -p1 ### COMMON-PREP-END ### @@ -119,7 +101,8 @@ extra_opts=" ### COMMON-CONFIG-BEGIN ### export PATH=$PATH:/sbin:%{_prefix}/sbin -sed -ie "s/%{device_mapper_version}/1.03.01/g" VERSION_DM +# Why this messy fix here? someone released a wrong version... +sed -ie "s/1.02.*/1.03.01/g" VERSION_DM %configure \ --enable-dmeventd \ --enable-cmdlib \ @@ -156,10 +139,6 @@ make DESTDIR=%{buildroot} install -C daemons/cmirrord install -m0644 -D man/lvmlockd.8 %{buildroot}%{_mandir}/man8/lvmlockd.8 install -m0644 -D man/lvmlockctl.8 %{buildroot}%{_mandir}/man8/lvmlockctl.8 -# ocf files -install -m755 -D %{SOURCE2} "%{buildroot}/%{_libexecdir}/ocf/resource.d/lvm2/clvmd" -install -m755 -D %{SOURCE3} "%{buildroot}/%{_libexecdir}/ocf/resource.d/lvm2/cmirrord" - # rc services symlinks ln -s service %{buildroot}%{_sbindir}/rclvm2-cluster-activation ln -s service %{buildroot}%{_sbindir}/rclvm2-clvmd @@ -185,10 +164,6 @@ rm %{buildroot}%{_unitdir}/lvm2-pvscan@.service %{_sbindir}/clvmd %{_sbindir}/rclvm2-cluster-activation %{_sbindir}/rclvm2-clvmd -%dir %{_libexecdir}/ocf -%dir %{_libexecdir}/ocf/resource.d -%dir %{_libexecdir}/ocf/resource.d/lvm2 -%{_libexecdir}/ocf/resource.d/lvm2/clvmd %{_unitdir}/lvm2-clvmd.service %{_unitdir}/lvm2-cluster-activation.service %{_libexecdir}/systemd/lvm2-cluster-activation @@ -208,7 +183,6 @@ A daemon for using LVM2 Logival Volumes in a clustered environment. %files -n lvm2-cmirrord %defattr(-,root,root) %{_sbindir}/cmirrord -%{_libexecdir}/ocf/resource.d/lvm2/cmirrord %{_libexecdir}/systemd/system/lvm2-cmirrord.service %{_sbindir}/rclvm2-cmirrord %{_mandir}/man8/cmirrord.8%{ext_man} @@ -216,8 +190,8 @@ A daemon for using LVM2 Logival Volumes in a clustered environment. %package -n lvm2-lockd Summary: LVM locking daemon Group: Productivity/Clustering/HA -Requires: libdlm >= %{dlm_version} -Requires: libsanlock1 >= %{sanlock_version} +Recommends: libdlm >= %{dlm_version} +Recommends: libsanlock1 >= %{sanlock_version} Requires: lvm2 = %{version} %{?systemd_requires} diff --git a/lvm2.changes b/lvm2.changes index 3b09034..d060af9 100644 --- a/lvm2.changes +++ b/lvm2.changes @@ -1,3 +1,29 @@ +------------------------------------------------------------------- +Mon Oct 23 07:50:33 UTC 2017 - zren@suse.com + +- Update to LVM2.2.02.175 +- Use week dependency for lvm2-lockd on libdlm and sanlock +- Rename/refresh patches: + - display-dm-name-for-lv-name.diff to fate-309425_display-dm-name-for-lv-name.patch + - fsadm-add-support-for-btrfs.patch to fate-31841_fsadm-add-support-for-btrfs.patch + - dmeventd-fix-dso-name-wrong-compare.patch to bug-935623_dmeventd-fix-dso-name-wrong-compare.patch + - lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch to bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch + - simplify-special-case-for-md-in-69-dm-lvm-metadata.patch to bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch + +------------------------------------------------------------------- +Thu Sep 14 09:51:18 UTC 2017 - zren@suse.com + +- Drop resource agents for clvmd and cmirror (bsc#1058680) + - clvmd.ocf + - cmirrord.ocf +- Drop all patches for cmirror (bsc#1058661) + - cluster_support_mirrord_log.diff + - cmirrord_improvment_performance.patch + - lvconvert-cluster-mirrored-disk-failed.patch + - improve-mirror-legs-on-different-tag-pvs.patch + - make-mirror-legs-on-different-tag-pvs.patch + - use-mirrortype-asdefault-whenclvmdrunning.patch + ------------------------------------------------------------------- Fri Aug 18 09:53:39 UTC 2017 - mwilck@suse.com @@ -21,6 +47,7 @@ Tue Aug 1 05:59:29 UTC 2017 - zren@suse.com - pvcreate-enhance-the-error-message.patch - pvmove_support_clustered_vg.diff - version-plugins-in-libdir.patch + - lvm2-testsuite.patch ------------------------------------------------------------------- Tue Jul 25 13:48:00 UTC 2017 - zren@suse.com diff --git a/lvm2.spec b/lvm2.spec index b0d298a..b00df09 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -21,8 +21,8 @@ %define cmdlib liblvm2cmd2_02 ### COMMON-DEF-BEGIN ### -%define lvm2_version 2.02.173 -%define device_mapper_version 1.02.142 +%define lvm2_version 2.02.175 +%define device_mapper_version 1.02.144 %define thin_provisioning_version 0.7.0 ### COMMON-DEF-END ### @@ -63,33 +63,22 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build # Never upstream Patch1001: cmirrord_remove_date_time_from_compilation.patch #fate#309425 -Patch1002: display-dm-name-for-lv-name.diff -#fate#312248 -Patch1003: make-mirror-legs-on-different-tag-pvs.patch -Patch1004: improve-mirror-legs-on-different-tag-pvs.patch -#fate#315092 -Patch1005: cmirrord_improvment_performance.patch -#fate#314367 -Patch1006: cluster_support_mirrord_log.diff -Patch1007: lvconvert-cluster-mirrored-disk-failed.patch +Patch1002: fate-309425_display-dm-name-for-lv-name.patch #FATE#318413 -Patch1008: fsadm-add-support-for-btrfs.patch -#bnc#870824 -Patch1009: use-mirrortype-asdefault-whenclvmdrunning.patch +Patch1003: fate-31841_fsadm-add-support-for-btrfs.patch #bsc#935623 -Patch1010: dmeventd-fix-dso-name-wrong-compare.patch +Patch1004: bug-935623_dmeventd-fix-dso-name-wrong-compare.patch #bsc#960044 -Patch1011: lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch +Patch1005: bug-960044_lvm2-lvmetad.service-add-Also-lvm2-lvmetad.socket.patch #SUSE patches 2000+ for device mapper, udev rules #bsc#1012973 -Patch2006: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch +Patch2006: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch ### COMMON-PATCH-END ### # 3000+ for test code -#bnc#950089 -Patch3001: lvm2-testsuite.patch #bsc#1043040 +Patch3001: bug-950089_test-fix-lvm2-testsuite-build-error.patch Patch3002: bug-1043040_test-fix-read-ahead-issues-in-test-scripts.patch #bsc#1037309 @@ -107,12 +96,6 @@ Volume Manager. %patch1003 -p1 %patch1004 -p1 %patch1005 -p1 -%patch1006 -p1 -%patch1007 -p1 -%patch1008 -p1 -%patch1009 -p1 -%patch1010 -p1 -%patch1011 -p1 %patch2006 -p1 ### COMMON-PREP-END ### @@ -136,7 +119,8 @@ extra_opts=" ### COMMON-CONFIG-BEGIN ### export PATH=$PATH:/sbin:%{_prefix}/sbin -sed -ie "s/%{device_mapper_version}/1.03.01/g" VERSION_DM +# Why this messy fix here? someone released a wrong version... +sed -ie "s/1.02.*/1.03.01/g" VERSION_DM %configure \ --enable-dmeventd \ --enable-cmdlib \ @@ -201,8 +185,8 @@ rm %{buildroot}%{_unitdir}/dm-event.service rm %{buildroot}%{_unitdir}/lvm2-lvmlockd.service rm %{buildroot}%{_unitdir}/lvm2-lvmlocking.service rm %{buildroot}%{_includedir}/libdevmapper*.h -rm %{buildroot}%{_libdir}/libdevmapper.so.1.03 -rm %{buildroot}%{_libdir}/libdevmapper-event.so.1.03 +rm %{buildroot}%{_libdir}/libdevmapper.so.* +rm %{buildroot}%{_libdir}/libdevmapper-event.so.* rm %{buildroot}%{_libdir}/libdevmapper.so rm %{buildroot}%{_libdir}/libdevmapper-event.so rm %{buildroot}%{_libdir}/pkgconfig/devmapper*.pc diff --git a/make-mirror-legs-on-different-tag-pvs.patch b/make-mirror-legs-on-different-tag-pvs.patch deleted file mode 100644 index d57c77d..0000000 --- a/make-mirror-legs-on-different-tag-pvs.patch +++ /dev/null @@ -1,179 +0,0 @@ -From a83a3ec7292197bd870cae570ed545267899bc5e Mon Sep 17 00:00:00 2001 -From: Eric Ren -Date: Tue, 4 Jul 2017 19:42:14 +0800 -Subject: [PATCH 1/2] mirror: make mirror legs on different tag pvs - -The mirror legs could be placed on the PVs(with different tags) -from the other mirror legs with this patch. - -The lvcreate allocates the replica "randomly" when creating -a mirrored logical volume now, so it could happen that both -copies end up on the same array (or on the same site), clearly -undesired. - -We can't control the fist allocation, because didn't restrict -the areas into parallel space. This patch add the limit when -finding areas for parallel space, so that mirror legs will -always be placed on pvs with differnt tags. - -Signed-off-by: Guangliang Zhao -Refreshed-by: Eric Ren ---- - conf/example.conf.in | 17 +++++++++++++++++ - lib/config/config_settings.h | 5 ++++- - lib/config/defaults.h | 1 + - lib/metadata/lv_manip.c | 35 +++++++++++++++++++++++++++++++++++ - man/lvcreate.8_pregen | 7 +++++++ - 5 files changed, 64 insertions(+), 1 deletion(-) - -diff --git a/conf/example.conf.in b/conf/example.conf.in -index b5b0e6a..947a3cf 100644 ---- a/conf/example.conf.in -+++ b/conf/example.conf.in -@@ -372,6 +372,23 @@ allocation { - # or erased unless the --wipesignatures option is used directly. - wipe_signatures_when_zeroing_new_lvs = 1 - -+ # Set to 1 to guarantee that mirror leg will always be placed on -+ # different PVs(with different tags) from the other mirror legs. -+ # -+ # If you want to enable this feature, the following conditions -+ # must be met: -+ # 1) The mirror_legs_require_separate_pvs must be set to 1, the -+ # default value is 0. -+ # 2) The cling_tag_list must be activated. -+ # 3) The length of all pvs with same tag must greater than or equal -+ # to the mirror's. -+ -+ # This feature is only for the first allocation, on the other hand -+ # when creating new mirrored lvs. -+ # Please note that the commond may fail if the number of all tags -+ # on the pvs less than the mirror legs number. -+ mirror_legs_require_separate_pvs = 0 -+ - # Configuration option allocation/mirror_logs_require_separate_pvs. - # Mirror logs and images will always use different PVs. - # The default setting changed in version 2.02.85. -diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h -index 40b64ab..59eed26 100644 ---- a/lib/config/config_settings.h -+++ b/lib/config/config_settings.h -@@ -474,7 +474,10 @@ cfg(allocation_raid_stripe_all_devices_CFG, "raid_stripe_all_devices", allocatio - "stripes to use.\n" - "This was the default behaviour until release 2.02.162.\n") - --cfg(allocation_cache_pool_metadata_require_separate_pvs_CFG, "cache_pool_metadata_require_separate_pvs", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA, CFG_TYPE_BOOL, DEFAULT_CACHE_POOL_METADATA_REQUIRE_SEPARATE_PVS, vsn(2, 2, 106), NULL, 0, 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, -+ "Mirror legs will always use different PVs.\n") -+ -+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") - - cfg(allocation_cache_pool_cachemode_CFG, "cache_pool_cachemode", allocation_CFG_SECTION, CFG_PROFILABLE | CFG_PROFILABLE_METADATA | CFG_DEFAULT_COMMENTED, CFG_TYPE_STRING, DEFAULT_CACHE_MODE, vsn(2, 2, 113), NULL, vsn(2, 2, 128), -diff --git a/lib/config/defaults.h b/lib/config/defaults.h -index d9e19d9..e5134e4 100644 ---- a/lib/config/defaults.h -+++ b/lib/config/defaults.h -@@ -161,6 +161,7 @@ - #define DEFAULT_MAX_LV 0 - #define DEFAULT_ALLOC_POLICY ALLOC_NORMAL - #define DEFAULT_MIRROR_LOGS_REQUIRE_SEPARATE_PVS 0 -+#define DEFAULT_MIRROR_LEGS_REQUIRE_SEPARATE_PVS 0 - #define DEFAULT_MAXIMISE_CLING 1 - #define DEFAULT_CLUSTERED 0 - -diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c -index f75cf51..8dc90b4 100644 ---- a/lib/metadata/lv_manip.c -+++ b/lib/metadata/lv_manip.c -@@ -1622,6 +1622,9 @@ struct alloc_handle { - - unsigned maximise_cling; - unsigned mirror_logs_separate; /* Force mirror logs on separate PVs? */ -+ unsigned mirror_legs_separate; /* Force mirror *legs* on separate PVs*/ -+ -+ const struct segment_type *segtype; - - /* - * RAID devices require a metadata area that accompanies each -@@ -2736,6 +2739,32 @@ static int _limit_to_one_area_per_tag(struct alloc_handle *ah, struct alloc_stat - } - - /* -+ * 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. -+ */ -+static int check_areas_separate_tags(struct alloc_handle *ah, -+ struct alloc_state *alloc_state, -+ unsigned ix_start, -+ unsigned ix_end, -+ struct pv_area *pva) -+{ -+ int i; -+ -+ if (!segtype_is_mirrored(ah->segtype) || -+ alloc_state->allocated || -+ !ah->mirror_legs_separate || -+ !ah->cling_tag_list_cn) -+ return -1; -+ -+ for (i = ix_start; i < ix_end; i++) -+ if(_pvs_have_matching_tag(ah->cling_tag_list_cn, -+ alloc_state->areas[i].pva->map->pv, -+ pva->map->pv, 0)) -+ return i; -+ return -1; -+} -+ -+/* - * Returns 1 regardless of whether any space was found, except on error. - */ - static int _find_some_parallel_space(struct alloc_handle *ah, -@@ -2865,6 +2894,10 @@ static int _find_some_parallel_space(struct alloc_handle *ah, - continue; - - case USE_AREA: -+ if(check_areas_separate_tags(ah, alloc_state, alloc_state->num_positional_areas, -+ ix + alloc_state->num_positional_areas, pva) >= 0) -+ goto next_pv; -+ - /* - * Except with ALLOC_ANYWHERE, replace first area with this - * one which is smaller but still big enough. -@@ -3355,6 +3388,7 @@ static struct alloc_handle *_alloc_init(struct cmd_context *cmd, - 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 -@@ -3366,6 +3400,7 @@ static struct alloc_handle *_alloc_init(struct cmd_context *cmd, - 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; -diff --git a/man/lvcreate.8_pregen b/man/lvcreate.8_pregen -index 6b05147..7c1beab 100644 ---- a/man/lvcreate.8_pregen -+++ b/man/lvcreate.8_pregen -@@ -415,6 +415,13 @@ Create a raid10 LV. - [ \fB-I\fP|\fB--stripesize\fP \fISize\fP[k|UNIT] ] - .ad b - .br -+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. -+ -+.br -+Using \fBmirrored\fP will create a persistent log that is itself mirrored. -+. -+.HP - .ad l - [ \fB-R\fP|\fB--regionsize\fP \fISize\fP[m|UNIT] ] - .ad b --- -2.10.2 - diff --git a/use-mirrortype-asdefault-whenclvmdrunning.patch b/use-mirrortype-asdefault-whenclvmdrunning.patch deleted file mode 100644 index 54c4218..0000000 --- a/use-mirrortype-asdefault-whenclvmdrunning.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- - tools/lvcreate.c | 28 ++++++++++++++++++++++++++-- - 1 file changed, 26 insertions(+), 2 deletions(-) - -Index: LVM2.2.02.152/tools/lvcreate.c -=================================================================== ---- LVM2.2.02.152.orig/tools/lvcreate.c -+++ LVM2.2.02.152/tools/lvcreate.c -@@ -639,6 +639,28 @@ static int _read_activation_params(struc - return 1; - } - -+static int clvmd_daemon_is_running(void) -+{ -+ int fd; -+ struct flock lock; -+ -+ if((fd = open("/var/run/cmirrord.pid", O_RDONLY)) < 0) -+ return 0; -+ -+ lock.l_type = F_WRLCK; -+ lock.l_start = 0; -+ lock.l_whence = SEEK_SET; -+ lock.l_len = 0; -+ if (fcntl(fd, F_GETLK, &lock) < 0) { -+ /* errors with fcntl */ -+ close(fd); -+ return 0; -+ } -+ -+ close(fd); -+ return (lock.l_type == F_UNLCK) ? 0 : 1; -+} -+ - static int _lvcreate_params(struct cmd_context *cmd, - int argc, char **argv, - struct lvcreate_params *lp, -@@ -689,6 +711,8 @@ static int _lvcreate_params(struct cmd_c - mirror_default_cfg = (arg_uint_value(cmd, stripes_ARG, 1) > 1) - ? global_raid10_segtype_default_CFG : global_mirror_segtype_default_CFG; - segtype_str = find_config_tree_str(cmd, mirror_default_cfg, NULL); -+ if(clvmd_daemon_is_running()) -+ segtype_str = "mirror"; - } else - segtype_str = SEG_TYPE_NAME_STRIPED; -