Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package lvm2/2.02.168-2.  It fixes a bunch of RC bugs.

diff --git a/debian/changelog b/debian/changelog
index dd72cf181..0af409a67 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+lvm2 (2.02.168-2) unstable; urgency=medium
+
+  * Don't try to disable cluster locking on clvm purge. (closes: #856696)
+  * Drop symlinks for private libs. (closes: #857954)
+  * Deny writemostly/writebehind during raid1 resync. (closes: #855895)
+
+ -- Bastian Blank <wa...@debian.org>  Fri, 17 Mar 2017 17:29:47 +0100
+
 lvm2 (2.02.168-1) unstable; urgency=medium
 
   * New upstream release.
diff --git a/debian/clvm.prerm b/debian/clvm.prerm
deleted file mode 100644
index fc683cc7c..000000000
--- a/debian/clvm.prerm
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-set -e
-
-case "$1" in
-    remove)
-        lvmconf --disable-cluster
-    ;;
-esac
-
-#DEBHELPER#
-
-exit 0
diff --git a/debian/libdevmapper-dev.install b/debian/libdevmapper-dev.install
index b02ef0b55..3cf999c4d 100644
--- a/debian/libdevmapper-dev.install
+++ b/debian/libdevmapper-dev.install
@@ -1,3 +1,5 @@
 usr/include/libdevmapper*
-usr/lib/*/libdevmapper*.so
-usr/lib/*/pkgconfig/devmapper*
+usr/lib/*/libdevmapper.so
+usr/lib/*/libdevmapper-event.so
+usr/lib/*/pkgconfig/devmapper.pc
+usr/lib/*/pkgconfig/devmapper-event.pc
diff --git 
a/debian/patches/0012-lvchange-reject-writemostly-writebehind-on-raid1-dur.patch
 
b/debian/patches/0012-lvchange-reject-writemostly-writebehind-on-raid1-dur.patch
new file mode 100644
index 000000000..89b6801b4
--- /dev/null
+++ 
b/debian/patches/0012-lvchange-reject-writemostly-writebehind-on-raid1-dur.patch
@@ -0,0 +1,146 @@
+From 27e1059ec6e67a4ac0faaf0f53cd086ac4ed0e35 Mon Sep 17 00:00:00 2001
+From: Heinz Mauelshagen <hei...@redhat.com>
+Date: Thu, 23 Feb 2017 15:09:29 +0100
+Subject: lvchange: reject writemostly/writebehind on raid1 during resync
+
+The MD kernel raid1 personality does no use any writemostly leg as the primary.
+
+In case a previous linear LV holding data gets upconverted to
+raid1 it becomes the primary leg of the new raid1 LV and a full
+resynchronization is started to update the new legs.
+
+No writemostly and/or writebehind setting may be allowed during
+this initial, full synchronization period of this new raid1 LV
+(using the lvchange(8) command), because that would change the
+primary (i.e the previous linear LV) thus causing data loss.
+
+lvchange has a bug not preventing this scenario.
+
+Fix rejects setting writemostly and/or writebehind on resychronizing raid1 LVs.
+
+Once we have status in the lvm2 metadata about the linear -> raid upconversion,
+we may relax this constraint for other types of resynchronization
+(e.g. for user requested "lvchange --resync ").
+
+New lvchange-raid1-writemostly.sh test is added to the test suite.
+
+Resolves: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855895
+---
+ lib/metadata/metadata-exported.h         |  1 +
+ lib/metadata/raid_manip.c                |  8 ++++++-
+ test/shell/lvchange-raid1-writemostly.sh | 41 ++++++++++++++++++++++++++++++++
+ tools/lvchange.c                         | 15 ++++++++++++
+ 4 files changed, 64 insertions(+), 1 deletion(-)
+ create mode 100644 test/shell/lvchange-raid1-writemostly.sh
+
+diff --git a/lib/metadata/metadata-exported.h 
b/lib/metadata/metadata-exported.h
+index cdd4984c1..080073925 100644
+--- a/lib/metadata/metadata-exported.h
++++ b/lib/metadata/metadata-exported.h
+@@ -1212,6 +1212,7 @@ int lv_raid_replace(struct logical_volume *lv, int force,
+                   struct dm_list *remove_pvs, struct dm_list *allocate_pvs);
+ int lv_raid_remove_missing(struct logical_volume *lv);
+ int partial_raid_lv_supports_degraded_activation(const struct logical_volume 
*lv);
++int lv_raid_in_sync(const struct logical_volume *lv);
+ /* --  metadata/raid_manip.c */
+ 
+ /* ++  metadata/cache_manip.c */
+diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
+index 7e591e988..00e5551a3 100644
+--- a/lib/metadata/raid_manip.c
++++ b/lib/metadata/raid_manip.c
+@@ -268,7 +268,7 @@ static int _deactivate_and_remove_lvs(struct volume_group 
*vg, struct dm_list *r
+  * Returns: 1 if in-sync, 0 otherwise.
+  */
+ #define _RAID_IN_SYNC_RETRIES  6
+-static int _raid_in_sync(struct logical_volume *lv)
++static int _raid_in_sync(const struct logical_volume *lv)
+ {
+       int retries = _RAID_IN_SYNC_RETRIES;
+       dm_percent_t sync_percent;
+@@ -299,6 +299,12 @@ static int _raid_in_sync(struct logical_volume *lv)
+       return (sync_percent == DM_PERCENT_100) ? 1 : 0;
+ }
+ 
++/* External interface to raid in-sync check */
++int lv_raid_in_sync(const struct logical_volume *lv)
++{
++      return _raid_in_sync(lv);
++}
++
+ /* Check if RaidLV @lv is synced or any raid legs of @lv are not synced */
+ static int _raid_devs_sync_healthy(struct logical_volume *lv)
+ {
+diff --git a/test/shell/lvchange-raid1-writemostly.sh 
b/test/shell/lvchange-raid1-writemostly.sh
+new file mode 100644
+index 000000000..edf11bd4e
+--- /dev/null
++++ b/test/shell/lvchange-raid1-writemostly.sh
+@@ -0,0 +1,41 @@
++#!/bin/sh
++# Copyright (C) 2017 Red Hat, Inc. All rights reserved.
++#
++# This copyrighted material is made available to anyone wishing to use,
++# modify, copy, or redistribute it subject to the terms and conditions
++# of the GNU General Public License v.2.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software Foundation,
++# Inc., 51 Franklin Street, Fifth Floor, Boston, MA2110-1301 USA
++
++SKIP_WITH_LVMLOCKD=1
++SKIP_WITH_LVMPOLLD=1
++
++. lib/inittest
++
++which mkfs.ext4 || skip
++aux have_raid 1 3 5 || skip
++
++aux prepare_vg 4
++
++for d in $dev1 $dev2 $dev3 $dev4
++do
++      aux delay_dev $d 1
++done
++
++#
++# Test writemostly prohibited on resyncrhonizing raid1
++#
++
++# Create 4-way striped LV
++lvcreate -aey --ty raid1 -m 3 -L 32M -n $lv1 $vg
++not lvchange -y --writemostly $dev1 $vg/$lv1
++check lv_field $vg/$lv1 segtype "raid1"
++check lv_field $vg/$lv1 stripes 4
++check lv_attr_bit health $vg/${lv1}_rimage_0 "-"
++aux wait_for_sync $vg $lv1
++lvchange -y --writemostly $dev1 $vg/$lv1
++check lv_attr_bit health $vg/${lv1}_rimage_0 "w"
++
++vgremove -ff $vg
+diff --git a/tools/lvchange.c b/tools/lvchange.c
+index 250d7209b..964eb5179 100644
+--- a/tools/lvchange.c
++++ b/tools/lvchange.c
+@@ -821,6 +821,21 @@ static int _lvchange_writemostly(struct logical_volume 
*lv)
+               return 0;
+       }
+ 
++      /*
++       * Prohibit writebehind and writebehind during synchronization.
++       *
++       * FIXME: we can do better once we can distingush between
++       *        an initial sync after a linear -> raid1 upconversion
++       *        and any later additions of legs, requested resyncs
++       *        via lvchange or leg repairs/replacements.
++       */
++      if (!lv_raid_in_sync(lv)) {
++              log_error("Unable to change write%s on %s while it is not 
in-sync.",
++                        arg_is_set(cmd, writemostly_ARG) ? "mostly" : 
"behind",
++                        display_lvname(lv));
++              return 0;
++      }
++
+       if (arg_is_set(cmd, writebehind_ARG))
+               raid_seg->writebehind = arg_uint_value(cmd, writebehind_ARG, 0);
+ 
diff --git a/debian/patches/series b/debian/patches/series
index 6248d67ed..0d7b35c4e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -9,3 +9,4 @@
 0009-clvmd-openais-format.patch
 udev-md.patch
 systemd-pvscan-background.patch
+0012-lvchange-reject-writemostly-writebehind-on-raid1-dur.patch

unblock lvm2/2.02.168-2

-- System Information:
Debian Release: 9.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Reply via email to