Accepting request 730344 from Base:System
- Update lvm2.spec: make baselibs.conf to a common source. - Avoid creation of mixed-blocksize PV on LVM volume groups (bsc#1149408) + bug-1149408_Fix-rounding-writes-up-to-sector-size.patch + bug-1149408_vgcreate-vgextend-restrict-PVs-with-mixed-block-size.patch - Update lvm.conf files - add devices/allow_mixed_block_sizes item - Update to LVM2.2.03.05 - To drop lvm2-clvm and lvm2-cmirrord rpms (jsc#PM-1324) - Fix Out of date package (bsc#1111734) - Fix occasional slow shutdowns with kernel 5.0.0 and up (bsc#1137648) - Remove clvmd - Remove lvmlib (api) - Remove lvmetad - Drop patches that have been merged into upstream - bug-1114113_metadata-prevent-writing-beyond-metadata-area.patch - bug-1137296_pvremove-vgextend-fix-using-device-aliases-with-lvmetad.patch - bug-1135984_cache-support-no_discard_passdown.patch - Drop patches that have been nonexist/unsupport in upstream - bsc1080299-detect-clvm-properly.patch - bug-998893_make_pvscan_service_after_multipathd.patch - bug-978055_clvmd-try-to-refresh-device-cache-on-the-first-failu.patch - bug-950089_test-fix-lvm2-testsuite-build-error.patch - bug-1072624_test-lvmetad_dump-always-timed-out-when-using-nc.patch - tests-specify-python3-as-the-script-interpreter.patch - Update spec files - merge device-mapper, lvm2-lockd, lvm2 into one spec file - clvmd/lvmlib (api)/lvmetad had been removed, so delete related context in spec file - Update lvm.conf files - remove all lvmetad lines/keywords - add event_activation - remove fallback_to_lvm1 & related items - remove locking_type/fallback_to_clustered_locking/fallback_to_local_locking items - remove locking_library item - remove all special filter rules OBS-URL: https://build.opensuse.org/request/show/730344 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/lvm2?expand=0&rev=126
This commit is contained in:
commit
f1c7932246
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:24997e26dfc916151707c9da504d38d0473bec3481a8230b676bc079041bead6
|
||||
size 2373004
|
@ -1,17 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAABAgAGBQJbUMBzAAoJELkRJDHlCQOfksgQAKHvpM0f4Nt354cmY6N+ha7i
|
||||
ikSv6aYsFHuHYOHFKJLPJBcNaMs3oZxBtVN69ZuV0cdJ7oiwrQzQzy94wvcaBOZy
|
||||
tWRLVI+grVU7Fp4uyFwGe4kkxUSGK3/lQrhtI8j+drwGvKk7O0dg8k/ayb9N1do5
|
||||
hx86WsucXDl8EFxCSYGu6D8DaL+5zNhumIBXrjp5IbQunckw1/hRqstfMfs/q7dm
|
||||
7dLlrCWXuEL6AwHYvSI8BorO2vRX2iUBvovNneooGUnfz+c06VawhgmwMVA3j/Lk
|
||||
jOyT9ytVAgnI/yvMHKB7RUSbjCHqppvxg0K0Fs3ex2rca+GiSrtXoxsK83xVaqiS
|
||||
8J3amb46ItLsE+5XUFzsSfFCxAdzEGqdW+/YmgQNRQ0OXHlsg98hTD9zNbhNMIqj
|
||||
RtlPqzFKdIZfhgRAY3fw2TEAaKkuBG1+AeeJHLrPZFcDOXHyvJqoPYcMb3QeANCx
|
||||
RhrMNLvs4MKlhXUkeimBJZTKXSCCIwaqtH8rOtYYM9Ei50AQYZddUObVLBoQB01Y
|
||||
MxC87m1eZgIKipWTNfEXm41M4tLPebkaxT9+IBp38yVcZ1jeXxOk41EXtzcs3PII
|
||||
/SlUw66qokTgSyXFH+mptqxfB3Xkk8li5wv31yOiVY9MZQzt8fvz/veY5uEGxU/a
|
||||
1et7yfJMpeJYrMuhtCL4
|
||||
=kQvz
|
||||
-----END PGP SIGNATURE-----
|
3
LVM2.2.03.05.tgz
Normal file
3
LVM2.2.03.05.tgz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ca52815c999b20c6d25e3192f142f081b93d01f07b9d787e99664b169dba2700
|
||||
size 2427412
|
17
LVM2.2.03.05.tgz.asc
Normal file
17
LVM2.2.03.05.tgz.asc
Normal file
@ -0,0 +1,17 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAABAgAGBQJdBJ/2AAoJELkRJDHlCQOfLpcP/3eY1mo/MlhPwxsz23a8v7sW
|
||||
0NYZKqTC0N+xOc0lZ4kwDl1ru/b59T5gGwDinmXCqjP41fvT1PZlFklrsffyCI7i
|
||||
jy1QO/a06r+w8xTmdwHL08tuhkO6gh8+BKsBChYsJhdGrgBibNRO9HvIlU8LpLFs
|
||||
i96GXbjoZZ3irKxy+1OxCFer1Hd2ISbBBq/YHnGlA1h24awBsiL4YDNMxC+pIEiV
|
||||
nqlypDFqeNe29y/IRWrq8D3WxOm5YK40lzTi59blvl5OAIZLnhtRKm+roGTuoML5
|
||||
V/ZKbTYxr/LTclUS5cIkSxQEiJxNq0TIP8zVspgAroQFKx5JX8C40bzWEDTVnrsx
|
||||
3wfJWN0jPyBwPox8/QjqScE1MJ+5G8iUOxbf/SuIpp103eBJ4RR+HzaQeig7BgP/
|
||||
cpk80CZwKzlKTMYedmuAE4WK5igqncrdoW2AbtVvVQLUk7cp3tdLvxMyH2z+jv5D
|
||||
DCpWHqc5eB+sMmD4+Vjp6Mrg2ViSEMdAmorTX0TPrd5meos39Ged3SUZ5v0M7N0q
|
||||
Lhj2jT2oqPGXKp6/7HLGd4do7zBqX4oaJ1DcfhsEi2kEBIUYdE5o9qlqn22QacpJ
|
||||
N/waVKjEjmi1AiMiAaZAP/WuutH3UJmpdRZn1Qvd+Xlx1Iw0YbY/8S9NAtKazzFq
|
||||
iF8g3kZyRIcBfvq94k5q
|
||||
=NABD
|
||||
-----END PGP SIGNATURE-----
|
4
_multibuild
Normal file
4
_multibuild
Normal file
@ -0,0 +1,4 @@
|
||||
<multibuild>
|
||||
<package>devicemapper</package>
|
||||
<package>lockd</package>
|
||||
</multibuild>
|
@ -1,42 +0,0 @@
|
||||
Index: LVM2.2.02.178/configure
|
||||
===================================================================
|
||||
--- LVM2.2.02.178.orig/configure
|
||||
+++ LVM2.2.02.178/configure
|
||||
@@ -10888,8 +10888,6 @@ if [ `expr x"$CLVMD" : '.*corosync.*'` !
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
-if test "$CLVMD" != none; then
|
||||
-
|
||||
# Check whether --with-clvmd-pidfile was given.
|
||||
if test "${with_clvmd_pidfile+set}" = set; then :
|
||||
withval=$with_clvmd_pidfile; CLVMD_PIDFILE=$withval
|
||||
@@ -10902,8 +10900,6 @@ cat >>confdefs.h <<_ACEOF
|
||||
#define CLVMD_PIDFILE "$CLVMD_PIDFILE"
|
||||
_ACEOF
|
||||
|
||||
-fi
|
||||
-
|
||||
################################################################################
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build cluster mirror log daemon" >&5
|
||||
$as_echo_n "checking whether to build cluster mirror log daemon... " >&6; }
|
||||
Index: LVM2.2.02.178/configure.ac
|
||||
===================================================================
|
||||
--- LVM2.2.02.178.orig/configure.ac
|
||||
+++ LVM2.2.02.178/configure.ac
|
||||
@@ -959,7 +959,6 @@ fi
|
||||
|
||||
################################################################################
|
||||
dnl -- clvmd pidfile
|
||||
-if test "$CLVMD" != none; then
|
||||
AC_ARG_WITH(clvmd-pidfile,
|
||||
AC_HELP_STRING([--with-clvmd-pidfile=PATH],
|
||||
[clvmd pidfile [PID_DIR/clvmd.pid]]),
|
||||
@@ -967,7 +966,6 @@ if test "$CLVMD" != none; then
|
||||
CLVMD_PIDFILE="$DEFAULT_PID_DIR/clvmd.pid")
|
||||
AC_DEFINE_UNQUOTED(CLVMD_PIDFILE, ["$CLVMD_PIDFILE"],
|
||||
[Path to clvmd pidfile.])
|
||||
-fi
|
||||
|
||||
################################################################################
|
||||
dnl -- Build cluster mirror log daemon
|
@ -1,39 +0,0 @@
|
||||
From 6ff44e96eb804f9024bf3f606d207bd863f0e672 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Ren <zren@suse.com>
|
||||
Date: Wed, 13 Dec 2017 18:53:00 +0800
|
||||
Subject: [PATCH] test: lvmetad_dump always timed out when using nc
|
||||
|
||||
lvmetad_dump uses either "socat" or "nc" to communicate
|
||||
with lvmetad. But when using "nc" if "socat" is not
|
||||
available, nc will listen forever by default, causing the
|
||||
testcase timed out.
|
||||
|
||||
Signed-off-by: Eric Ren <zren@suse.com>
|
||||
---
|
||||
test/lib/aux.sh | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
|
||||
index 6bc7bd47e..4603c1504 100644
|
||||
--- a/test/lib/aux.sh
|
||||
+++ b/test/lib/aux.sh
|
||||
@@ -243,14 +243,14 @@ lvmetad_talk() {
|
||||
local use=nc
|
||||
if type -p socat >& /dev/null; then
|
||||
use=socat
|
||||
- elif echo | not nc -U "$TESTDIR/lvmetad.socket" ; then
|
||||
+ elif echo | not nc -w 1 -U "$TESTDIR/lvmetad.socket" ; then
|
||||
echo "WARNING: Neither socat nor nc -U seems to be available." 1>&2
|
||||
echo "## failed to contact lvmetad."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if test "$use" = nc ; then
|
||||
- nc -U "$TESTDIR/lvmetad.socket"
|
||||
+ nc -w 1 -U "$TESTDIR/lvmetad.socket"
|
||||
else
|
||||
socat "unix-connect:$TESTDIR/lvmetad.socket" -
|
||||
fi | tee -a lvmetad-talk.txt
|
||||
--
|
||||
2.13.6
|
||||
|
@ -1,336 +0,0 @@
|
||||
From ab27d5dc2a5c3bf23ab8fed438f1542015dc723d Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Mon, 29 Oct 2018 11:06:00 -0500
|
||||
Subject: [PATCH] metadata: prevent writing beyond metadata area
|
||||
|
||||
lvm uses a bcache block size of 128K. A bcache block
|
||||
at the end of the metadata area will overlap the PEs
|
||||
from which LVs are allocated. How much depends on
|
||||
alignments. When lvm reads and writes one of these
|
||||
bcache blocks to update VG metadata, it can also be
|
||||
reading and writing PEs that belong to an LV.
|
||||
|
||||
If these overlapping PEs are being written to by the
|
||||
LV user (e.g. filesystem) at the same time that lvm
|
||||
is modifying VG metadata in the overlapping bcache
|
||||
block, then the user's updates to the PEs can be lost.
|
||||
|
||||
This patch is a quick hack to prevent lvm from writing
|
||||
past the end of the metadata area.
|
||||
---
|
||||
lib/device/bcache.c | 79 +++++++++++++++++++++++++++++++++++++++++--
|
||||
lib/device/bcache.h | 3 ++
|
||||
lib/format_text/format-text.c | 10 ++++++
|
||||
lib/label/label.c | 35 ++++++++++++++++++-
|
||||
lib/label/label.h | 2 ++
|
||||
lib/metadata/mirror.c | 4 +++
|
||||
6 files changed, 130 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/lib/device/bcache.c b/lib/device/bcache.c
|
||||
index 531d83b10..62352563a 100644
|
||||
--- a/lib/device/bcache.c
|
||||
+++ b/lib/device/bcache.c
|
||||
@@ -156,6 +156,10 @@ static void _async_destroy(struct io_engine *ioe)
|
||||
dm_free(e);
|
||||
}
|
||||
|
||||
+static int _last_byte_fd;
|
||||
+static uint64_t _last_byte_offset;
|
||||
+static int _last_byte_sector_size;
|
||||
+
|
||||
static bool _async_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
sector_t sb, sector_t se, void *data, void *context)
|
||||
{
|
||||
@@ -163,12 +167,53 @@ static bool _async_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
struct iocb *cb_array[1];
|
||||
struct control_block *cb;
|
||||
struct async_engine *e = _to_async(ioe);
|
||||
+ sector_t offset;
|
||||
+ sector_t nbytes;
|
||||
+ sector_t limit_nbytes;
|
||||
+ sector_t extra_nbytes = 0;
|
||||
|
||||
if (((uintptr_t) data) & e->page_mask) {
|
||||
log_warn("misaligned data buffer");
|
||||
return false;
|
||||
}
|
||||
|
||||
+ offset = sb << SECTOR_SHIFT;
|
||||
+ nbytes = (se - sb) << SECTOR_SHIFT;
|
||||
+
|
||||
+ /*
|
||||
+ * If bcache block goes past where lvm wants to write, then clamp it.
|
||||
+ */
|
||||
+ if ((d == DIR_WRITE) && _last_byte_offset && (fd == _last_byte_fd)) {
|
||||
+ if (offset > _last_byte_offset) {
|
||||
+ log_error("Limit write at %llu len %llu beyond last byte %llu",
|
||||
+ (unsigned long long)offset,
|
||||
+ (unsigned long long)nbytes,
|
||||
+ (unsigned long long)_last_byte_offset);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (offset + nbytes > _last_byte_offset) {
|
||||
+ limit_nbytes = _last_byte_offset - offset;
|
||||
+ if (limit_nbytes % _last_byte_sector_size)
|
||||
+ extra_nbytes = _last_byte_sector_size - (limit_nbytes % _last_byte_sector_size);
|
||||
+
|
||||
+ if (extra_nbytes) {
|
||||
+ log_debug("Limit write at %llu len %llu to len %llu rounded to %llu",
|
||||
+ (unsigned long long)offset,
|
||||
+ (unsigned long long)nbytes,
|
||||
+ (unsigned long long)limit_nbytes,
|
||||
+ (unsigned long long)(limit_nbytes + extra_nbytes));
|
||||
+ nbytes = limit_nbytes + extra_nbytes;
|
||||
+ } else {
|
||||
+ log_debug("Limit write at %llu len %llu to len %llu",
|
||||
+ (unsigned long long)offset,
|
||||
+ (unsigned long long)nbytes,
|
||||
+ (unsigned long long)limit_nbytes);
|
||||
+ nbytes = limit_nbytes;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
cb = _cb_alloc(e->cbs, context);
|
||||
if (!cb) {
|
||||
log_warn("couldn't allocate control block");
|
||||
@@ -179,10 +224,22 @@ static bool _async_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
|
||||
cb->cb.aio_fildes = (int) fd;
|
||||
cb->cb.u.c.buf = data;
|
||||
- cb->cb.u.c.offset = sb << SECTOR_SHIFT;
|
||||
- cb->cb.u.c.nbytes = (se - sb) << SECTOR_SHIFT;
|
||||
+ cb->cb.u.c.offset = offset;
|
||||
+ cb->cb.u.c.nbytes = nbytes;
|
||||
cb->cb.aio_lio_opcode = (d == DIR_READ) ? IO_CMD_PREAD : IO_CMD_PWRITE;
|
||||
|
||||
+#if 0
|
||||
+ if (d == DIR_READ) {
|
||||
+ log_debug("io R off %llu bytes %llu",
|
||||
+ (unsigned long long)cb->cb.u.c.offset,
|
||||
+ (unsigned long long)cb->cb.u.c.nbytes);
|
||||
+ } else {
|
||||
+ log_debug("io W off %llu bytes %llu",
|
||||
+ (unsigned long long)cb->cb.u.c.offset,
|
||||
+ (unsigned long long)cb->cb.u.c.nbytes);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
cb_array[0] = &cb->cb;
|
||||
do {
|
||||
r = io_submit(e->aio_context, 1, cb_array);
|
||||
@@ -1153,3 +1210,21 @@ bool bcache_invalidate_fd(struct bcache *cache, int fd)
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
+void bcache_set_last_byte(struct bcache *cache, int fd, uint64_t offset, int sector_size)
|
||||
+{
|
||||
+ _last_byte_fd = fd;
|
||||
+ _last_byte_offset = offset;
|
||||
+ _last_byte_sector_size = sector_size;
|
||||
+ if (!sector_size)
|
||||
+ _last_byte_sector_size = 512;
|
||||
+}
|
||||
+
|
||||
+void bcache_unset_last_byte(struct bcache *cache, int fd)
|
||||
+{
|
||||
+ if (_last_byte_fd == fd) {
|
||||
+ _last_byte_fd = 0;
|
||||
+ _last_byte_offset = 0;
|
||||
+ _last_byte_sector_size = 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
diff --git a/lib/device/bcache.h b/lib/device/bcache.h
|
||||
index b0aebb49d..cb902ef36 100644
|
||||
--- a/lib/device/bcache.h
|
||||
+++ b/lib/device/bcache.h
|
||||
@@ -158,6 +158,9 @@ bool bcache_write_bytes(struct bcache *cache, int fd, uint64_t start, size_t len
|
||||
bool bcache_zero_bytes(struct bcache *cache, int fd, uint64_t start, size_t len);
|
||||
bool bcache_set_bytes(struct bcache *cache, int fd, uint64_t start, size_t len, uint8_t val);
|
||||
|
||||
+void bcache_set_last_byte(struct bcache *cache, int fd, uint64_t offset, int sector_size);
|
||||
+void bcache_unset_last_byte(struct bcache *cache, int fd);
|
||||
+
|
||||
//----------------------------------------------------------------
|
||||
|
||||
#endif
|
||||
diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c
|
||||
index 5c7b72f8e..4160ba810 100644
|
||||
--- a/lib/format_text/format-text.c
|
||||
+++ b/lib/format_text/format-text.c
|
||||
@@ -400,10 +400,14 @@ static int _raw_write_mda_header(const struct format_type *fmt,
|
||||
MDA_HEADER_SIZE -
|
||||
sizeof(mdah->checksum_xl)));
|
||||
|
||||
+ dev_set_last_byte(dev, start_byte + MDA_HEADER_SIZE);
|
||||
+
|
||||
if (!dev_write_bytes(dev, start_byte, MDA_HEADER_SIZE, mdah)) {
|
||||
+ dev_unset_last_byte(dev);
|
||||
log_error("Failed to write mda header to %s fd %d", dev_name(dev), dev->bcache_fd);
|
||||
return 0;
|
||||
}
|
||||
+ dev_unset_last_byte(dev);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -677,10 +681,13 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
|
||||
(unsigned long long)(mdac->rlocn.size - new_wrap),
|
||||
(unsigned long long)new_wrap);
|
||||
|
||||
+ dev_set_last_byte(mdac->area.dev, mdac->area.start + mdah->size);
|
||||
+
|
||||
if (!dev_write_bytes(mdac->area.dev, mdac->area.start + mdac->rlocn.offset,
|
||||
(size_t) (mdac->rlocn.size - new_wrap),
|
||||
fidtc->raw_metadata_buf)) {
|
||||
log_error("Failed to write metadata to %s fd %d", dev_name(mdac->area.dev), mdac->area.dev->bcache_fd);
|
||||
+ dev_unset_last_byte(mdac->area.dev);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -694,10 +701,13 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
|
||||
(size_t) new_wrap,
|
||||
fidtc->raw_metadata_buf + mdac->rlocn.size - new_wrap)) {
|
||||
log_error("Failed to write metadata wrap to %s fd %d", dev_name(mdac->area.dev), mdac->area.dev->bcache_fd);
|
||||
+ dev_unset_last_byte(mdac->area.dev);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
+ dev_unset_last_byte(mdac->area.dev);
|
||||
+
|
||||
mdac->rlocn.checksum = calc_crc(INITIAL_CRC, (uint8_t *)fidtc->raw_metadata_buf,
|
||||
(uint32_t) (mdac->rlocn.size -
|
||||
new_wrap));
|
||||
diff --git a/lib/label/label.c b/lib/label/label.c
|
||||
index e5aa2c129..5377847b3 100644
|
||||
--- a/lib/label/label.c
|
||||
+++ b/lib/label/label.c
|
||||
@@ -173,6 +173,7 @@ int label_write(struct device *dev, struct label *label)
|
||||
{
|
||||
char buf[LABEL_SIZE] __attribute__((aligned(8)));
|
||||
struct label_header *lh = (struct label_header *) buf;
|
||||
+ uint64_t offset;
|
||||
int r = 1;
|
||||
|
||||
if (!label->labeller->ops->write) {
|
||||
@@ -207,11 +208,17 @@ int label_write(struct device *dev, struct label *label)
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (!dev_write_bytes(dev, label->sector << SECTOR_SHIFT, LABEL_SIZE, buf)) {
|
||||
+ offset = label->sector << SECTOR_SHIFT;
|
||||
+
|
||||
+ dev_set_last_byte(dev, offset + LABEL_SIZE);
|
||||
+
|
||||
+ if (!dev_write_bytes(dev, offset, LABEL_SIZE, buf)) {
|
||||
log_debug_devs("Failed to write label to %s", dev_name(dev));
|
||||
r = 0;
|
||||
}
|
||||
|
||||
+ dev_unset_last_byte(dev);
|
||||
+
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -1354,9 +1361,12 @@ bool dev_write_zeros(struct device *dev, uint64_t start, size_t len)
|
||||
}
|
||||
}
|
||||
|
||||
+ dev_set_last_byte(dev, start + len);
|
||||
+
|
||||
if (!bcache_zero_bytes(scan_bcache, dev->bcache_fd, start, len)) {
|
||||
log_error("Error writing device %s at %llu length %u.",
|
||||
dev_name(dev), (unsigned long long)start, (uint32_t)len);
|
||||
+ dev_unset_last_byte(dev);
|
||||
label_scan_invalidate(dev);
|
||||
return false;
|
||||
}
|
||||
@@ -1364,9 +1374,11 @@ bool dev_write_zeros(struct device *dev, uint64_t start, size_t len)
|
||||
if (!bcache_flush(scan_bcache)) {
|
||||
log_error("Error writing device %s at %llu length %u.",
|
||||
dev_name(dev), (unsigned long long)start, (uint32_t)len);
|
||||
+ dev_unset_last_byte(dev);
|
||||
label_scan_invalidate(dev);
|
||||
return false;
|
||||
}
|
||||
+ dev_unset_last_byte(dev);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1400,9 +1412,12 @@ bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val)
|
||||
}
|
||||
}
|
||||
|
||||
+ dev_set_last_byte(dev, start + len);
|
||||
+
|
||||
if (!bcache_set_bytes(scan_bcache, dev->bcache_fd, start, len, val)) {
|
||||
log_error("Error writing device %s at %llu length %u.",
|
||||
dev_name(dev), (unsigned long long)start, (uint32_t)len);
|
||||
+ dev_unset_last_byte(dev);
|
||||
label_scan_invalidate(dev);
|
||||
return false;
|
||||
}
|
||||
@@ -1410,9 +1425,27 @@ bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val)
|
||||
if (!bcache_flush(scan_bcache)) {
|
||||
log_error("Error writing device %s at %llu length %u.",
|
||||
dev_name(dev), (unsigned long long)start, (uint32_t)len);
|
||||
+ dev_unset_last_byte(dev);
|
||||
label_scan_invalidate(dev);
|
||||
return false;
|
||||
}
|
||||
+
|
||||
+ dev_unset_last_byte(dev);
|
||||
return true;
|
||||
}
|
||||
|
||||
+void dev_set_last_byte(struct device *dev, uint64_t offset)
|
||||
+{
|
||||
+ unsigned int phys_block_size = 0;
|
||||
+ unsigned int block_size = 0;
|
||||
+
|
||||
+ dev_get_block_size(dev, &phys_block_size, &block_size);
|
||||
+
|
||||
+ bcache_set_last_byte(scan_bcache, dev->bcache_fd, offset, phys_block_size);
|
||||
+}
|
||||
+
|
||||
+void dev_unset_last_byte(struct device *dev)
|
||||
+{
|
||||
+ bcache_unset_last_byte(scan_bcache, dev->bcache_fd);
|
||||
+}
|
||||
+
|
||||
diff --git a/lib/label/label.h b/lib/label/label.h
|
||||
index 5b83bc734..ae6a4f5f4 100644
|
||||
--- a/lib/label/label.h
|
||||
+++ b/lib/label/label.h
|
||||
@@ -126,5 +126,7 @@ bool dev_read_bytes(struct device *dev, uint64_t start, size_t len, void *data);
|
||||
bool dev_write_bytes(struct device *dev, uint64_t start, size_t len, void *data);
|
||||
bool dev_write_zeros(struct device *dev, uint64_t start, size_t len);
|
||||
bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val);
|
||||
+void dev_set_last_byte(struct device *dev, uint64_t offset);
|
||||
+void dev_unset_last_byte(struct device *dev);
|
||||
|
||||
#endif
|
||||
diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c
|
||||
index c7d8a9e94..b1dcaa0e2 100644
|
||||
--- a/lib/metadata/mirror.c
|
||||
+++ b/lib/metadata/mirror.c
|
||||
@@ -302,10 +302,14 @@ static int _write_log_header(struct cmd_context *cmd, struct logical_volume *lv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ dev_set_last_byte(dev, sizeof(log_header));
|
||||
+
|
||||
if (!dev_write_bytes(dev, UINT64_C(0), sizeof(log_header), &log_header)) {
|
||||
+ dev_unset_last_byte(dev);
|
||||
log_error("Failed to write log header to %s.", name);
|
||||
return 0;
|
||||
}
|
||||
+ dev_unset_last_byte(dev);
|
||||
|
||||
label_scan_invalidate(dev);
|
||||
|
||||
--
|
||||
2.12.3
|
||||
|
@ -1,71 +0,0 @@
|
||||
From adf9bf80a32500b45b37eb24b98fa7c2c933019e Mon Sep 17 00:00:00 2001
|
||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||
Date: Wed, 5 Jun 2019 14:31:34 +0200
|
||||
Subject: [PATCH] cache: support no_discard_passdown
|
||||
|
||||
Recent kernel version from kernel commit:
|
||||
de7180ff908b2bc0342e832dbdaa9a5f1ecaa33a
|
||||
started to report in cache status line new flag:
|
||||
no_discard_passdown
|
||||
|
||||
Whenever lvm spots unknown status it reports:
|
||||
Unknown feature in status:
|
||||
|
||||
So add reconginzing this feature flag and also report this with
|
||||
|
||||
'lvs -o+kernel_discards'
|
||||
|
||||
When no_discard_passdown is found in status 'nopassdown' gets reported
|
||||
for this field (roughly matching what we report for thin-pools).
|
||||
---
|
||||
WHATS_NEW | 1 +
|
||||
WHATS_NEW_DM | 1 +
|
||||
lib/metadata/lv.c | 5 +++++
|
||||
libdm/libdevmapper.h | 1 +
|
||||
libdm/libdm-targets.c | 2 ++
|
||||
5 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
|
||||
index 2abe42db7..538b292a2 100644
|
||||
--- a/lib/metadata/lv.c
|
||||
+++ b/lib/metadata/lv.c
|
||||
@@ -245,6 +245,11 @@ char *lvseg_kernel_discards_dup_with_info_and_seg_status(struct dm_pool *mem, co
|
||||
return 0;
|
||||
}
|
||||
s = get_pool_discards_name(d);
|
||||
+ } else if (lvdm->seg_status.type == SEG_STATUS_CACHE) {
|
||||
+ if (lvdm->seg_status.cache->feature_flags &
|
||||
+ DM_CACHE_FEATURE_NO_DISCARD_PASSDOWN) {
|
||||
+ s = "nopassdown";
|
||||
+ }
|
||||
}
|
||||
|
||||
if (!(ret = dm_pool_strdup(mem, s))) {
|
||||
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
|
||||
index 19032d775..e885f52ae 100644
|
||||
--- a/libdm/libdevmapper.h
|
||||
+++ b/libdm/libdevmapper.h
|
||||
@@ -1893,6 +1893,7 @@ int dm_tree_node_add_raid_target_with_params_v2(struct dm_tree_node *node,
|
||||
#define DM_CACHE_FEATURE_WRITETHROUGH 0x00000002
|
||||
#define DM_CACHE_FEATURE_PASSTHROUGH 0x00000004
|
||||
#define DM_CACHE_FEATURE_METADATA2 0x00000008 /* cache v1.10 */
|
||||
+#define DM_CACHE_FEATURE_NO_DISCARD_PASSDOWN 0x00000010
|
||||
|
||||
struct dm_config_node;
|
||||
/*
|
||||
diff --git a/libdm/libdm-targets.c b/libdm/libdm-targets.c
|
||||
index 876678943..d0a8b4332 100644
|
||||
--- a/libdm/libdm-targets.c
|
||||
+++ b/libdm/libdm-targets.c
|
||||
@@ -296,6 +296,8 @@ int dm_get_status_cache(struct dm_pool *mem, const char *params,
|
||||
s->feature_flags |= DM_CACHE_FEATURE_PASSTHROUGH;
|
||||
else if (!strncmp(p, "metadata2 ", 10))
|
||||
s->feature_flags |= DM_CACHE_FEATURE_METADATA2;
|
||||
+ else if (!strncmp(p, "no_discard_passdown ", 20))
|
||||
+ s->feature_flags |= DM_CACHE_FEATURE_NO_DISCARD_PASSDOWN;
|
||||
else
|
||||
log_error("Unknown feature in status: %s", params);
|
||||
|
||||
--
|
||||
2.12.3
|
||||
|
@ -1,35 +0,0 @@
|
||||
From b13ebfa4c289a5bc6eb4f8ba26126db8e6d78296 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Wed, 26 Jun 2019 16:03:42 -0500
|
||||
Subject: [PATCH] pvremove/vgextend: fix using device aliases with lvmetad
|
||||
|
||||
These commands were looking for the requested device alias
|
||||
before dev_cache_scan had created the list of devs on the
|
||||
system, so they would fail and report the dev wasn't found.
|
||||
---
|
||||
tools/toollib.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/tools/toollib.c b/tools/toollib.c
|
||||
index 3221e5f1ca..1b01cccfa2 100644
|
||||
--- a/tools/toollib.c
|
||||
+++ b/tools/toollib.c
|
||||
@@ -5543,6 +5543,15 @@ int pvcreate_each_device(struct cmd_context *cmd,
|
||||
|
||||
lvmcache_label_scan(cmd);
|
||||
|
||||
+ /*
|
||||
+ * When using lvmetad, we want to do a dev cache scan here (if not done
|
||||
+ * already) so that the dev_cache_get just below will be able to find
|
||||
+ * device aliases. When not using lvmetad, the label_scan just above
|
||||
+ * has done dev_cache_scan, and this will not be run.
|
||||
+ */
|
||||
+ if (!dev_cache_has_scanned())
|
||||
+ dev_cache_scan();
|
||||
+
|
||||
/*
|
||||
* Translate arg names into struct device's.
|
||||
*/
|
||||
--
|
||||
2.21.0
|
||||
|
303
bug-1149408_Fix-rounding-writes-up-to-sector-size.patch
Normal file
303
bug-1149408_Fix-rounding-writes-up-to-sector-size.patch
Normal file
@ -0,0 +1,303 @@
|
||||
From 7f347698e3d09b15b4f9aed9c61239fda7b9e8c8 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Fri, 26 Jul 2019 14:21:08 -0500
|
||||
Subject: [PATCH] Fix rounding writes up to sector size
|
||||
|
||||
Do this at two levels, although one would be enough to
|
||||
fix the problem seen recently:
|
||||
|
||||
- Ignore any reported sector size other than 512 of 4096.
|
||||
If either sector size (physical or logical) is reported
|
||||
as 512, then use 512. If neither are reported as 512,
|
||||
and one or the other is reported as 4096, then use 4096.
|
||||
If neither is reported as either 512 or 4096, then use 512.
|
||||
|
||||
- When rounding up a limited write in bcache to be a multiple
|
||||
of the sector size, check that the resulting write size is
|
||||
not larger than the bcache block itself. (This shouldn't
|
||||
happen if the sector size is 512 or 4096.)
|
||||
---
|
||||
lib/device/bcache.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++--
|
||||
lib/device/dev-io.c | 52 +++++++++++++++++++++++++++++++
|
||||
lib/device/device.h | 8 +++--
|
||||
lib/label/label.c | 30 ++++++++++++++----
|
||||
4 files changed, 169 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/lib/device/bcache.c b/lib/device/bcache.c
|
||||
index 7b0935352..04fbf3521 100644
|
||||
--- a/lib/device/bcache.c
|
||||
+++ b/lib/device/bcache.c
|
||||
@@ -169,6 +169,7 @@ static bool _async_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
sector_t offset;
|
||||
sector_t nbytes;
|
||||
sector_t limit_nbytes;
|
||||
+ sector_t orig_nbytes;
|
||||
sector_t extra_nbytes = 0;
|
||||
|
||||
if (((uintptr_t) data) & e->page_mask) {
|
||||
@@ -191,11 +192,41 @@ static bool _async_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * If the bcache block offset+len goes beyond where lvm is
|
||||
+ * intending to write, then reduce the len being written
|
||||
+ * (which is the bcache block size) so we don't write past
|
||||
+ * the limit set by lvm. If after applying the limit, the
|
||||
+ * resulting size is not a multiple of the sector size (512
|
||||
+ * or 4096) then extend the reduced size to be a multiple of
|
||||
+ * the sector size (we don't want to write partial sectors.)
|
||||
+ */
|
||||
if (offset + nbytes > _last_byte_offset) {
|
||||
limit_nbytes = _last_byte_offset - offset;
|
||||
- if (limit_nbytes % _last_byte_sector_size)
|
||||
+
|
||||
+ if (limit_nbytes % _last_byte_sector_size) {
|
||||
extra_nbytes = _last_byte_sector_size - (limit_nbytes % _last_byte_sector_size);
|
||||
|
||||
+ /*
|
||||
+ * adding extra_nbytes to the reduced nbytes (limit_nbytes)
|
||||
+ * should make the final write size a multiple of the
|
||||
+ * sector size. This should never result in a final size
|
||||
+ * larger than the bcache block size (as long as the bcache
|
||||
+ * block size is a multiple of the sector size).
|
||||
+ */
|
||||
+ if (limit_nbytes + extra_nbytes > nbytes) {
|
||||
+ log_warn("Skip extending write at %llu len %llu limit %llu extra %llu sector_size %llu",
|
||||
+ (unsigned long long)offset,
|
||||
+ (unsigned long long)nbytes,
|
||||
+ (unsigned long long)limit_nbytes,
|
||||
+ (unsigned long long)extra_nbytes,
|
||||
+ (unsigned long long)_last_byte_sector_size);
|
||||
+ extra_nbytes = 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ orig_nbytes = nbytes;
|
||||
+
|
||||
if (extra_nbytes) {
|
||||
log_debug("Limit write at %llu len %llu to len %llu rounded to %llu",
|
||||
(unsigned long long)offset,
|
||||
@@ -210,6 +241,22 @@ static bool _async_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
(unsigned long long)limit_nbytes);
|
||||
nbytes = limit_nbytes;
|
||||
}
|
||||
+
|
||||
+ /*
|
||||
+ * This shouldn't happen, the reduced+extended
|
||||
+ * nbytes value should never be larger than the
|
||||
+ * bcache block size.
|
||||
+ */
|
||||
+ if (nbytes > orig_nbytes) {
|
||||
+ log_error("Invalid adjusted write at %llu len %llu adjusted %llu limit %llu extra %llu sector_size %llu",
|
||||
+ (unsigned long long)offset,
|
||||
+ (unsigned long long)orig_nbytes,
|
||||
+ (unsigned long long)nbytes,
|
||||
+ (unsigned long long)limit_nbytes,
|
||||
+ (unsigned long long)extra_nbytes,
|
||||
+ (unsigned long long)_last_byte_sector_size);
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -403,6 +450,7 @@ static bool _sync_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
uint64_t nbytes = len;
|
||||
sector_t limit_nbytes = 0;
|
||||
sector_t extra_nbytes = 0;
|
||||
+ sector_t orig_nbytes = 0;
|
||||
|
||||
if (offset > _last_byte_offset) {
|
||||
log_error("Limit write at %llu len %llu beyond last byte %llu",
|
||||
@@ -415,9 +463,30 @@ static bool _sync_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
|
||||
if (offset + nbytes > _last_byte_offset) {
|
||||
limit_nbytes = _last_byte_offset - offset;
|
||||
- if (limit_nbytes % _last_byte_sector_size)
|
||||
+
|
||||
+ if (limit_nbytes % _last_byte_sector_size) {
|
||||
extra_nbytes = _last_byte_sector_size - (limit_nbytes % _last_byte_sector_size);
|
||||
|
||||
+ /*
|
||||
+ * adding extra_nbytes to the reduced nbytes (limit_nbytes)
|
||||
+ * should make the final write size a multiple of the
|
||||
+ * sector size. This should never result in a final size
|
||||
+ * larger than the bcache block size (as long as the bcache
|
||||
+ * block size is a multiple of the sector size).
|
||||
+ */
|
||||
+ if (limit_nbytes + extra_nbytes > nbytes) {
|
||||
+ log_warn("Skip extending write at %llu len %llu limit %llu extra %llu sector_size %llu",
|
||||
+ (unsigned long long)offset,
|
||||
+ (unsigned long long)nbytes,
|
||||
+ (unsigned long long)limit_nbytes,
|
||||
+ (unsigned long long)extra_nbytes,
|
||||
+ (unsigned long long)_last_byte_sector_size);
|
||||
+ extra_nbytes = 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ orig_nbytes = nbytes;
|
||||
+
|
||||
if (extra_nbytes) {
|
||||
log_debug("Limit write at %llu len %llu to len %llu rounded to %llu",
|
||||
(unsigned long long)offset,
|
||||
@@ -432,6 +501,22 @@ static bool _sync_issue(struct io_engine *ioe, enum dir d, int fd,
|
||||
(unsigned long long)limit_nbytes);
|
||||
nbytes = limit_nbytes;
|
||||
}
|
||||
+
|
||||
+ /*
|
||||
+ * This shouldn't happen, the reduced+extended
|
||||
+ * nbytes value should never be larger than the
|
||||
+ * bcache block size.
|
||||
+ */
|
||||
+ if (nbytes > orig_nbytes) {
|
||||
+ log_error("Invalid adjusted write at %llu len %llu adjusted %llu limit %llu extra %llu sector_size %llu",
|
||||
+ (unsigned long long)offset,
|
||||
+ (unsigned long long)orig_nbytes,
|
||||
+ (unsigned long long)nbytes,
|
||||
+ (unsigned long long)limit_nbytes,
|
||||
+ (unsigned long long)extra_nbytes,
|
||||
+ (unsigned long long)_last_byte_sector_size);
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
|
||||
where = offset;
|
||||
diff --git a/lib/device/dev-io.c b/lib/device/dev-io.c
|
||||
index 3fe264755..5fa0b7a9e 100644
|
||||
--- a/lib/device/dev-io.c
|
||||
+++ b/lib/device/dev-io.c
|
||||
@@ -250,6 +250,58 @@ static int _dev_discard_blocks(struct device *dev, uint64_t offset_bytes, uint64
|
||||
return 1;
|
||||
}
|
||||
|
||||
+int dev_get_direct_block_sizes(struct device *dev, unsigned int *physical_block_size,
|
||||
+ unsigned int *logical_block_size)
|
||||
+{
|
||||
+ int fd = dev->bcache_fd;
|
||||
+ int do_close = 0;
|
||||
+ unsigned int pbs = 0;
|
||||
+ unsigned int lbs = 0;
|
||||
+
|
||||
+ if (dev->physical_block_size || dev->logical_block_size) {
|
||||
+ *physical_block_size = dev->physical_block_size;
|
||||
+ *logical_block_size = dev->logical_block_size;
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (fd <= 0) {
|
||||
+ if (!dev_open_readonly(dev))
|
||||
+ return 0;
|
||||
+ fd = dev_fd(dev);
|
||||
+ do_close = 1;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * BLKPBSZGET from kernel comment for blk_queue_physical_block_size:
|
||||
+ * "the lowest possible sector size that the hardware can operate on
|
||||
+ * without reverting to read-modify-write operations"
|
||||
+ */
|
||||
+ if (ioctl(fd, BLKPBSZGET, &pbs)) {
|
||||
+ stack;
|
||||
+ pbs = 0;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * BLKSSZGET from kernel comment for blk_queue_logical_block_size:
|
||||
+ * "the lowest possible block size that the storage device can address."
|
||||
+ */
|
||||
+ if (ioctl(fd, BLKSSZGET, &lbs)) {
|
||||
+ stack;
|
||||
+ lbs = 0;
|
||||
+ }
|
||||
+
|
||||
+ dev->physical_block_size = pbs;
|
||||
+ dev->logical_block_size = lbs;
|
||||
+
|
||||
+ *physical_block_size = pbs;
|
||||
+ *logical_block_size = lbs;
|
||||
+
|
||||
+ if (do_close && !dev_close_immediate(dev))
|
||||
+ stack;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
/*-----------------------------------------------------------------
|
||||
* Public functions
|
||||
*---------------------------------------------------------------*/
|
||||
diff --git a/lib/device/device.h b/lib/device/device.h
|
||||
index 30e1e79b3..bb65f841d 100644
|
||||
--- a/lib/device/device.h
|
||||
+++ b/lib/device/device.h
|
||||
@@ -67,8 +67,10 @@ struct device {
|
||||
/* private */
|
||||
int fd;
|
||||
int open_count;
|
||||
- int phys_block_size;
|
||||
- int block_size;
|
||||
+ int phys_block_size; /* From either BLKPBSZGET or BLKSSZGET, don't use */
|
||||
+ int block_size; /* From BLKBSZGET, returns bdev->bd_block_size, likely set by fs, probably don't use */
|
||||
+ int physical_block_size; /* From BLKPBSZGET: lowest possible sector size that the hardware can operate on without reverting to read-modify-write operations */
|
||||
+ int logical_block_size; /* From BLKSSZGET: lowest possible block size that the storage device can address */
|
||||
int read_ahead;
|
||||
int bcache_fd;
|
||||
uint32_t flags;
|
||||
@@ -132,6 +134,8 @@ void dev_size_seqno_inc(void);
|
||||
* All io should use these routines.
|
||||
*/
|
||||
int dev_get_block_size(struct device *dev, unsigned int *phys_block_size, unsigned int *block_size);
|
||||
+int dev_get_direct_block_sizes(struct device *dev, unsigned int *physical_block_size,
|
||||
+ unsigned int *logical_block_size);
|
||||
int dev_get_size(struct device *dev, uint64_t *size);
|
||||
int dev_get_read_ahead(struct device *dev, uint32_t *read_ahead);
|
||||
int dev_discard_blocks(struct device *dev, uint64_t offset_bytes, uint64_t size_bytes);
|
||||
diff --git a/lib/label/label.c b/lib/label/label.c
|
||||
index fb7ad1d56..5d8a0f51b 100644
|
||||
--- a/lib/label/label.c
|
||||
+++ b/lib/label/label.c
|
||||
@@ -1495,16 +1495,34 @@ bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val)
|
||||
|
||||
void dev_set_last_byte(struct device *dev, uint64_t offset)
|
||||
{
|
||||
- unsigned int phys_block_size = 0;
|
||||
- unsigned int block_size = 0;
|
||||
+ unsigned int physical_block_size = 0;
|
||||
+ unsigned int logical_block_size = 0;
|
||||
+ unsigned int bs;
|
||||
|
||||
- if (!dev_get_block_size(dev, &phys_block_size, &block_size)) {
|
||||
+ if (!dev_get_direct_block_sizes(dev, &physical_block_size, &logical_block_size)) {
|
||||
stack;
|
||||
- /* FIXME ASSERT or regular error testing is missing */
|
||||
- return;
|
||||
+ return; /* FIXME: error path ? */
|
||||
+ }
|
||||
+
|
||||
+ if ((physical_block_size == 512) && (logical_block_size == 512))
|
||||
+ bs = 512;
|
||||
+ else if ((physical_block_size == 4096) && (logical_block_size == 4096))
|
||||
+ bs = 4096;
|
||||
+ else if ((physical_block_size == 512) || (logical_block_size == 512)) {
|
||||
+ log_debug("Set last byte mixed block sizes physical %u logical %u using 512",
|
||||
+ physical_block_size, logical_block_size);
|
||||
+ bs = 512;
|
||||
+ } else if ((physical_block_size == 4096) || (logical_block_size == 4096)) {
|
||||
+ log_debug("Set last byte mixed block sizes physical %u logical %u using 4096",
|
||||
+ physical_block_size, logical_block_size);
|
||||
+ bs = 4096;
|
||||
+ } else {
|
||||
+ log_debug("Set last byte mixed block sizes physical %u logical %u using 512",
|
||||
+ physical_block_size, logical_block_size);
|
||||
+ bs = 512;
|
||||
}
|
||||
|
||||
- bcache_set_last_byte(scan_bcache, dev->bcache_fd, offset, phys_block_size);
|
||||
+ bcache_set_last_byte(scan_bcache, dev->bcache_fd, offset, bs);
|
||||
}
|
||||
|
||||
void dev_unset_last_byte(struct device *dev)
|
||||
--
|
||||
2.12.3
|
||||
|
@ -0,0 +1,223 @@
|
||||
From 0404539edb25e4a9d3456bb3e6b402aa2767af6b Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Thu, 1 Aug 2019 10:06:47 -0500
|
||||
Subject: [PATCH] vgcreate/vgextend: restrict PVs with mixed block sizes
|
||||
|
||||
Avoid having PVs with different logical block sizes in the same VG.
|
||||
This prevents LVs from having mixed block sizes, which can produce
|
||||
file system errors.
|
||||
|
||||
The new config setting devices/allow_mixed_block_sizes (default 0)
|
||||
can be changed to 1 to return to the unrestricted mode.
|
||||
---
|
||||
lib/commands/toolcontext.h | 1 +
|
||||
lib/config/config_settings.h | 5 ++++
|
||||
lib/metadata/metadata-exported.h | 1 +
|
||||
lib/metadata/metadata.c | 44 ++++++++++++++++++++++++++++++
|
||||
tools/lvmcmdline.c | 2 ++
|
||||
tools/toollib.c | 47 ++++++++++++++++++++++++++++++++
|
||||
tools/vgcreate.c | 2 ++
|
||||
7 files changed, 102 insertions(+)
|
||||
|
||||
diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h
|
||||
index 488752c8f..655d9f297 100644
|
||||
--- a/lib/commands/toolcontext.h
|
||||
+++ b/lib/commands/toolcontext.h
|
||||
@@ -153,6 +153,7 @@ struct cmd_context {
|
||||
unsigned include_shared_vgs:1; /* report/display cmds can reveal lockd VGs */
|
||||
unsigned include_active_foreign_vgs:1; /* cmd should process foreign VGs with active LVs */
|
||||
unsigned vg_read_print_access_error:1; /* print access errors from vg_read */
|
||||
+ unsigned allow_mixed_block_sizes:1;
|
||||
unsigned force_access_clustered:1;
|
||||
unsigned lockd_gl_disable:1;
|
||||
unsigned lockd_vg_disable:1;
|
||||
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
|
||||
index 527d5bd07..edfe4a31a 100644
|
||||
--- a/lib/config/config_settings.h
|
||||
+++ b/lib/config/config_settings.h
|
||||
@@ -502,6 +502,11 @@ cfg(devices_allow_changes_with_duplicate_pvs_CFG, "allow_changes_with_duplicate_
|
||||
"Enabling this setting allows the VG to be used as usual even with\n"
|
||||
"uncertain devices.\n")
|
||||
|
||||
+cfg(devices_allow_mixed_block_sizes_CFG, "allow_mixed_block_sizes", devices_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 3, 6), NULL, 0, NULL,
|
||||
+ "Allow PVs in the same VG with different logical block sizes.\n"
|
||||
+ "When allowed, the user is responsible to ensure that an LV is\n"
|
||||
+ "using PVs with matching block sizes when necessary.\n")
|
||||
+
|
||||
cfg_array(allocation_cling_tag_list_CFG, "cling_tag_list", allocation_CFG_SECTION, CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(2, 2, 77), NULL, 0, NULL,
|
||||
"Advise LVM which PVs to use when searching for new space.\n"
|
||||
"When searching for free space to extend an LV, the 'cling' allocation\n"
|
||||
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
|
||||
index f18587a73..e1767b78d 100644
|
||||
--- a/lib/metadata/metadata-exported.h
|
||||
+++ b/lib/metadata/metadata-exported.h
|
||||
@@ -623,6 +623,7 @@ struct pvcreate_params {
|
||||
unsigned is_remove : 1; /* is removing PVs, not creating */
|
||||
unsigned preserve_existing : 1;
|
||||
unsigned check_failed : 1;
|
||||
+ unsigned check_consistent_block_size : 1;
|
||||
};
|
||||
|
||||
struct lvresize_params {
|
||||
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
|
||||
index f19df3d1d..e55adc212 100644
|
||||
--- a/lib/metadata/metadata.c
|
||||
+++ b/lib/metadata/metadata.c
|
||||
@@ -751,12 +751,40 @@ int vg_extend_each_pv(struct volume_group *vg, struct pvcreate_params *pp)
|
||||
{
|
||||
struct pv_list *pvl;
|
||||
unsigned int max_phys_block_size = 0;
|
||||
+ unsigned int physical_block_size, logical_block_size;
|
||||
+ unsigned int prev_lbs = 0;
|
||||
+ int inconsistent_existing_lbs = 0;
|
||||
|
||||
log_debug_metadata("Adding PVs to VG %s.", vg->name);
|
||||
|
||||
if (vg_bad_status_bits(vg, RESIZEABLE_VG))
|
||||
return_0;
|
||||
|
||||
+ /*
|
||||
+ * Check if existing PVs have inconsistent block sizes.
|
||||
+ * If so, do not enforce new devices to be consistent.
|
||||
+ */
|
||||
+ dm_list_iterate_items(pvl, &vg->pvs) {
|
||||
+ logical_block_size = 0;
|
||||
+ physical_block_size = 0;
|
||||
+
|
||||
+ if (!dev_get_direct_block_sizes(pvl->pv->dev, &physical_block_size, &logical_block_size))
|
||||
+ continue;
|
||||
+
|
||||
+ if (!logical_block_size)
|
||||
+ continue;
|
||||
+
|
||||
+ if (!prev_lbs) {
|
||||
+ prev_lbs = logical_block_size;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (prev_lbs != logical_block_size) {
|
||||
+ inconsistent_existing_lbs = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
dm_list_iterate_items(pvl, &pp->pvs) {
|
||||
log_debug_metadata("Adding PV %s to VG %s.", pv_dev_name(pvl->pv), vg->name);
|
||||
|
||||
@@ -767,6 +795,22 @@ int vg_extend_each_pv(struct volume_group *vg, struct pvcreate_params *pp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ logical_block_size = 0;
|
||||
+ physical_block_size = 0;
|
||||
+
|
||||
+ if (!dev_get_direct_block_sizes(pvl->pv->dev, &physical_block_size, &logical_block_size))
|
||||
+ log_warn("WARNING: PV %s has unknown block size.", pv_dev_name(pvl->pv));
|
||||
+
|
||||
+ else if (prev_lbs && logical_block_size && (logical_block_size != prev_lbs)) {
|
||||
+ if (vg->cmd->allow_mixed_block_sizes || inconsistent_existing_lbs)
|
||||
+ log_debug("Devices have inconsistent block sizes (%u and %u)", prev_lbs, logical_block_size);
|
||||
+ else {
|
||||
+ log_error("Devices have inconsistent logical block sizes (%u and %u).",
|
||||
+ prev_lbs, logical_block_size);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (!add_pv_to_vg(vg, pv_dev_name(pvl->pv), pvl->pv, 0)) {
|
||||
log_error("PV %s cannot be added to VG %s.",
|
||||
pv_dev_name(pvl->pv), vg->name);
|
||||
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
|
||||
index 30f9d8133..7d29b6fab 100644
|
||||
--- a/tools/lvmcmdline.c
|
||||
+++ b/tools/lvmcmdline.c
|
||||
@@ -2319,6 +2319,8 @@ static int _get_current_settings(struct cmd_context *cmd)
|
||||
|
||||
cmd->scan_lvs = find_config_tree_bool(cmd, devices_scan_lvs_CFG, NULL);
|
||||
|
||||
+ cmd->allow_mixed_block_sizes = find_config_tree_bool(cmd, devices_allow_mixed_block_sizes_CFG, NULL);
|
||||
+
|
||||
/*
|
||||
* enable_hints is set to 1 if any commands are using hints.
|
||||
* use_hints is set to 1 if this command doesn't use the hints.
|
||||
diff --git a/tools/toollib.c b/tools/toollib.c
|
||||
index b2313f8ff..155528c4e 100644
|
||||
--- a/tools/toollib.c
|
||||
+++ b/tools/toollib.c
|
||||
@@ -5355,6 +5355,8 @@ int pvcreate_each_device(struct cmd_context *cmd,
|
||||
struct pv_list *vgpvl;
|
||||
struct device_list *devl;
|
||||
const char *pv_name;
|
||||
+ unsigned int physical_block_size, logical_block_size;
|
||||
+ unsigned int prev_pbs = 0, prev_lbs = 0;
|
||||
int must_use_all = (cmd->cname->flags & MUST_USE_ALL_ARGS);
|
||||
int found;
|
||||
unsigned i;
|
||||
@@ -5394,6 +5396,51 @@ int pvcreate_each_device(struct cmd_context *cmd,
|
||||
dm_list_iterate_items(pd, &pp->arg_devices)
|
||||
pd->dev = dev_cache_get(cmd, pd->name, cmd->filter);
|
||||
|
||||
+ /*
|
||||
+ * Check for consistent block sizes.
|
||||
+ */
|
||||
+ if (pp->check_consistent_block_size) {
|
||||
+ dm_list_iterate_items(pd, &pp->arg_devices) {
|
||||
+ if (!pd->dev)
|
||||
+ continue;
|
||||
+
|
||||
+ logical_block_size = 0;
|
||||
+ physical_block_size = 0;
|
||||
+
|
||||
+ if (!dev_get_direct_block_sizes(pd->dev, &physical_block_size, &logical_block_size)) {
|
||||
+ log_warn("WARNING: Unknown block size for device %s.", dev_name(pd->dev));
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (!logical_block_size) {
|
||||
+ log_warn("WARNING: Unknown logical_block_size for device %s.", dev_name(pd->dev));
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (!prev_lbs) {
|
||||
+ prev_lbs = logical_block_size;
|
||||
+ prev_pbs = physical_block_size;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (prev_lbs == logical_block_size) {
|
||||
+ /* Require lbs to match, just warn about unmatching pbs. */
|
||||
+ if (!cmd->allow_mixed_block_sizes && prev_pbs && physical_block_size &&
|
||||
+ (prev_pbs != physical_block_size))
|
||||
+ log_warn("WARNING: Devices have inconsistent physical block sizes (%u and %u).",
|
||||
+ prev_pbs, physical_block_size);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (!cmd->allow_mixed_block_sizes) {
|
||||
+ log_error("Devices have inconsistent logical block sizes (%u and %u).",
|
||||
+ prev_lbs, logical_block_size);
|
||||
+ log_print("See lvm.conf allow_mixed_block_sizes.");
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Use process_each_pv to search all existing PVs and devices.
|
||||
*
|
||||
diff --git a/tools/vgcreate.c b/tools/vgcreate.c
|
||||
index d594ec110..09b6a6c95 100644
|
||||
--- a/tools/vgcreate.c
|
||||
+++ b/tools/vgcreate.c
|
||||
@@ -47,6 +47,8 @@ int vgcreate(struct cmd_context *cmd, int argc, char **argv)
|
||||
/* Don't create a new PV on top of an existing PV like pvcreate does. */
|
||||
pp.preserve_existing = 1;
|
||||
|
||||
+ pp.check_consistent_block_size = 1;
|
||||
+
|
||||
if (!vgcreate_params_set_defaults(cmd, &vp_def, NULL))
|
||||
return EINVALID_CMD_LINE;
|
||||
vp_def.vg_name = vg_name;
|
||||
--
|
||||
2.21.0
|
||||
|
@ -1,44 +0,0 @@
|
||||
commit 0402acbbb9f8f6066a3f7899e8cc3ae72b84ee20
|
||||
Author: Zhilong Liu <zlliu@suse.com>
|
||||
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.
|
||||
|
||||
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 <zlliu@suse.com>
|
||||
|
||||
diff --git a/test/Makefile.in b/test/Makefile.in
|
||||
index f152868..f0845d7 100644
|
||||
--- a/test/Makefile.in
|
||||
+++ b/test/Makefile.in
|
||||
@@ -224,7 +224,7 @@ install: .tests-stamp lib/paths-installed
|
||||
$(INSTALL_DATA) api/*.sh $(DATADIR)/api
|
||||
$(INSTALL_DATA) unit/*.sh $(DATADIR)/unit
|
||||
$(INSTALL_DATA) lib/mke2fs.conf $(DATADIR)/lib
|
||||
- $(INSTALL_PROGRAM) api/*.{t,py} $(DATADIR)/api
|
||||
+ $(INSTALL_PROGRAM) api/*.py $(DATADIR)/api/
|
||||
$(INSTALL_PROGRAM) unit/unit-test $(DATADIR)/unit
|
||||
$(INSTALL_PROGRAM) dbus/*.py $(DATADIR)/dbus/
|
||||
$(INSTALL_DATA) lib/paths-installed $(DATADIR)/lib/paths
|
||||
@@ -244,6 +244,7 @@ install: .tests-stamp lib/paths-installed
|
||||
@cd $(EXECDIR) && for i in $(LIB_LINK_NOT); do \
|
||||
echo "$(LN_S) -f not $$i"; \
|
||||
$(LN_S) -f not $$i; done
|
||||
+ $(INSTALL_PROGRAM) api/*.t $(EXECDIR)
|
||||
$(INSTALL_PROGRAM) -D lib/runner $(bindir)/lvm2-testsuite
|
||||
|
||||
lib/should: lib/not
|
@ -1,92 +0,0 @@
|
||||
From 4f0681b1a296d88ac1dbdb26e46afed3285ad1bf Mon Sep 17 00:00:00 2001
|
||||
From: Eric Ren <zren@suse.com>
|
||||
Date: Tue, 23 May 2017 15:09:46 +0800
|
||||
Subject: [PATCH 09/10] clvmd: try to refresh device cache on the first failure
|
||||
|
||||
1. The original problem
|
||||
$ sudo lvchange -ay testvg/testlv
|
||||
Error locking on node 1302cf30: Volume group for uuid not found:
|
||||
qBKu65bSxfRq7gUf91NZuH4epLza4ifDieQJFd2to2WruVi5Brn7DxxsEgi5Zodw
|
||||
|
||||
2. This problem can be easily replicated
|
||||
a. Make clvmd running in cluster environment;
|
||||
b. Assume you have created LV "testlv" in local VG 'testvg' on
|
||||
a MD device 'md0';
|
||||
c. Make sure 'md0' is stopped, and not in the device cache by
|
||||
executing 'clvmd -R' or 'pvscan';
|
||||
d. Assemble 'md0' by issuing 'mdadm --assemble --scan --name md0';
|
||||
e. To activate 'testlv', you will see the 'Error locking' problem.
|
||||
|
||||
3. Analysis
|
||||
a. After step 2.d, 'pvscan --cache ...' is triggered by udev rules,
|
||||
notifying 'md0' is ready. But, pvscan exits very early because
|
||||
lvmetad is not being used, thus doesn't go through the lock manager.
|
||||
Therefore, clvmd isn't aware of this udev events. The device cache
|
||||
hasn't 'md0'.
|
||||
|
||||
b. In step 2.e, the client, 'lvchange -ay testvg/testlv' cmd, can find
|
||||
'testlv' correctly in the client metadata, because the device list
|
||||
is gathered by call chain:
|
||||
lvm_run_command()->init_filters()->persistent_filter_load()->dev_cache_scan().
|
||||
Then, it asks clvmd for "Locking VG V_testvg CR", which just drops
|
||||
the metadata in clmvd by call chain: do_lock_vg()->lvmcache_drop_metadata(),
|
||||
but the device cache is *not* refreshed.
|
||||
|
||||
c. Finally, clvmd fails to find the lvid in activation path:
|
||||
do_lock_lv()->do_activate_lv()->lv_info_by_lvid()
|
||||
|
||||
Apparently, the metadata DB is not complete without a complete device
|
||||
cache in clvmd. However, upstream say the pvscan tool intends to be
|
||||
only used with lvmetad, suggesting me not hacking there. So, we'd
|
||||
better fix this issue within clvmd code.
|
||||
|
||||
Sometimes, the device cache in clvmd could be out of date.
|
||||
"clvmd -R" is invented for this issue. However, to run
|
||||
"clvmd -R" manually is not convenient, because it's hard
|
||||
to predict when device change would happen.
|
||||
|
||||
This patch gives another try after refreshing the device
|
||||
cache. In normal, it doesn't cause any side-effect. In
|
||||
case of the issue above, it's worth a retry.
|
||||
|
||||
Signed-off-by: Eric Ren <zren@suse.com>
|
||||
---
|
||||
daemons/clvmd/lvm-functions.c | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c
|
||||
index 2446fd1..dcd3f9b 100644
|
||||
--- a/daemons/clvmd/lvm-functions.c
|
||||
+++ b/daemons/clvmd/lvm-functions.c
|
||||
@@ -509,11 +509,14 @@ const char *do_lock_query(char *resource)
|
||||
int do_lock_lv(unsigned char command, unsigned char lock_flags, char *resource)
|
||||
{
|
||||
int status = 0;
|
||||
+ int do_refresh = 0;
|
||||
|
||||
DEBUGLOG("do_lock_lv: resource '%s', cmd = %s, flags = %s, critical_section = %d\n",
|
||||
resource, decode_locking_cmd(command), decode_flags(lock_flags), critical_section());
|
||||
|
||||
- if (!cmd->initialized.config || config_files_changed(cmd)) {
|
||||
+again:
|
||||
+ if (!cmd->initialized.config || config_files_changed(cmd)
|
||||
+ || do_refresh) {
|
||||
/* Reinitialise various settings inc. logging, filters */
|
||||
if (do_refresh_cache()) {
|
||||
log_error("Updated config file invalid. Aborting.");
|
||||
@@ -579,6 +582,12 @@ int do_lock_lv(unsigned char command, unsigned char lock_flags, char *resource)
|
||||
init_test(0);
|
||||
pthread_mutex_unlock(&lvm_lock);
|
||||
|
||||
+ /* Try again in case device cache is stale */
|
||||
+ if (status == EIO && !do_refresh) {
|
||||
+ do_refresh = 1;
|
||||
+ goto again;
|
||||
+ }
|
||||
+
|
||||
DEBUGLOG("Command return is %d, critical_section is %d\n", status, critical_section());
|
||||
return status;
|
||||
}
|
||||
--
|
||||
2.10.2
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 0da043466ace27eb483114c87ce81feaf00ed682 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Ren <zren@suse.com>
|
||||
Date: Thu, 6 Apr 2017 11:22:30 +0800
|
||||
Subject: [PATCH] systemd service: make pvscan service after multipathd
|
||||
|
||||
bsc#998893
|
||||
Signed-off-by: Eric Ren <zren@suse.com>
|
||||
---
|
||||
scripts/lvm2_pvscan_systemd_red_hat@.service.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/scripts/lvm2_pvscan_systemd_red_hat@.service.in b/scripts/lvm2_pvscan_systemd_red_hat@.service.in
|
||||
index 03651d5..1d6342f 100644
|
||||
--- a/scripts/lvm2_pvscan_systemd_red_hat@.service.in
|
||||
+++ b/scripts/lvm2_pvscan_systemd_red_hat@.service.in
|
||||
@@ -4,7 +4,7 @@ Documentation=man:pvscan(8)
|
||||
StartLimitInterval=0
|
||||
BindsTo=dev-block-%i.device
|
||||
Requires=lvm2-lvmetad.socket
|
||||
-After=lvm2-lvmetad.socket lvm2-lvmetad.service
|
||||
+After=lvm2-lvmetad.socket lvm2-lvmetad.service multipathd.service
|
||||
Before=shutdown.target
|
||||
Conflicts=shutdown.target
|
||||
|
||||
--
|
||||
2.10.2
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,243 +0,0 @@
|
||||
#
|
||||
# spec file for package device-mapper
|
||||
#
|
||||
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
%define libname libdevmapper1_03
|
||||
%define libname_event libdevmapper-event1_03
|
||||
### COMMON-DEF-BEGIN ###
|
||||
%define lvm2_version 2.02.180
|
||||
%define device_mapper_version 1.02.149
|
||||
%define thin_provisioning_version 0.7.0
|
||||
### COMMON-DEF-END ###
|
||||
Name: device-mapper
|
||||
Version: %{device_mapper_version}
|
||||
Release: 0
|
||||
Summary: Device Mapper Tools
|
||||
License: GPL-2.0-or-later AND LGPL-2.1-or-later
|
||||
Group: System/Base
|
||||
Url: http://www.sourceware.org/lvm2/
|
||||
Source: ftp://sources.redhat.com/pub/lvm2/LVM2.%{lvm2_version}.tgz
|
||||
Source1: ftp://sources.redhat.com/pub/lvm2/LVM2.%{lvm2_version}.tgz.asc
|
||||
Source99: baselibs.conf
|
||||
# To detect modprobe during build
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: kmod-compat
|
||||
BuildRequires: libaio-devel
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: suse-module-tools
|
||||
BuildRequires: thin-provisioning-tools >= %{thin_provisioning_version}
|
||||
BuildRequires: pkgconfig(libselinux)
|
||||
BuildRequires: pkgconfig(libsepol)
|
||||
BuildRequires: pkgconfig(libudev)
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
Requires: thin-provisioning-tools >= %{thin_provisioning_version}
|
||||
Requires(post): coreutils
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
%{?systemd_requires}
|
||||
### COMMON-PATCH-BEGIN ###
|
||||
# Upstream patches
|
||||
Patch0001: bug-1114113_metadata-prevent-writing-beyond-metadata-area.patch
|
||||
Patch0002: bug-1122666_devices-drop-open-error-message.patch
|
||||
Patch0003: bug-1137296_pvremove-vgextend-fix-using-device-aliases-with-lvmetad.patch
|
||||
Patch0004: bug-1135984_cache-support-no_discard_passdown.patch
|
||||
|
||||
# SUSE patches: 1000+ for LVM
|
||||
# Never upstream
|
||||
Patch1001: cmirrord_remove_date_time_from_compilation.patch
|
||||
Patch1002: fate-309425_display-dm-name-for-lv-name.patch
|
||||
Patch1003: fate-31841_fsadm-add-support-for-btrfs.patch
|
||||
Patch1004: bug-935623_dmeventd-fix-dso-name-wrong-compare.patch
|
||||
Patch1005: bsc1080299-detect-clvm-properly.patch
|
||||
Patch1006: bug-998893_make_pvscan_service_after_multipathd.patch
|
||||
|
||||
#SUSE patches 2000+ for device mapper, udev rules
|
||||
Patch2001: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
### COMMON-PATCH-END ###
|
||||
|
||||
%description
|
||||
Programs and man pages for configuring and using the device mapper.
|
||||
|
||||
%prep
|
||||
%setup -q -n LVM2.%{lvm2_version}
|
||||
### COMMON-PREP-BEGIN ###
|
||||
%patch0001 -p1
|
||||
%patch0002 -p1
|
||||
%patch0003 -p1
|
||||
%patch0004 -p1
|
||||
%patch1001 -p1
|
||||
%patch1002 -p1
|
||||
%patch1003 -p1
|
||||
%patch1004 -p1
|
||||
%patch1005 -p1
|
||||
%patch1006 -p1
|
||||
%patch2001 -p1
|
||||
### COMMON-PREP-END ###
|
||||
|
||||
%build
|
||||
extra_opts=""
|
||||
|
||||
### COMMON-CONFIG-BEGIN ###
|
||||
export PATH=$PATH:/sbin:%{_prefix}/sbin
|
||||
# Why this messy fix here? someone released a wrong version...
|
||||
sed -ie "s/%{device_mapper_version}/1.03.01/g" VERSION_DM
|
||||
%configure \
|
||||
--enable-dmeventd \
|
||||
--enable-cmdlib \
|
||||
--enable-udev_rules \
|
||||
--enable-udev_sync \
|
||||
--with-udev-prefix="%{_prefix}/" \
|
||||
--enable-selinux \
|
||||
--enable-pkgconfig \
|
||||
--with-usrlibdir=%{_libdir} \
|
||||
--with-usrsbindir=%{_sbindir} \
|
||||
--with-default-dm-run-dir=/run \
|
||||
--with-tmpfilesdir=%{_tmpfilesdir} \
|
||||
--with-thin=internal \
|
||||
--with-device-gid=6 \
|
||||
--with-device-mode=0640 \
|
||||
--with-device-uid=0 \
|
||||
--with-dmeventd-path=%{_sbindir}/dmeventd \
|
||||
--with-thin-check=%{_sbindir}/thin_check \
|
||||
--with-thin-dump=%{_sbindir}/thin_dump \
|
||||
--with-thin-repair=%{_sbindir}/thin_repair \
|
||||
$extra_opts
|
||||
### COMMON-CONFIG-END ###
|
||||
|
||||
%make_build device-mapper
|
||||
|
||||
%install
|
||||
make DESTDIR=%{buildroot} \
|
||||
install_device-mapper \
|
||||
install_systemd_units install_systemd_generators
|
||||
|
||||
ln -s service %{buildroot}/%{_sbindir}/rcdm-event
|
||||
|
||||
# provide 1.02 compat links for the shared libraries
|
||||
# this is needed for various binary packages
|
||||
ln -s libdevmapper.so.1.03 %{buildroot}/%{_libdir}/libdevmapper.so.1.02
|
||||
ln -s libdevmapper-event.so.1.03 %{buildroot}/%{_libdir}/libdevmapper-event.so.1.02
|
||||
|
||||
# remove blkd, will be in lvm2 proper
|
||||
# without force on purpose to detect changes and fail if it happens
|
||||
rm %{buildroot}%{_sbindir}/blkdeactivate
|
||||
rm %{buildroot}%{_unitdir}/blk-availability.service
|
||||
rm %{buildroot}%{_unitdir}/lvm2-monitor.service
|
||||
rm %{buildroot}%{_mandir}/man8/blkdeactivate.8
|
||||
rm %{buildroot}%{_mandir}/man8/lvm2-activation-generator.8
|
||||
|
||||
# compat symlinks in /sbin remove with Leap 43
|
||||
mkdir -p %{buildroot}/sbin
|
||||
ln -s %{_sbindir}/dmsetup %{buildroot}/sbin/dmsetup
|
||||
|
||||
%pre
|
||||
%service_add_pre dm-event.service dm-event.socket
|
||||
|
||||
%post
|
||||
%service_add_post dm-event.service dm-event.socket
|
||||
%{?regenerate_initrd_post}
|
||||
|
||||
%posttrans
|
||||
%{?regenerate_initrd_posttrans}
|
||||
|
||||
%preun
|
||||
%service_del_preun dm-event.service dm-event.socket
|
||||
|
||||
%postun
|
||||
%service_del_postun dm-event.service dm-event.socket
|
||||
%{?regenerate_initrd_post}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%license COPYING COPYING.LIB
|
||||
%doc README
|
||||
%doc udev/12-dm-permissions.rules
|
||||
/sbin/dmsetup
|
||||
%{_sbindir}/dmsetup
|
||||
%{_sbindir}/dmeventd
|
||||
%{_sbindir}/dmstats
|
||||
%{_mandir}/man8/dmstats.8%{ext_man}
|
||||
%{_mandir}/man8/dmsetup.8%{ext_man}
|
||||
%{_mandir}/man8/dmeventd.8%{ext_man}
|
||||
%{_udevrulesdir}/10-dm.rules
|
||||
%{_udevrulesdir}/13-dm-disk.rules
|
||||
%{_udevrulesdir}/95-dm-notify.rules
|
||||
%{_unitdir}/dm-event.socket
|
||||
%{_sbindir}/rcdm-event
|
||||
%{_unitdir}/dm-event.service
|
||||
|
||||
%package -n %{libname}
|
||||
Summary: Library for device-mapper
|
||||
Group: System/Libraries
|
||||
Conflicts: %{name} < %{version}
|
||||
|
||||
%description -n %{libname}
|
||||
Device mapper main shared library
|
||||
|
||||
%files -n %{libname}
|
||||
%defattr(-,root,root)
|
||||
%{_libdir}/libdevmapper.so.1.03
|
||||
%{_libdir}/libdevmapper.so.1.02
|
||||
|
||||
%post -n %{libname}
|
||||
if [ -f /%{_lib}/libdevmapper.so.1.03 ]; then
|
||||
# Special migration - the library is now in %{_libdir}, but up to the point where
|
||||
# zypp removes the 'old' device-mapper package, the old library 'wins' the ldloader race
|
||||
# resulting in binaries asking for the newer version still getting the old one.
|
||||
# This in turn results in funny bugs like boo#1045396
|
||||
# Remove /%{_lib}/libdevmapper.so.1.02 - and the run ldconfig
|
||||
rm /%{_lib}/libdevmapper.so.1.03
|
||||
fi
|
||||
/sbin/ldconfig
|
||||
|
||||
%postun -n %{libname} -p /sbin/ldconfig
|
||||
|
||||
%package -n %{libname_event}
|
||||
Summary: Event library for device-mapper
|
||||
Group: System/Libraries
|
||||
Conflicts: %{name} < %{version}
|
||||
|
||||
%description -n %{libname_event}
|
||||
Device mapper event daemon shared library
|
||||
|
||||
%files -n %{libname_event}
|
||||
%defattr(-,root,root)
|
||||
%{_libdir}/libdevmapper-event.so.1.03
|
||||
%{_libdir}/libdevmapper-event.so.1.02
|
||||
|
||||
%post -n %{libname_event} -p /sbin/ldconfig
|
||||
%postun -n %{libname_event} -p /sbin/ldconfig
|
||||
|
||||
%package devel
|
||||
Summary: Development package for the device mapper
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: %{libname_event} = %{device_mapper_version}
|
||||
Requires: %{libname} = %{device_mapper_version}
|
||||
Requires: device-mapper = %{device_mapper_version}
|
||||
|
||||
%description devel
|
||||
Files needed for software development using the device mapper
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root)
|
||||
%{_libdir}/libdevmapper.so
|
||||
%{_libdir}/libdevmapper-event.so
|
||||
%{_includedir}/libdevmapper.h
|
||||
%{_includedir}/libdevmapper-event.h
|
||||
%{_libdir}/pkgconfig/devmapper.pc
|
||||
%{_libdir}/pkgconfig/devmapper-event.pc
|
||||
|
||||
%changelog
|
412
lvm.conf
412
lvm.conf
@ -21,7 +21,6 @@
|
||||
# N.B. Take care that each setting only appears once if uncommenting
|
||||
# example settings in this file.
|
||||
|
||||
#hello
|
||||
|
||||
# Configuration section config.
|
||||
# How LVM configuration settings are handled.
|
||||
@ -124,7 +123,6 @@ devices {
|
||||
# then the device is accepted. Be careful mixing 'a' and 'r' patterns,
|
||||
# as the combination might produce unexpected results (test changes.)
|
||||
# Run vgscan after changing the filter to regenerate the cache.
|
||||
# See the use_lvmetad comment for a special case regarding filters.
|
||||
#
|
||||
# Example
|
||||
# Accept every block device:
|
||||
@ -140,36 +138,20 @@ devices {
|
||||
#
|
||||
# This configuration option has an automatic default value.
|
||||
# filter = [ "a|.*/|" ]
|
||||
filter = [ "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "r|/dev/fd.*|", "r|/dev/cdrom|", "a/.*/" ]
|
||||
# Below filter was used in SUSE/openSUSE before lvm2-2.03. It conflicts
|
||||
# with lvm2-2.02.180+, so comment out in lvm2-2.03 release.
|
||||
# filter = [ "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "r|/dev/fd.*|", "r|/dev/cdrom|", "a/.*/" ]
|
||||
|
||||
# Configuration option devices/global_filter.
|
||||
# Limit the block devices that are used by LVM system components.
|
||||
# Because devices/filter may be overridden from the command line, it is
|
||||
# not suitable for system-wide device filtering, e.g. udev and lvmetad.
|
||||
# not suitable for system-wide device filtering, e.g. udev.
|
||||
# Use global_filter to hide devices from these LVM system components.
|
||||
# The syntax is the same as devices/filter. Devices rejected by
|
||||
# global_filter are not opened by LVM.
|
||||
# This configuration option has an automatic default value.
|
||||
# global_filter = [ "a|.*/|" ]
|
||||
|
||||
# Configuration option devices/cache_dir.
|
||||
# Directory in which to store the device cache file.
|
||||
# The results of filtering are cached on disk to avoid rescanning dud
|
||||
# devices (which can take a very long time). By default this cache is
|
||||
# stored in a file named .cache. It is safe to delete this file; the
|
||||
# tools regenerate it. If obtain_device_list_from_udev is enabled, the
|
||||
# list of devices is obtained from udev and any existing .cache file
|
||||
# is removed.
|
||||
cache_dir = "/etc/lvm/cache"
|
||||
|
||||
# Configuration option devices/cache_file_prefix.
|
||||
# A prefix used before the .cache file name. See devices/cache_dir.
|
||||
cache_file_prefix = ""
|
||||
|
||||
# Configuration option devices/write_cache_state.
|
||||
# Enable/disable writing the cache file. See devices/cache_dir.
|
||||
write_cache_state = 1
|
||||
|
||||
# Configuration option devices/types.
|
||||
# List of additional acceptable block device types.
|
||||
# These are of device type names from /proc/devices, followed by the
|
||||
@ -187,6 +169,10 @@ devices {
|
||||
# present on the system. sysfs must be part of the kernel and mounted.)
|
||||
sysfs_scan = 1
|
||||
|
||||
# Configuration option devices/scan_lvs.
|
||||
# Scan LVM LVs for layered PVs.
|
||||
scan_lvs = 0
|
||||
|
||||
# Configuration option devices/multipath_component_detection.
|
||||
# Ignore devices that are components of DM multipath devices.
|
||||
multipath_component_detection = 1
|
||||
@ -270,14 +256,6 @@ devices {
|
||||
# different way, making them a better choice for VG stacking.
|
||||
ignore_lvm_mirrors = 1
|
||||
|
||||
# Configuration option devices/disable_after_error_count.
|
||||
# Number of I/O errors after which a device is skipped.
|
||||
# During each LVM operation, errors received from each device are
|
||||
# counted. If the counter of a device exceeds the limit set here,
|
||||
# no further I/O is sent to that device for the remainder of the
|
||||
# operation. Setting this to 0 disables the counters altogether.
|
||||
disable_after_error_count = 0
|
||||
|
||||
# Configuration option devices/require_restorefile_with_uuid.
|
||||
# Allow use of pvcreate --uuid without requiring --restorefile.
|
||||
require_restorefile_with_uuid = 1
|
||||
@ -314,6 +292,12 @@ devices {
|
||||
# Enabling this setting allows the VG to be used as usual even with
|
||||
# uncertain devices.
|
||||
allow_changes_with_duplicate_pvs = 0
|
||||
|
||||
# Configuration option devices/allow_mixed_block_sizes.
|
||||
# Allow PVs in the same VG with different logical block sizes.
|
||||
# When allowed, the user is responsible to ensure that an LV is
|
||||
# using PVs with matching block sizes when necessary.
|
||||
allow_mixed_block_sizes = 0
|
||||
}
|
||||
|
||||
# Configuration section allocation.
|
||||
@ -348,7 +332,7 @@ allocation {
|
||||
maximise_cling = 1
|
||||
|
||||
# Configuration option allocation/use_blkid_wiping.
|
||||
# Use blkid to detect existing signatures on new PVs and LVs.
|
||||
# Use blkid to detect and erase existing signatures on new PVs and LVs.
|
||||
# The blkid library can detect more signatures than the native LVM
|
||||
# detection code, but may take longer. LVM needs to be compiled with
|
||||
# blkid wiping support for this setting to apply. LVM native detection
|
||||
@ -500,6 +484,154 @@ allocation {
|
||||
# Default physical extent size in KiB to use for new VGs.
|
||||
# This configuration option has an automatic default value.
|
||||
# physical_extent_size = 4096
|
||||
|
||||
# Configuration option allocation/vdo_use_compression.
|
||||
# Enables or disables compression when creating a VDO volume.
|
||||
# Compression may be disabled if necessary to maximize performance
|
||||
# or to speed processing of data that is unlikely to compress.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_use_compression = 1
|
||||
|
||||
# Configuration option allocation/vdo_use_deduplication.
|
||||
# Enables or disables deduplication when creating a VDO volume.
|
||||
# Deduplication may be disabled in instances where data is not expected
|
||||
# to have good deduplication rates but compression is still desired.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_use_deduplication = 1
|
||||
|
||||
# Configuration option allocation/vdo_use_metadata_hints.
|
||||
# Enables or disables whether VDO volume should tag its latency-critical
|
||||
# writes with the REQ_SYNC flag. Some device mapper targets such as dm-raid5
|
||||
# process writes with this flag at a higher priority.
|
||||
# Default is enabled.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_use_metadata_hints = 1
|
||||
|
||||
# Configuration option allocation/vdo_minimum_io_size.
|
||||
# The minimum IO size for VDO volume to accept, in bytes.
|
||||
# Valid values are 512 or 4096. The recommended and default value is 4096.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_minimum_io_size = 4096
|
||||
|
||||
# Configuration option allocation/vdo_block_map_cache_size_mb.
|
||||
# Specifies the amount of memory in MiB allocated for caching block map
|
||||
# pages for VDO volume. The value must be a multiple of 4096 and must be
|
||||
# at least 128MiB and less than 16TiB. The cache must be at least 16MiB
|
||||
# per logical thread. Note that there is a memory overhead of 15%.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_block_map_cache_size_mb = 128
|
||||
|
||||
# Configuration option allocation/vdo_block_map_period.
|
||||
# The speed with which the block map cache writes out modified block map pages.
|
||||
# A smaller era length is likely to reduce the amount time spent rebuilding,
|
||||
# at the cost of increased block map writes during normal operation.
|
||||
# The maximum and recommended value is 16380; the minimum value is 1.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_block_map_period = 16380
|
||||
|
||||
# Configuration option allocation/vdo_check_point_frequency.
|
||||
# The default check point frequency for VDO volume.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_check_point_frequency = 0
|
||||
|
||||
# Configuration option allocation/vdo_use_sparse_index.
|
||||
# Enables sparse indexing for VDO volume.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_use_sparse_index = 0
|
||||
|
||||
# Configuration option allocation/vdo_index_memory_size_mb.
|
||||
# Specifies the amount of index memory in MiB for VDO volume.
|
||||
# The value must be at least 256MiB and at most 1TiB.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_index_memory_size_mb = 256
|
||||
|
||||
# Configuration option allocation/vdo_slab_size_mb.
|
||||
# Specifies the size in MiB of the increment by which a VDO is grown.
|
||||
# Using a smaller size constrains the total maximum physical size
|
||||
# that can be accommodated. Must be a power of two between 128MiB and 32GiB.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_slab_size_mb = 2048
|
||||
|
||||
# Configuration option allocation/vdo_ack_threads.
|
||||
# Specifies the number of threads to use for acknowledging
|
||||
# completion of requested VDO I/O operations.
|
||||
# The value must be at in range [0..100].
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_ack_threads = 1
|
||||
|
||||
# Configuration option allocation/vdo_bio_threads.
|
||||
# Specifies the number of threads to use for submitting I/O
|
||||
# operations to the storage device of VDO volume.
|
||||
# The value must be in range [1..100]
|
||||
# Each additional thread after the first will use an additional 18MiB of RAM,
|
||||
# plus 1.12 MiB of RAM per megabyte of configured read cache size.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_bio_threads = 1
|
||||
|
||||
# Configuration option allocation/vdo_bio_rotation.
|
||||
# Specifies the number of I/O operations to enqueue for each bio-submission
|
||||
# thread before directing work to the next. The value must be in range [1..1024].
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_bio_rotation = 64
|
||||
|
||||
# Configuration option allocation/vdo_cpu_threads.
|
||||
# Specifies the number of threads to use for CPU-intensive work such as
|
||||
# hashing or compression for VDO volume. The value must be in range [1..100]
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_cpu_threads = 2
|
||||
|
||||
# Configuration option allocation/vdo_hash_zone_threads.
|
||||
# Specifies the number of threads across which to subdivide parts of the VDO
|
||||
# processing based on the hash value computed from the block data.
|
||||
# The value must be at in range [0..100].
|
||||
# vdo_hash_zone_threads, vdo_logical_threads and vdo_physical_threads must be
|
||||
# either all zero or all non-zero.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_hash_zone_threads = 1
|
||||
|
||||
# Configuration option allocation/vdo_logical_threads.
|
||||
# Specifies the number of threads across which to subdivide parts of the VDO
|
||||
# processing based on the hash value computed from the block data.
|
||||
# A logical thread count of 9 or more will require explicitly specifying
|
||||
# a sufficiently large block map cache size, as well.
|
||||
# The value must be in range [0..100].
|
||||
# vdo_hash_zone_threads, vdo_logical_threads and vdo_physical_threads must be
|
||||
# either all zero or all non-zero.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_logical_threads = 1
|
||||
|
||||
# Configuration option allocation/vdo_physical_threads.
|
||||
# Specifies the number of threads across which to subdivide parts of the VDO
|
||||
# processing based on physical block addresses.
|
||||
# Each additional thread after the first will use an additional 10MiB of RAM.
|
||||
# The value must be in range [0..16].
|
||||
# vdo_hash_zone_threads, vdo_logical_threads and vdo_physical_threads must be
|
||||
# either all zero or all non-zero.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_physical_threads = 1
|
||||
|
||||
# Configuration option allocation/vdo_write_policy.
|
||||
# Specifies the write policy:
|
||||
# auto - VDO will check the storage device and determine whether it supports flushes.
|
||||
# If it does, VDO will run in async mode, otherwise it will run in sync mode.
|
||||
# sync - Writes are acknowledged only after data is stably written.
|
||||
# This policy is not supported if the underlying storage is not also synchronous.
|
||||
# async - Writes are acknowledged after data has been cached for writing to stable storage.
|
||||
# Data which has not been flushed is not guaranteed to persist in this mode.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_write_policy = "auto"
|
||||
|
||||
# Configuration option allocation/vdo_max_discard.
|
||||
# Specified te maximum size of discard bio accepted, in 4096 byte blocks.
|
||||
# I/O requests to a VDO volume are normally split into 4096-byte blocks,
|
||||
# and processed up to 2048 at a time. However, discard requests to a VDO volume
|
||||
# can be automatically split to a larger size, up to <max discard> 4096-byte blocks
|
||||
# in a single bio, and are limited to 1500 at a time.
|
||||
# Increasing this value may provide better overall performance, at the cost of
|
||||
# increased latency for the individual discard requests.
|
||||
# The default and minimum is 1. The maximum is UINT_MAX / 4096.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_max_discard = 1
|
||||
}
|
||||
|
||||
# Configuration section log.
|
||||
@ -614,9 +746,9 @@ log {
|
||||
# Select log messages by class.
|
||||
# Some debugging messages are assigned to a class and only appear in
|
||||
# debug output if the class is listed here. Classes currently
|
||||
# available: memory, devices, activation, allocation, lvmetad,
|
||||
# available: memory, devices, io, activation, allocation,
|
||||
# metadata, cache, locking, lvmpolld. Use "all" to see everything.
|
||||
debug_classes = [ "memory", "devices", "activation", "allocation", "lvmetad", "metadata", "cache", "locking", "lvmpolld", "dbus" ]
|
||||
debug_classes = [ "memory", "devices", "io", "activation", "allocation", "metadata", "cache", "locking", "lvmpolld", "dbus" ]
|
||||
}
|
||||
|
||||
# Configuration section backup.
|
||||
@ -704,32 +836,6 @@ global {
|
||||
# the error messages.
|
||||
activation = 1
|
||||
|
||||
# Configuration option global/fallback_to_lvm1.
|
||||
# Try running LVM1 tools if LVM cannot communicate with DM.
|
||||
# This option only applies to 2.4 kernels and is provided to help
|
||||
# switch between device-mapper kernels and LVM1 kernels. The LVM1
|
||||
# tools need to be installed with .lvm1 suffices, e.g. vgscan.lvm1.
|
||||
# They will stop working once the lvm2 on-disk metadata format is used.
|
||||
# This configuration option has an automatic default value.
|
||||
# fallback_to_lvm1 = 1
|
||||
|
||||
# Configuration option global/format.
|
||||
# The default metadata format that commands should use.
|
||||
# The -M 1|2 option overrides this setting.
|
||||
#
|
||||
# Accepted values:
|
||||
# lvm1
|
||||
# lvm2
|
||||
#
|
||||
# This configuration option has an automatic default value.
|
||||
# format = "lvm2"
|
||||
|
||||
# Configuration option global/format_libraries.
|
||||
# Shared libraries that process different metadata formats.
|
||||
# If support for LVM1 metadata was compiled as a shared library use
|
||||
# format_libraries = "liblvm2format1.so"
|
||||
# This configuration option does not have a default value defined.
|
||||
|
||||
# Configuration option global/segment_libraries.
|
||||
# This configuration option does not have a default value defined.
|
||||
|
||||
@ -742,57 +848,10 @@ global {
|
||||
# Location of /etc system configuration directory.
|
||||
etc = "/etc"
|
||||
|
||||
# Configuration option global/locking_type.
|
||||
# Type of locking to use.
|
||||
#
|
||||
# Accepted values:
|
||||
# 0
|
||||
# Turns off locking. Warning: this risks metadata corruption if
|
||||
# commands run concurrently.
|
||||
# 1
|
||||
# LVM uses local file-based locking, the standard mode.
|
||||
# 2
|
||||
# LVM uses the external shared library locking_library.
|
||||
# 3
|
||||
# LVM uses built-in clustered locking with clvmd.
|
||||
# This is incompatible with lvmetad. If use_lvmetad is enabled,
|
||||
# LVM prints a warning and disables lvmetad use.
|
||||
# 4
|
||||
# LVM uses read-only locking which forbids any operations that
|
||||
# might change metadata.
|
||||
# 5
|
||||
# Offers dummy locking for tools that do not need any locks.
|
||||
# You should not need to set this directly; the tools will select
|
||||
# when to use it instead of the configured locking_type.
|
||||
# Do not use lvmetad or the kernel device-mapper driver with this
|
||||
# locking type. It is used by the --readonly option that offers
|
||||
# read-only access to Volume Group metadata that cannot be locked
|
||||
# safely because it belongs to an inaccessible domain and might be
|
||||
# in use, for example a virtual machine image or a disk that is
|
||||
# shared by a clustered machine.
|
||||
#
|
||||
locking_type = 1
|
||||
|
||||
# Configuration option global/wait_for_locks.
|
||||
# When disabled, fail if a lock request would block.
|
||||
wait_for_locks = 1
|
||||
|
||||
# Configuration option global/fallback_to_clustered_locking.
|
||||
# Attempt to use built-in cluster locking if locking_type 2 fails.
|
||||
# If using external locking (type 2) and initialisation fails, with
|
||||
# this enabled, an attempt will be made to use the built-in clustered
|
||||
# locking. Disable this if using a customised locking_library.
|
||||
fallback_to_clustered_locking = 1
|
||||
|
||||
# Configuration option global/fallback_to_local_locking.
|
||||
# Use locking_type 1 (local) if locking_type 2 or 3 fail.
|
||||
# If an attempt to initialise type 2 or type 3 locking failed, perhaps
|
||||
# because cluster components such as clvmd are not running, with this
|
||||
# enabled, an attempt will be made to use local file-based locking
|
||||
# (type 1). If this succeeds, only commands against local VGs will
|
||||
# proceed. VGs marked as clustered will be ignored.
|
||||
fallback_to_local_locking = 1
|
||||
|
||||
# Configuration option global/locking_dir.
|
||||
# Directory to use for LVM command file locks.
|
||||
# Local non-LV directory that holds file-based locks while commands are
|
||||
@ -813,24 +872,12 @@ global {
|
||||
# Search this directory first for shared libraries.
|
||||
# This configuration option does not have a default value defined.
|
||||
|
||||
# Configuration option global/locking_library.
|
||||
# The external locking library to use for locking_type 2.
|
||||
# This configuration option has an automatic default value.
|
||||
# locking_library = "liblvm2clusterlock.so"
|
||||
|
||||
# Configuration option global/abort_on_internal_errors.
|
||||
# Abort a command that encounters an internal error.
|
||||
# Treat any internal errors as fatal errors, aborting the process that
|
||||
# encountered the internal error. Please only enable for debugging.
|
||||
abort_on_internal_errors = 0
|
||||
|
||||
# Configuration option global/detect_internal_vg_cache_corruption.
|
||||
# Internal verification of VG structures.
|
||||
# Check if CRC matches when a parsed VG is used multiple times. This
|
||||
# is useful to catch unexpected changes to cached VG structures.
|
||||
# Please only enable for debugging.
|
||||
detect_internal_vg_cache_corruption = 0
|
||||
|
||||
# Configuration option global/metadata_read_only.
|
||||
# No operations that change on-disk metadata are permitted.
|
||||
# Additionally, read-only commands that encounter metadata in need of
|
||||
@ -865,6 +912,17 @@ global {
|
||||
#
|
||||
mirror_segtype_default = "raid1"
|
||||
|
||||
# Configuration option global/support_mirrored_mirror_log.
|
||||
# Configuration option global/support_mirrored_mirror_log.
|
||||
# Enable mirrored 'mirror' log type for testing.
|
||||
#
|
||||
# This type is deprecated to create or convert to but can
|
||||
# be enabled to test that activation of existing mirrored
|
||||
# logs and conversion to disk/core works.
|
||||
#
|
||||
# Not supported for regular operation!
|
||||
support_mirrored_mirror_log = 0
|
||||
|
||||
# Configuration option global/raid10_segtype_default.
|
||||
# The segment type used by the -i -m combination.
|
||||
# The --type raid10|mirror option overrides this setting.
|
||||
@ -913,41 +971,20 @@ global {
|
||||
# This configuration option has an automatic default value.
|
||||
# lvdisplay_shows_full_device_path = 0
|
||||
|
||||
# Configuration option global/use_lvmetad.
|
||||
# Use lvmetad to cache metadata and reduce disk scanning.
|
||||
# When enabled (and running), lvmetad provides LVM commands with VG
|
||||
# metadata and PV state. LVM commands then avoid reading this
|
||||
# information from disks which can be slow. When disabled (or not
|
||||
# running), LVM commands fall back to scanning disks to obtain VG
|
||||
# metadata. lvmetad is kept updated via udev rules which must be set
|
||||
# up for LVM to work correctly. (The udev rules should be installed
|
||||
# by default.) Without a proper udev setup, changes in the system's
|
||||
# block device configuration will be unknown to LVM, and ignored
|
||||
# until a manual 'pvscan --cache' is run. If lvmetad was running
|
||||
# while use_lvmetad was disabled, it must be stopped, use_lvmetad
|
||||
# enabled, and then started. When using lvmetad, LV activation is
|
||||
# switched to an automatic, event-based mode. In this mode, LVs are
|
||||
# activated based on incoming udev events that inform lvmetad when
|
||||
# PVs appear on the system. When a VG is complete (all PVs present),
|
||||
# it is auto-activated. The auto_activation_volume_list setting
|
||||
# controls which LVs are auto-activated (all by default.)
|
||||
# When lvmetad is updated (automatically by udev events, or directly
|
||||
# by pvscan --cache), devices/filter is ignored and all devices are
|
||||
# scanned by default. lvmetad always keeps unfiltered information
|
||||
# which is provided to LVM commands. Each LVM command then filters
|
||||
# based on devices/filter. This does not apply to other, non-regexp,
|
||||
# filtering settings: component filters such as multipath and MD
|
||||
# are checked during pvscan --cache. To filter a device and prevent
|
||||
# scanning from the LVM system entirely, including lvmetad, use
|
||||
# devices/global_filter.
|
||||
use_lvmetad = 1
|
||||
# Configuration option global/event_activation.
|
||||
# Activate LVs based on system-generated device events.
|
||||
# When a device appears on the system, a system-generated event runs
|
||||
# the pvscan command to activate LVs if the new PV completes the VG.
|
||||
# Use auto_activation_volume_list to select which LVs should be
|
||||
# activated from these events (the default is all.)
|
||||
# When event_activation is disabled, the system will generally run
|
||||
# a direct activation command to activate LVs in complete VGs.
|
||||
event_activation = 1
|
||||
|
||||
# Configuration option global/lvmetad_update_wait_time.
|
||||
# Number of seconds a command will wait for lvmetad update to finish.
|
||||
# After waiting for this period, a command will not use lvmetad, and
|
||||
# will revert to disk scanning.
|
||||
# Configuration option global/use_aio.
|
||||
# Use async I/O when reading and writing devices.
|
||||
# This configuration option has an automatic default value.
|
||||
# lvmetad_update_wait_time = 10
|
||||
# use_aio = 1
|
||||
|
||||
# Configuration option global/use_lvmlockd.
|
||||
# Use lvmlockd for locking among hosts using LVM on shared storage.
|
||||
@ -1073,6 +1110,17 @@ global {
|
||||
# This configuration option has an automatic default value.
|
||||
# cache_repair_options = [ "" ]
|
||||
|
||||
# Configuration option global/vdo_format_executable.
|
||||
# The full path to the vdoformat command.
|
||||
# LVM uses this command to initial data volume for VDO type logical volume
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_format_executable = "/usr/bin/vdoformat"
|
||||
|
||||
# Configuration option global/vdo_format_options.
|
||||
# List of options passed added to standard vdoformat command.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_format_options = [ "" ]
|
||||
|
||||
# Configuration option global/fsadm_executable.
|
||||
# The full path to the fsadm command.
|
||||
# LVM uses this command to help with lvresize -r operations.
|
||||
@ -1446,6 +1494,33 @@ activation {
|
||||
#
|
||||
thin_pool_autoextend_percent = 20
|
||||
|
||||
# Configuration option activation/vdo_pool_autoextend_threshold.
|
||||
# Auto-extend a VDO pool when its usage exceeds this percent.
|
||||
# Setting this to 100 disables automatic extension.
|
||||
# The minimum value is 50 (a smaller value is treated as 50.)
|
||||
# Also see vdo_pool_autoextend_percent.
|
||||
# Automatic extension requires dmeventd to be monitoring the LV.
|
||||
#
|
||||
# Example
|
||||
# Using 70% autoextend threshold and 20% autoextend size, when a 10G
|
||||
# VDO pool exceeds 7G, it is extended to 12G, and when it exceeds
|
||||
# 8.4G, it is extended to 14.4G:
|
||||
# vdo_pool_autoextend_threshold = 70
|
||||
#
|
||||
vdo_pool_autoextend_threshold = 100
|
||||
|
||||
# Configuration option activation/vdo_pool_autoextend_percent.
|
||||
# Auto-extending a VDO pool adds this percent extra space.
|
||||
# The amount of additional space added to a VDO pool is this
|
||||
# percent of its current size.
|
||||
#
|
||||
# Example
|
||||
# Using 70% autoextend threshold and 20% autoextend size, when a 10G
|
||||
# VDO pool exceeds 7G, it is extended to 12G, and when it exceeds
|
||||
# 8.4G, it is extended to 14.4G:
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_pool_autoextend_percent = 20
|
||||
|
||||
# Configuration option activation/mlock_filter.
|
||||
# Do not mlock these memory areas.
|
||||
# While activating devices, I/O to devices being (re)configured is
|
||||
@ -1612,24 +1687,6 @@ activation {
|
||||
# This configuration option is advanced.
|
||||
# This configuration option has an automatic default value.
|
||||
# stripesize = 64
|
||||
|
||||
# Configuration option metadata/dirs.
|
||||
# Directories holding live copies of text format metadata.
|
||||
# These directories must not be on logical volumes!
|
||||
# It's possible to use LVM with a couple of directories here,
|
||||
# preferably on different (non-LV) filesystems, and with no other
|
||||
# on-disk metadata (pvmetadatacopies = 0). Or this can be in addition
|
||||
# to on-disk metadata areas. The feature was originally added to
|
||||
# simplify testing and is not supported under low memory situations -
|
||||
# the machine could lock up. Never edit any files in these directories
|
||||
# by hand unless you are absolutely sure you know what you are doing!
|
||||
# Use the supplied toolset to make changes (e.g. vgcfgrestore).
|
||||
#
|
||||
# Example
|
||||
# dirs = [ "/etc/lvm/metadata", "/mnt/disk2/lvm/metadata2" ]
|
||||
#
|
||||
# This configuration option is advanced.
|
||||
# This configuration option does not have a default value defined.
|
||||
# }
|
||||
|
||||
# Configuration section report.
|
||||
@ -2080,6 +2137,23 @@ dmeventd {
|
||||
# This configuration option has an automatic default value.
|
||||
# thin_command = "lvm lvextend --use-policies"
|
||||
|
||||
# Configuration option dmeventd/vdo_library.
|
||||
# The library dmeventd uses when monitoring a VDO pool device.
|
||||
# libdevmapper-event-lvm2vdo.so monitors the filling of a pool
|
||||
# and emits a warning through syslog when the usage exceeds 80%. The
|
||||
# warning is repeated when 85%, 90% and 95% of the pool is filled.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_library = "libdevmapper-event-lvm2vdo.so"
|
||||
|
||||
# Configuration option dmeventd/vdo_command.
|
||||
# The plugin runs command with each 5% increment when VDO pool volume
|
||||
# gets above 50%.
|
||||
# Command which starts with 'lvm ' prefix is internal lvm command.
|
||||
# You can write your own handler to customise behaviour in more details.
|
||||
# User handler is specified with the full path starting with '/'.
|
||||
# This configuration option has an automatic default value.
|
||||
# vdo_command = "lvm lvextend --use-policies"
|
||||
|
||||
# Configuration option dmeventd/executable.
|
||||
# The full path to the dmeventd binary.
|
||||
# This configuration option has an automatic default value.
|
||||
|
2204
lvm2-clvm.changes
2204
lvm2-clvm.changes
File diff suppressed because it is too large
Load Diff
248
lvm2-clvm.spec
248
lvm2-clvm.spec
@ -1,248 +0,0 @@
|
||||
#
|
||||
# spec file for package lvm2-clvm
|
||||
#
|
||||
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
%define _supportsanlock 0
|
||||
|
||||
%define dlm_version 3.99.1
|
||||
%if 0%{_supportsanlock} == 1
|
||||
%define sanlock_version 3.3.0
|
||||
%endif
|
||||
|
||||
### COMMON-DEF-BEGIN ###
|
||||
%define lvm2_version 2.02.180
|
||||
%define device_mapper_version 1.02.149
|
||||
%define thin_provisioning_version 0.7.0
|
||||
### COMMON-DEF-END ###
|
||||
Name: lvm2-clvm
|
||||
Version: %{lvm2_version}
|
||||
Release: 0
|
||||
Summary: Clustered LVM2
|
||||
License: GPL-2.0-or-later AND LGPL-2.1-or-later
|
||||
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
|
||||
# To detect modprobe during build
|
||||
BuildRequires: kmod-compat
|
||||
BuildRequires: libaio-devel
|
||||
BuildRequires: libcorosync-devel
|
||||
BuildRequires: libdlm-devel >= %{dlm_version}
|
||||
BuildRequires: pkgconfig
|
||||
%if 0%{_supportsanlock} == 1
|
||||
BuildRequires: sanlock-devel >= %{sanlock_version}
|
||||
%endif
|
||||
BuildRequires: thin-provisioning-tools >= %{thin_provisioning_version}
|
||||
BuildRequires: pkgconfig(blkid)
|
||||
BuildRequires: pkgconfig(devmapper)
|
||||
BuildRequires: pkgconfig(libudev)
|
||||
Requires: corosync
|
||||
Requires: device-mapper >= %{device_mapper_version}
|
||||
Requires: lvm2 = %{version}
|
||||
Requires: lvm2-cmirrord
|
||||
Obsoletes: cmirrord < %{version}
|
||||
Provides: cmirrord = %{version}
|
||||
### COMMON-PATCH-BEGIN ###
|
||||
# Upstream patches
|
||||
Patch0001: bug-1114113_metadata-prevent-writing-beyond-metadata-area.patch
|
||||
Patch0002: bug-1122666_devices-drop-open-error-message.patch
|
||||
Patch0003: bug-1137296_pvremove-vgextend-fix-using-device-aliases-with-lvmetad.patch
|
||||
Patch0004: bug-1135984_cache-support-no_discard_passdown.patch
|
||||
|
||||
# SUSE patches: 1000+ for LVM
|
||||
# Never upstream
|
||||
Patch1001: cmirrord_remove_date_time_from_compilation.patch
|
||||
Patch1002: fate-309425_display-dm-name-for-lv-name.patch
|
||||
Patch1003: fate-31841_fsadm-add-support-for-btrfs.patch
|
||||
Patch1004: bug-935623_dmeventd-fix-dso-name-wrong-compare.patch
|
||||
Patch1005: bsc1080299-detect-clvm-properly.patch
|
||||
Patch1006: bug-998893_make_pvscan_service_after_multipathd.patch
|
||||
|
||||
#SUSE patches 2000+ for device mapper, udev rules
|
||||
Patch2001: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
### COMMON-PATCH-END ###
|
||||
|
||||
# Patches for clvmd and cmirrord
|
||||
Patch3001: bug-978055_clvmd-try-to-refresh-device-cache-on-the-first-failu.patch
|
||||
|
||||
%description
|
||||
A daemon for using LVM2 Logival Volumes in a clustered environment.
|
||||
|
||||
%prep
|
||||
%setup -q -n LVM2.%{lvm2_version}
|
||||
|
||||
### COMMON-PREP-BEGIN ###
|
||||
%patch0001 -p1
|
||||
%patch0002 -p1
|
||||
%patch0003 -p1
|
||||
%patch0004 -p1
|
||||
%patch1001 -p1
|
||||
%patch1002 -p1
|
||||
%patch1003 -p1
|
||||
%patch1004 -p1
|
||||
%patch1005 -p1
|
||||
%patch1006 -p1
|
||||
%patch2001 -p1
|
||||
### COMMON-PREP-END ###
|
||||
|
||||
%patch3001 -p1
|
||||
|
||||
%build
|
||||
extra_opts="
|
||||
--enable-applib
|
||||
--enable-blkid_wiping
|
||||
--enable-cmdlib
|
||||
--enable-lvmetad
|
||||
--enable-lvmpolld
|
||||
--enable-realtime
|
||||
--with-default-locking-dir=/run/lock/lvm
|
||||
--with-default-pid-dir=/run
|
||||
--with-default-run-dir=/run/lvm
|
||||
--with-clvmd=corosync
|
||||
--with-cluster=internal
|
||||
--enable-cmirrord
|
||||
--enable-lvmlockd-dlm
|
||||
%if 0%{_supportsanlock} == 1
|
||||
--enable-lvmlockd-sanlock
|
||||
%endif
|
||||
"
|
||||
|
||||
### COMMON-CONFIG-BEGIN ###
|
||||
export PATH=$PATH:/sbin:%{_prefix}/sbin
|
||||
# Why this messy fix here? someone released a wrong version...
|
||||
sed -ie "s/%{device_mapper_version}/1.03.01/g" VERSION_DM
|
||||
%configure \
|
||||
--enable-dmeventd \
|
||||
--enable-cmdlib \
|
||||
--enable-udev_rules \
|
||||
--enable-udev_sync \
|
||||
--with-udev-prefix="%{_prefix}/" \
|
||||
--enable-selinux \
|
||||
--enable-pkgconfig \
|
||||
--with-usrlibdir=%{_libdir} \
|
||||
--with-usrsbindir=%{_sbindir} \
|
||||
--with-default-dm-run-dir=/run \
|
||||
--with-tmpfilesdir=%{_tmpfilesdir} \
|
||||
--with-thin=internal \
|
||||
--with-device-gid=6 \
|
||||
--with-device-mode=0640 \
|
||||
--with-device-uid=0 \
|
||||
--with-dmeventd-path=%{_sbindir}/dmeventd \
|
||||
--with-thin-check=%{_sbindir}/thin_check \
|
||||
--with-thin-dump=%{_sbindir}/thin_dump \
|
||||
--with-thin-repair=%{_sbindir}/thin_repair \
|
||||
$extra_opts
|
||||
### COMMON-CONFIG-END ###
|
||||
|
||||
%make_build
|
||||
|
||||
%install
|
||||
make DESTDIR=%{buildroot} \
|
||||
install_cluster \
|
||||
install_systemd_units install_systemd_generators
|
||||
make DESTDIR=%{buildroot} install -C daemons/lvmlockd
|
||||
make DESTDIR=%{buildroot} install -C daemons/cmirrord
|
||||
|
||||
# lvmlockd does not have separate target install the mans by hand for now
|
||||
install -m0644 -D man/lvmlockd.8 %{buildroot}%{_mandir}/man8/lvmlockd.8
|
||||
install -m0644 -D man/lvmlockctl.8 %{buildroot}%{_mandir}/man8/lvmlockctl.8
|
||||
|
||||
# rc services symlinks
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-cluster-activation
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-clvmd
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-cmirrord
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-lvmlockd
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-lvmlocking
|
||||
|
||||
# remove files from lvm2 split due to systemd_generators picking them up
|
||||
rm %{buildroot}%{_unitdir}/blk-availability.service
|
||||
rm %{buildroot}%{_unitdir}/dm-event.service
|
||||
rm %{buildroot}%{_unitdir}/dm-event.socket
|
||||
rm %{buildroot}%{_unitdir}/lvm2-monitor.service
|
||||
rm %{buildroot}%{_mandir}/man8/lvm2-activation-generator.8
|
||||
rm %{buildroot}%{_libexecdir}/systemd/system-generators/lvm2-activation-generator
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmetad.service
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmetad.socket
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmpolld.service
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmpolld.socket
|
||||
rm %{buildroot}%{_unitdir}/lvm2-pvscan@.service
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%{_sbindir}/clvmd
|
||||
%{_sbindir}/rclvm2-cluster-activation
|
||||
%{_sbindir}/rclvm2-clvmd
|
||||
%{_unitdir}/lvm2-clvmd.service
|
||||
%{_unitdir}/lvm2-cluster-activation.service
|
||||
%{_libexecdir}/systemd/lvm2-cluster-activation
|
||||
%{_mandir}/man8/clvmd.8%{ext_man}
|
||||
|
||||
%package -n lvm2-cmirrord
|
||||
Summary: Clustered RAID 1 support using device-mapper and corosync
|
||||
Group: Productivity/Clustering/HA
|
||||
Requires: corosync
|
||||
Requires: device-mapper >= %{device_mapper_version}
|
||||
Requires: lvm2 = %{version}
|
||||
Requires: lvm2-clvm
|
||||
|
||||
%description -n lvm2-cmirrord
|
||||
A daemon for using LVM2 Logival Volumes in a clustered environment.
|
||||
|
||||
%files -n lvm2-cmirrord
|
||||
%defattr(-,root,root)
|
||||
%{_sbindir}/cmirrord
|
||||
%{_libexecdir}/systemd/system/lvm2-cmirrord.service
|
||||
%{_sbindir}/rclvm2-cmirrord
|
||||
%{_mandir}/man8/cmirrord.8%{ext_man}
|
||||
|
||||
%package -n lvm2-lockd
|
||||
Summary: LVM locking daemon
|
||||
Group: Productivity/Clustering/HA
|
||||
Recommends: libdlm >= %{dlm_version}
|
||||
Requires: lvm2 = %{version}
|
||||
%if 0%{_supportsanlock} == 1
|
||||
Requires: sanlock >= %{sanlock_version}
|
||||
%endif
|
||||
%{?systemd_requires}
|
||||
|
||||
%description -n lvm2-lockd
|
||||
LVM commands use lvmlockd to coordinate access to shared storage.
|
||||
|
||||
%pre -n lvm2-lockd
|
||||
%service_add_pre lvm2-lvmlockd.service lvm2-lvmlocking.service
|
||||
|
||||
%post -n lvm2-lockd
|
||||
%service_add_post lvm2-lvmlockd.service lvm2-lvmlocking.service
|
||||
|
||||
%preun -n lvm2-lockd
|
||||
%service_del_preun lvm2-lvmlockd.service lvm2-lvmlocking.service
|
||||
|
||||
%postun -n lvm2-lockd
|
||||
%service_del_postun lvm2-lvmlockd.service lvm2-lvmlocking.service
|
||||
|
||||
%files -n lvm2-lockd
|
||||
%defattr(-,root,root,)
|
||||
%{_sbindir}/lvmlockd
|
||||
%{_sbindir}/lvmlockctl
|
||||
%{_mandir}/man8/lvmlockd.8%{ext_man}
|
||||
%{_mandir}/man8/lvmlockctl.8%{ext_man}
|
||||
%{_unitdir}/lvm2-lvmlockd.service
|
||||
%{_unitdir}/lvm2-lvmlocking.service
|
||||
%{_sbindir}/rclvm2-lvmlockd
|
||||
%{_sbindir}/rclvm2-lvmlocking
|
||||
|
||||
%changelog
|
46
lvm2.changes
46
lvm2.changes
@ -1,3 +1,49 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 9 12:00:00 UTC 2019 - heming.zhao@suse.com
|
||||
|
||||
- Update lvm2.spec: make baselibs.conf to a common source.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 9 11:00:25 UTC 2019 - ghe@suse.com
|
||||
|
||||
- Avoid creation of mixed-blocksize PV on LVM volume groups (bsc#1149408)
|
||||
+ bug-1149408_Fix-rounding-writes-up-to-sector-size.patch
|
||||
+ bug-1149408_vgcreate-vgextend-restrict-PVs-with-mixed-block-size.patch
|
||||
- Update lvm.conf files
|
||||
- add devices/allow_mixed_block_sizes item
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 02 11:21:03 UTC 2019 - heming.zhao@suse.com
|
||||
|
||||
- Update to LVM2.2.03.05
|
||||
- To drop lvm2-clvm and lvm2-cmirrord rpms (jsc#PM-1324)
|
||||
- Fix Out of date package (bsc#1111734)
|
||||
- Fix occasional slow shutdowns with kernel 5.0.0 and up (bsc#1137648)
|
||||
- Remove clvmd
|
||||
- Remove lvmlib (api)
|
||||
- Remove lvmetad
|
||||
- Drop patches that have been merged into upstream
|
||||
- bug-1114113_metadata-prevent-writing-beyond-metadata-area.patch
|
||||
- bug-1137296_pvremove-vgextend-fix-using-device-aliases-with-lvmetad.patch
|
||||
- bug-1135984_cache-support-no_discard_passdown.patch
|
||||
- Drop patches that have been nonexist/unsupport in upstream
|
||||
- bsc1080299-detect-clvm-properly.patch
|
||||
- bug-998893_make_pvscan_service_after_multipathd.patch
|
||||
- bug-978055_clvmd-try-to-refresh-device-cache-on-the-first-failu.patch
|
||||
- bug-950089_test-fix-lvm2-testsuite-build-error.patch
|
||||
- bug-1072624_test-lvmetad_dump-always-timed-out-when-using-nc.patch
|
||||
- tests-specify-python3-as-the-script-interpreter.patch
|
||||
- Update spec files
|
||||
- merge device-mapper, lvm2-lockd, lvm2 into one spec file
|
||||
- clvmd/lvmlib (api)/lvmetad had been removed, so delete related context in spec file
|
||||
- Update lvm.conf files
|
||||
- remove all lvmetad lines/keywords
|
||||
- add event_activation
|
||||
- remove fallback_to_lvm1 & related items
|
||||
- remove locking_type/fallback_to_clustered_locking/fallback_to_local_locking items
|
||||
- remove locking_library item
|
||||
- remove all special filter rules
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 9 10:00:05 UTC 2019 - ghe@suse.com
|
||||
|
||||
|
537
lvm2.spec
537
lvm2.spec
@ -17,75 +17,94 @@
|
||||
|
||||
|
||||
%define _unpackaged_files_terminate_build 0
|
||||
%define libname libdevmapper1_03
|
||||
%define libname_event libdevmapper-event1_03
|
||||
%define _udevdir %(pkg-config --variable=udevdir udev)
|
||||
%define applib liblvm2app2_2
|
||||
%define cmdlib liblvm2cmd2_02
|
||||
|
||||
### COMMON-DEF-BEGIN ###
|
||||
%define lvm2_version 2.02.180
|
||||
%define device_mapper_version 1.02.149
|
||||
%define cmdlib liblvm2cmd2_03
|
||||
%define lvm2_version 2.03.05
|
||||
%define device_mapper_version 1.02.163
|
||||
%define thin_provisioning_version 0.7.0
|
||||
### COMMON-DEF-END ###
|
||||
|
||||
Name: lvm2
|
||||
%define _supportsanlock 0
|
||||
%define dlm_version 4.0
|
||||
%if 0%{_supportsanlock} == 1
|
||||
%define sanlock_version 3.3.0
|
||||
%endif
|
||||
%global flavor @BUILD_FLAVOR@%{nil}
|
||||
%define psuffix %{nil}
|
||||
%if "%{flavor}" == "devicemapper"
|
||||
%define psuffix -device-mapper
|
||||
%bcond_without devicemapper
|
||||
%else
|
||||
%bcond_with devicemapper
|
||||
%endif
|
||||
%if "%{flavor}" == "lockd"
|
||||
%define psuffix -lvmlockd
|
||||
%bcond_without lockd
|
||||
%else
|
||||
%bcond_with lockd
|
||||
%endif
|
||||
Name: lvm2%{psuffix}
|
||||
Version: %{lvm2_version}
|
||||
Release: 0
|
||||
Summary: Logical Volume Manager Tools
|
||||
License: GPL-2.0-or-later AND LGPL-2.1-or-later
|
||||
Group: System/Base
|
||||
Url: http://www.sourceware.org/lvm2/
|
||||
URL: https://www.sourceware.org/lvm2/
|
||||
Source: ftp://sources.redhat.com/pub/lvm2/LVM2.%{version}.tgz
|
||||
Source1: lvm.conf
|
||||
Source42: ftp://sources.redhat.com/pub/lvm2/LVM2.%{version}.tgz.asc
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libaio-devel
|
||||
BuildRequires: libcorosync-devel
|
||||
BuildRequires: libselinux-devel
|
||||
# To detect modprobe during build
|
||||
BuildRequires: kmod-compat
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: readline-devel
|
||||
BuildRequires: thin-provisioning-tools >= %{thin_provisioning_version}
|
||||
BuildRequires: pkgconfig(blkid)
|
||||
BuildRequires: pkgconfig(libudev)
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
BuildRequires: pkgconfig(udev)
|
||||
Requires: device-mapper >= %{device_mapper_version}
|
||||
Requires: modutils
|
||||
Requires(post): coreutils
|
||||
Requires(postun): coreutils
|
||||
Provides: lvm = %{version}
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
%{?systemd_requires}
|
||||
|
||||
### COMMON-PATCH-BEGIN ###
|
||||
Source99: baselibs.conf
|
||||
# Upstream patches
|
||||
Patch0001: bug-1114113_metadata-prevent-writing-beyond-metadata-area.patch
|
||||
Patch0002: bug-1122666_devices-drop-open-error-message.patch
|
||||
Patch0003: bug-1137296_pvremove-vgextend-fix-using-device-aliases-with-lvmetad.patch
|
||||
Patch0004: bug-1135984_cache-support-no_discard_passdown.patch
|
||||
|
||||
Patch0001: bug-1122666_devices-drop-open-error-message.patch
|
||||
Patch0002: bug-1149408_Fix-rounding-writes-up-to-sector-size.patch
|
||||
Patch0003: bug-1149408_vgcreate-vgextend-restrict-PVs-with-mixed-block-size.patch
|
||||
# SUSE patches: 1000+ for LVM
|
||||
# Never upstream
|
||||
Patch1001: cmirrord_remove_date_time_from_compilation.patch
|
||||
Patch1002: fate-309425_display-dm-name-for-lv-name.patch
|
||||
Patch1003: fate-31841_fsadm-add-support-for-btrfs.patch
|
||||
Patch1004: bug-935623_dmeventd-fix-dso-name-wrong-compare.patch
|
||||
Patch1005: bsc1080299-detect-clvm-properly.patch
|
||||
Patch1006: bug-998893_make_pvscan_service_after_multipathd.patch
|
||||
|
||||
#SUSE patches 2000+ for device mapper, udev rules
|
||||
Patch2001: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
### COMMON-PATCH-END ###
|
||||
|
||||
# 3000+ for test code
|
||||
Patch3001: bug-950089_test-fix-lvm2-testsuite-build-error.patch
|
||||
Patch3002: bug-1043040_test-fix-read-ahead-issues-in-test-scripts.patch
|
||||
Patch3003: bug-1072624_test-lvmetad_dump-always-timed-out-when-using-nc.patch
|
||||
Patch3004: tests-specify-python3-as-the-script-interpreter.patch
|
||||
|
||||
Patch3001: bug-1043040_test-fix-read-ahead-issues-in-test-scripts.patch
|
||||
# patches specif for lvm2.spec
|
||||
Patch4001: bug-1037309_Makefile-skip-compliling-daemons-lvmlockd-directory.patch
|
||||
# To detect modprobe during build
|
||||
BuildRequires: kmod-compat
|
||||
BuildRequires: libaio-devel
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: thin-provisioning-tools >= %{thin_provisioning_version}
|
||||
BuildRequires: pkgconfig(libudev)
|
||||
Requires: device-mapper >= %{device_mapper_version}
|
||||
Requires: modutils
|
||||
Requires(post): coreutils
|
||||
Requires(postun): coreutils
|
||||
Provides: lvm = %{version}
|
||||
Obsoletes: lvm2-cmirrord
|
||||
%{?systemd_requires}
|
||||
%if %{with devicemapper}
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: suse-module-tools
|
||||
BuildRequires: pkgconfig(libselinux)
|
||||
BuildRequires: pkgconfig(libsepol)
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
%else
|
||||
BuildRequires: libcorosync-devel
|
||||
BuildRequires: pkgconfig(blkid)
|
||||
%if %{with lockd}
|
||||
BuildRequires: libdlm-devel
|
||||
%if 0%{_supportsanlock} == 1
|
||||
BuildRequires: sanlock-devel >= %{sanlock_version}
|
||||
%endif
|
||||
%else
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: readline-devel
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
BuildRequires: pkgconfig(udev)
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%description
|
||||
Programs and man pages for configuring and using the LVM2 Logical
|
||||
@ -93,32 +112,24 @@ Volume Manager.
|
||||
|
||||
%prep
|
||||
%setup -q -n LVM2.%{version}
|
||||
### COMMON-PREP-BEGIN ###
|
||||
%patch0001 -p1
|
||||
%patch0002 -p1
|
||||
%patch0003 -p1
|
||||
%patch0004 -p1
|
||||
%patch1001 -p1
|
||||
%patch1002 -p1
|
||||
%patch1003 -p1
|
||||
%patch1004 -p1
|
||||
%patch1005 -p1
|
||||
%patch1006 -p1
|
||||
%patch2001 -p1
|
||||
### COMMON-PREP-END ###
|
||||
|
||||
%patch3001 -p1
|
||||
%patch3002 -p1
|
||||
%patch3003 -p1
|
||||
%patch3004 -p1
|
||||
%if !%{with lockd}
|
||||
%patch4001 -p1
|
||||
%endif
|
||||
|
||||
%build
|
||||
%if !%{with devicemapper} && !%{with lockd}
|
||||
extra_opts="
|
||||
--enable-applib
|
||||
--enable-blkid_wiping
|
||||
--enable-cmdlib
|
||||
--enable-lvmetad
|
||||
--enable-lvmpolld
|
||||
--enable-realtime
|
||||
--with-cache=internal
|
||||
@ -126,10 +137,32 @@ extra_opts="
|
||||
--with-default-pid-dir=/run
|
||||
--with-default-run-dir=/run/lvm
|
||||
--enable-cmirrord
|
||||
--enable-fsadm
|
||||
--disable-silent-rules
|
||||
--enable-write_install
|
||||
--with-vdo=internal
|
||||
--with-vdo-format=%{_bindir}/vdoformat
|
||||
"
|
||||
%endif
|
||||
%if %{with lockd}
|
||||
extra_opts="
|
||||
--enable-blkid_wiping
|
||||
--enable-lvmpolld
|
||||
--enable-realtime
|
||||
--with-default-locking-dir=/run/lock/lvm
|
||||
--with-default-pid-dir=/run
|
||||
--with-default-run-dir=/run/lvm
|
||||
--with-cluster=internal
|
||||
--enable-lvmlockd-dlm
|
||||
%if 0%{_supportsanlock} == 1
|
||||
--enable-lvmlockd-sanlock
|
||||
%endif
|
||||
--disable-silent-rules
|
||||
"
|
||||
%endif
|
||||
|
||||
### COMMON-CONFIG-BEGIN ###
|
||||
export PATH=$PATH:/sbin:%{_prefix}/sbin
|
||||
export PATH=$PATH:/sbin:%{_sbindir}
|
||||
# Why this messy fix here? someone released a wrong version...
|
||||
sed -ie "s/%{device_mapper_version}/1.03.01/g" VERSION_DM
|
||||
%configure \
|
||||
@ -155,9 +188,60 @@ sed -ie "s/%{device_mapper_version}/1.03.01/g" VERSION_DM
|
||||
$extra_opts
|
||||
### COMMON-CONFIG-END ###
|
||||
|
||||
%if %{with devicemapper}
|
||||
%make_build device-mapper
|
||||
%else
|
||||
%make_build
|
||||
%endif
|
||||
|
||||
%install
|
||||
%if %{with devicemapper}
|
||||
make DESTDIR=%{buildroot} \
|
||||
install_device-mapper \
|
||||
install_systemd_units
|
||||
|
||||
ln -s service %{buildroot}/%{_sbindir}/rcdm-event
|
||||
|
||||
# provide 1.02 compat links for the shared libraries
|
||||
# this is needed for various binary packages
|
||||
ln -s libdevmapper.so.1.03 %{buildroot}/%{_libdir}/libdevmapper.so.1.02
|
||||
ln -s libdevmapper-event.so.1.03 %{buildroot}/%{_libdir}/libdevmapper-event.so.1.02
|
||||
|
||||
# remove blkd, will be in lvm2 proper
|
||||
# without force on purpose to detect changes and fail if it happens
|
||||
rm %{buildroot}%{_sbindir}/blkdeactivate
|
||||
rm %{buildroot}%{_unitdir}/blk-availability.service
|
||||
rm %{buildroot}%{_unitdir}/lvm2-monitor.service
|
||||
rm %{buildroot}%{_mandir}/man8/blkdeactivate.8
|
||||
|
||||
# compat symlinks in /sbin remove with Leap 43
|
||||
mkdir -p %{buildroot}/sbin
|
||||
ln -s %{_sbindir}/dmsetup %{buildroot}/sbin/dmsetup
|
||||
%else
|
||||
%if %{with lockd}
|
||||
make DESTDIR=%{buildroot} \
|
||||
install_systemd_units install_systemd_generators
|
||||
make DESTDIR=%{buildroot} install -C daemons/lvmlockd
|
||||
|
||||
# lvmlockd does not have separate target install the mans by hand for now
|
||||
install -m0644 -D man/lvmlockd.8 %{buildroot}%{_mandir}/man8/lvmlockd.8
|
||||
install -m0644 -D man/lvmlockctl.8 %{buildroot}%{_mandir}/man8/lvmlockctl.8
|
||||
|
||||
# rc services symlinks
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-lvmlockd
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-lvmlocking
|
||||
|
||||
# remove files from lvm2 split due to systemd_generators picking them up
|
||||
rm %{buildroot}%{_unitdir}/blk-availability.service
|
||||
rm %{buildroot}%{_unitdir}/dm-event.service
|
||||
rm %{buildroot}%{_unitdir}/dm-event.socket
|
||||
rm %{buildroot}%{_unitdir}/lvm2-monitor.service
|
||||
rm %{buildroot}%{_mandir}/man8/lvm2-activation-generator.8
|
||||
rm %{buildroot}%{_libexecdir}/systemd/system-generators/lvm2-activation-generator
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmpolld.service
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmpolld.socket
|
||||
rm %{buildroot}%{_unitdir}/lvm2-pvscan@.service
|
||||
%else
|
||||
%make_install
|
||||
make install_system_dirs DESTDIR=%{buildroot}
|
||||
make install_systemd_units DESTDIR=%{buildroot}
|
||||
@ -169,17 +253,15 @@ install -m 644 %{SOURCE1} "%{buildroot}/%{_sysconfdir}/lvm/"
|
||||
make -C test install DESTDIR=%{buildroot}
|
||||
|
||||
pushd "%{buildroot}/%{_libdir}"
|
||||
ln -sf liblvm2cmd.so.2.02 liblvm2cmd.so
|
||||
ln -sf liblvm2app.so.2.2 liblvm2app.so
|
||||
ln -sf liblvm2cmd.so.2.03 liblvm2cmd.so
|
||||
for i in libdevmapper-event-lvm2{mirror,raid,snapshot,thin}; do
|
||||
ln -sf "device-mapper/$i.so" "$i.so"
|
||||
ln -sf "device-mapper/$i.so" "$i.so.2.02"
|
||||
ln -sf "device-mapper/$i.so" "$i.so.2.03"
|
||||
done
|
||||
popd
|
||||
|
||||
#rc compat symlinks
|
||||
ln -s service %{buildroot}%{_sbindir}/rcblk-availability
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-lvmetad
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-monitor
|
||||
ln -s service %{buildroot}%{_sbindir}/rclvm2-lvmpolld
|
||||
|
||||
@ -193,8 +275,8 @@ rm %{buildroot}%{_udevrulesdir}/95-dm-notify.rules
|
||||
rm %{buildroot}%{_unitdir}/dm-event.socket
|
||||
rm %{buildroot}%{_unitdir}/dm-event.service
|
||||
# See bsc#1037309 for more info
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmlockd.service
|
||||
rm %{buildroot}%{_unitdir}/lvm2-lvmlocking.service
|
||||
rm %{buildroot}%{_unitdir}/lvmlockd.service
|
||||
rm %{buildroot}%{_unitdir}/lvmlocks.service
|
||||
rm %{buildroot}%{_includedir}/libdevmapper*.h
|
||||
rm %{buildroot}%{_libdir}/libdevmapper.so.*
|
||||
rm %{buildroot}%{_libdir}/libdevmapper-event.so.*
|
||||
@ -214,14 +296,169 @@ for i in {vg,pv,lv}*; do
|
||||
ln -s %{_sbindir}/$i %{buildroot}/sbin/$i
|
||||
done
|
||||
popd
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%if %{with devicemapper}
|
||||
%package -n device-mapper
|
||||
Version: %{device_mapper_version}
|
||||
Release: 0
|
||||
Summary: Device Mapper Tools
|
||||
Group: System/Base
|
||||
Requires: thin-provisioning-tools >= %{thin_provisioning_version}
|
||||
Requires(post): coreutils
|
||||
|
||||
%description -n device-mapper
|
||||
Programs and man pages for configuring and using the device mapper.
|
||||
|
||||
%pre -n device-mapper
|
||||
%service_add_pre dm-event.service dm-event.socket
|
||||
|
||||
%post -n device-mapper
|
||||
%service_add_post dm-event.service dm-event.socket
|
||||
%{?regenerate_initrd_post}
|
||||
|
||||
%posttrans -n device-mapper
|
||||
%{?regenerate_initrd_posttrans}
|
||||
|
||||
%preun -n device-mapper
|
||||
%service_del_preun dm-event.service dm-event.socket
|
||||
|
||||
%postun -n device-mapper
|
||||
%service_del_postun dm-event.service dm-event.socket
|
||||
%{?regenerate_initrd_post}
|
||||
|
||||
%files -n device-mapper
|
||||
%license COPYING COPYING.LIB
|
||||
%doc README
|
||||
%doc udev/12-dm-permissions.rules
|
||||
/sbin/dmsetup
|
||||
%{_sbindir}/dmsetup
|
||||
%{_sbindir}/dmeventd
|
||||
%{_sbindir}/dmstats
|
||||
%{_mandir}/man8/dmstats.8%{?ext_man}
|
||||
%{_mandir}/man8/dmsetup.8%{?ext_man}
|
||||
%{_mandir}/man8/dmeventd.8%{?ext_man}
|
||||
%{_udevrulesdir}/10-dm.rules
|
||||
%{_udevrulesdir}/13-dm-disk.rules
|
||||
%{_udevrulesdir}/95-dm-notify.rules
|
||||
%{_unitdir}/dm-event.socket
|
||||
%{_sbindir}/rcdm-event
|
||||
%{_unitdir}/dm-event.service
|
||||
|
||||
%package -n %{libname}
|
||||
Version: %{device_mapper_version}
|
||||
Release: 0
|
||||
Summary: Library for device-mapper
|
||||
Group: System/Libraries
|
||||
Conflicts: %{name} < %{version}
|
||||
|
||||
%description -n %{libname}
|
||||
Device mapper main shared library
|
||||
|
||||
%files -n %{libname}
|
||||
%{_libdir}/libdevmapper.so.1.03
|
||||
%{_libdir}/libdevmapper.so.1.02
|
||||
|
||||
%post -n %{libname}
|
||||
if [ -f /%{_lib}/libdevmapper.so.1.03 ]; then
|
||||
# Special migration - the library is now in %{_libdir}, but up to the point where
|
||||
# zypp removes the 'old' device-mapper package, the old library 'wins' the ldloader race
|
||||
# resulting in binaries asking for the newer version still getting the old one.
|
||||
# This in turn results in funny bugs like boo#1045396
|
||||
# Remove /%{_lib}/libdevmapper.so.1.02 - and the run ldconfig
|
||||
rm /%{_lib}/libdevmapper.so.1.03
|
||||
fi
|
||||
/sbin/ldconfig
|
||||
|
||||
%postun -n %{libname} -p /sbin/ldconfig
|
||||
|
||||
%package -n %{libname_event}
|
||||
Version: %{device_mapper_version}
|
||||
Release: 0
|
||||
Summary: Event library for device-mapper
|
||||
Group: System/Libraries
|
||||
Conflicts: %{name} < %{version}
|
||||
|
||||
%description -n %{libname_event}
|
||||
Device mapper event daemon shared library
|
||||
|
||||
%files -n %{libname_event}
|
||||
%{_libdir}/libdevmapper-event.so.1.03
|
||||
%{_libdir}/libdevmapper-event.so.1.02
|
||||
|
||||
%post -n %{libname_event} -p /sbin/ldconfig
|
||||
%postun -n %{libname_event} -p /sbin/ldconfig
|
||||
|
||||
%package -n device-mapper-devel
|
||||
Version: %{device_mapper_version}
|
||||
Release: 0
|
||||
Summary: Development package for the device mapper
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: %{libname_event} = %{device_mapper_version}
|
||||
Requires: %{libname} = %{device_mapper_version}
|
||||
Requires: device-mapper = %{device_mapper_version}
|
||||
|
||||
%description -n device-mapper-devel
|
||||
Files needed for software development using the device mapper
|
||||
|
||||
%files -n device-mapper-devel
|
||||
%{_libdir}/libdevmapper.so
|
||||
%{_libdir}/libdevmapper-event.so
|
||||
%{_includedir}/libdevmapper.h
|
||||
%{_includedir}/libdevmapper-event.h
|
||||
%{_libdir}/pkgconfig/devmapper.pc
|
||||
%{_libdir}/pkgconfig/devmapper-event.pc
|
||||
|
||||
%else
|
||||
%if %{with lockd}
|
||||
%package -n lvm2-lockd
|
||||
Summary: LVM locking daemon
|
||||
Group: System/Base
|
||||
Requires: corosync
|
||||
Requires: device-mapper >= %{device_mapper_version}
|
||||
Requires: lvm2 = %{version}
|
||||
Recommends: libdlm >= %{dlm_version}
|
||||
Obsoletes: lvm2-clvm
|
||||
%{?systemd_requires}
|
||||
%if 0%{_supportsanlock} == 1
|
||||
Requires: sanlock >= %{sanlock_version}
|
||||
%endif
|
||||
|
||||
%description -n lvm2-lockd
|
||||
LVM commands use lvmlockd to coordinate access to shared storage.
|
||||
|
||||
%pre -n lvm2-lockd
|
||||
%service_add_pre lvmlockd.service lvmlocks.service
|
||||
|
||||
%post -n lvm2-lockd
|
||||
%service_add_post lvmlockd.service lvmlocks.service
|
||||
|
||||
%preun -n lvm2-lockd
|
||||
%service_del_preun lvmlockd.service lvmlocks.service
|
||||
|
||||
%postun -n lvm2-lockd
|
||||
%service_del_postun lvmlockd.service lvmlocks.service
|
||||
|
||||
%files -n lvm2-lockd
|
||||
%defattr(-,root,root,)
|
||||
%{_sbindir}/lvmlockd
|
||||
%{_sbindir}/lvmlockctl
|
||||
%{_mandir}/man8/lvmlockd.8%{?ext_man}
|
||||
%{_mandir}/man8/lvmlockctl.8%{?ext_man}
|
||||
%{_unitdir}/lvmlockd.service
|
||||
%{_unitdir}/lvmlocks.service
|
||||
%{_sbindir}/rclvm2-lvmlockd
|
||||
%{_sbindir}/rclvm2-lvmlocking
|
||||
|
||||
%else
|
||||
%pre
|
||||
%service_add_pre blk-availability.service lvm2-monitor.service lvm2-lvmetad.socket lvm2-lvmetad.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
%service_add_pre blk-availability.service lvm2-monitor.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
|
||||
%post
|
||||
/sbin/ldconfig
|
||||
%{?regenerate_initrd_post}
|
||||
%service_add_post blk-availability.service lvm2-monitor.service lvm2-lvmetad.socket lvm2-lvmetad.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
%service_add_post blk-availability.service lvm2-monitor.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
# Use %%tmpfiles_create when 13.2 is oldest in support scope
|
||||
%{_bindir}/systemd-tmpfiles --create %{_tmpfilesdir}/lvm2.conf || :
|
||||
|
||||
@ -229,25 +466,24 @@ popd
|
||||
%{?regenerate_initrd_posttrans}
|
||||
|
||||
%preun
|
||||
%service_del_preun blk-availability.service lvm2-monitor.service lvm2-lvmetad.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
%service_del_preun blk-availability.service lvm2-monitor.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
|
||||
%postun
|
||||
/sbin/ldconfig
|
||||
%{?regenerate_initrd_post}
|
||||
%service_del_postun blk-availability.service lvm2-monitor.service lvm2-lvmetad.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
%service_del_postun blk-availability.service lvm2-monitor.service lvm2-lvmpolld.service lvm2-lvmpolld.socket
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%license COPYING COPYING.LIB
|
||||
%doc README VERSION WHATS_NEW
|
||||
%doc doc/lvm_fault_handling.txt
|
||||
|
||||
# Main binaries
|
||||
%{_sbindir}/blkdeactivate
|
||||
%{_sbindir}/fsadm
|
||||
%{_sbindir}/lvm
|
||||
%{_sbindir}/lvmconf
|
||||
%{_sbindir}/lvmconfig
|
||||
%{_sbindir}/lvmdump
|
||||
%{_sbindir}/lvmetad
|
||||
%{_sbindir}/lvmpolld
|
||||
# Other files
|
||||
%{_sbindir}/lvchange
|
||||
@ -293,15 +529,12 @@ popd
|
||||
%{_sbindir}/vgscan
|
||||
%{_sbindir}/vgsplit
|
||||
%{_sbindir}/rcblk-availability
|
||||
%{_sbindir}/rclvm2-lvmetad
|
||||
%{_sbindir}/rclvm2-lvmpolld
|
||||
%{_sbindir}/rclvm2-monitor
|
||||
# compat symlinks in /sbin
|
||||
/sbin/lvm
|
||||
/sbin/lvmconf
|
||||
/sbin/lvmconfig
|
||||
/sbin/lvmdump
|
||||
/sbin/lvmetad
|
||||
/sbin/lvmpolld
|
||||
/sbin/lvchange
|
||||
/sbin/lvconvert
|
||||
@ -345,67 +578,66 @@ popd
|
||||
/sbin/vgs
|
||||
/sbin/vgscan
|
||||
/sbin/vgsplit
|
||||
%{_mandir}/man5/lvm.conf.5%{ext_man}
|
||||
%{_mandir}/man7/lvmcache.7%{ext_man}
|
||||
%{_mandir}/man7/lvmraid.7%{ext_man}
|
||||
%{_mandir}/man7/lvmreport.7%{ext_man}
|
||||
%{_mandir}/man7/lvmthin.7%{ext_man}
|
||||
%{_mandir}/man7/lvmsystemid.7%{ext_man}
|
||||
%{_mandir}/man8/fsadm.8%{ext_man}
|
||||
%{_mandir}/man8/lvchange.8%{ext_man}
|
||||
%{_mandir}/man8/lvconvert.8%{ext_man}
|
||||
%{_mandir}/man8/lvcreate.8%{ext_man}
|
||||
%{_mandir}/man8/lvdisplay.8%{ext_man}
|
||||
%{_mandir}/man8/lvextend.8%{ext_man}
|
||||
%{_mandir}/man8/lvm.8%{ext_man}
|
||||
%{_mandir}/man8/lvm2-activation-generator.8%{ext_man}
|
||||
%{_mandir}/man8/lvm-config.8%{ext_man}
|
||||
%{_mandir}/man8/lvmconfig.8%{ext_man}
|
||||
%{_mandir}/man8/lvm-dumpconfig.8%{ext_man}
|
||||
%{_mandir}/man8/lvmconf.8%{ext_man}
|
||||
%{_mandir}/man8/lvmdiskscan.8%{ext_man}
|
||||
%{_mandir}/man8/lvmdump.8%{ext_man}
|
||||
%{_mandir}/man8/lvm-fullreport.8%{ext_man}
|
||||
%{_mandir}/man8/lvmsadc.8%{ext_man}
|
||||
%{_mandir}/man8/lvmsar.8%{ext_man}
|
||||
%{_mandir}/man8/lvreduce.8%{ext_man}
|
||||
%{_mandir}/man8/lvremove.8%{ext_man}
|
||||
%{_mandir}/man8/lvrename.8%{ext_man}
|
||||
%{_mandir}/man8/lvresize.8%{ext_man}
|
||||
%{_mandir}/man8/lvs.8%{ext_man}
|
||||
%{_mandir}/man8/lvscan.8%{ext_man}
|
||||
%{_mandir}/man8/pvchange.8%{ext_man}
|
||||
%{_mandir}/man8/pvck.8%{ext_man}
|
||||
%{_mandir}/man8/pvcreate.8%{ext_man}
|
||||
%{_mandir}/man8/pvdisplay.8%{ext_man}
|
||||
%{_mandir}/man8/pvmove.8%{ext_man}
|
||||
%{_mandir}/man8/pvremove.8%{ext_man}
|
||||
%{_mandir}/man8/pvresize.8%{ext_man}
|
||||
%{_mandir}/man8/pvs.8%{ext_man}
|
||||
%{_mandir}/man8/pvscan.8%{ext_man}
|
||||
%{_mandir}/man8/vgcfgbackup.8%{ext_man}
|
||||
%{_mandir}/man8/vgcfgrestore.8%{ext_man}
|
||||
%{_mandir}/man8/vgchange.8%{ext_man}
|
||||
%{_mandir}/man8/vgck.8%{ext_man}
|
||||
%{_mandir}/man8/vgconvert.8%{ext_man}
|
||||
%{_mandir}/man8/vgcreate.8%{ext_man}
|
||||
%{_mandir}/man8/vgdisplay.8%{ext_man}
|
||||
%{_mandir}/man8/vgexport.8%{ext_man}
|
||||
%{_mandir}/man8/vgextend.8%{ext_man}
|
||||
%{_mandir}/man8/vgimport.8%{ext_man}
|
||||
%{_mandir}/man8/vgimportclone.8%{ext_man}
|
||||
%{_mandir}/man8/vgmerge.8%{ext_man}
|
||||
%{_mandir}/man8/vgmknodes.8%{ext_man}
|
||||
%{_mandir}/man8/vgreduce.8%{ext_man}
|
||||
%{_mandir}/man8/vgremove.8%{ext_man}
|
||||
%{_mandir}/man8/vgrename.8%{ext_man}
|
||||
%{_mandir}/man8/vgs.8%{ext_man}
|
||||
%{_mandir}/man8/vgscan.8%{ext_man}
|
||||
%{_mandir}/man8/vgsplit.8%{ext_man}
|
||||
%{_mandir}/man8/lvmetad.8%{ext_man}
|
||||
%{_mandir}/man8/blkdeactivate.8%{ext_man}
|
||||
%{_mandir}/man8/lvmpolld.8%{ext_man}
|
||||
%{_mandir}/man8/lvm-lvpoll.8%{ext_man}
|
||||
%{_mandir}/man5/lvm.conf.5%{?ext_man}
|
||||
%{_mandir}/man7/lvmcache.7%{?ext_man}
|
||||
%{_mandir}/man7/lvmraid.7%{?ext_man}
|
||||
%{_mandir}/man7/lvmreport.7%{?ext_man}
|
||||
%{_mandir}/man7/lvmthin.7%{?ext_man}
|
||||
%{_mandir}/man7/lvmsystemid.7%{?ext_man}
|
||||
%{_mandir}/man7/lvmvdo.7%{?ext_man}
|
||||
%{_mandir}/man8/fsadm.8%{?ext_man}
|
||||
%{_mandir}/man8/lvchange.8%{?ext_man}
|
||||
%{_mandir}/man8/lvconvert.8%{?ext_man}
|
||||
%{_mandir}/man8/lvcreate.8%{?ext_man}
|
||||
%{_mandir}/man8/lvdisplay.8%{?ext_man}
|
||||
%{_mandir}/man8/lvextend.8%{?ext_man}
|
||||
%{_mandir}/man8/lvm.8%{?ext_man}
|
||||
%{_mandir}/man8/lvm2-activation-generator.8%{?ext_man}
|
||||
%{_mandir}/man8/lvm-config.8%{?ext_man}
|
||||
%{_mandir}/man8/lvmconfig.8%{?ext_man}
|
||||
%{_mandir}/man8/lvm-dumpconfig.8%{?ext_man}
|
||||
%{_mandir}/man8/lvmdiskscan.8%{?ext_man}
|
||||
%{_mandir}/man8/lvmdump.8%{?ext_man}
|
||||
%{_mandir}/man8/lvm-fullreport.8%{?ext_man}
|
||||
%{_mandir}/man8/lvmsadc.8%{?ext_man}
|
||||
%{_mandir}/man8/lvmsar.8%{?ext_man}
|
||||
%{_mandir}/man8/lvreduce.8%{?ext_man}
|
||||
%{_mandir}/man8/lvremove.8%{?ext_man}
|
||||
%{_mandir}/man8/lvrename.8%{?ext_man}
|
||||
%{_mandir}/man8/lvresize.8%{?ext_man}
|
||||
%{_mandir}/man8/lvs.8%{?ext_man}
|
||||
%{_mandir}/man8/lvscan.8%{?ext_man}
|
||||
%{_mandir}/man8/pvchange.8%{?ext_man}
|
||||
%{_mandir}/man8/pvck.8%{?ext_man}
|
||||
%{_mandir}/man8/pvcreate.8%{?ext_man}
|
||||
%{_mandir}/man8/pvdisplay.8%{?ext_man}
|
||||
%{_mandir}/man8/pvmove.8%{?ext_man}
|
||||
%{_mandir}/man8/pvremove.8%{?ext_man}
|
||||
%{_mandir}/man8/pvresize.8%{?ext_man}
|
||||
%{_mandir}/man8/pvs.8%{?ext_man}
|
||||
%{_mandir}/man8/pvscan.8%{?ext_man}
|
||||
%{_mandir}/man8/vgcfgbackup.8%{?ext_man}
|
||||
%{_mandir}/man8/vgcfgrestore.8%{?ext_man}
|
||||
%{_mandir}/man8/vgchange.8%{?ext_man}
|
||||
%{_mandir}/man8/vgck.8%{?ext_man}
|
||||
%{_mandir}/man8/vgconvert.8%{?ext_man}
|
||||
%{_mandir}/man8/vgcreate.8%{?ext_man}
|
||||
%{_mandir}/man8/vgdisplay.8%{?ext_man}
|
||||
%{_mandir}/man8/vgexport.8%{?ext_man}
|
||||
%{_mandir}/man8/vgextend.8%{?ext_man}
|
||||
%{_mandir}/man8/vgimport.8%{?ext_man}
|
||||
%{_mandir}/man8/vgimportclone.8%{?ext_man}
|
||||
%{_mandir}/man8/vgmerge.8%{?ext_man}
|
||||
%{_mandir}/man8/vgmknodes.8%{?ext_man}
|
||||
%{_mandir}/man8/vgreduce.8%{?ext_man}
|
||||
%{_mandir}/man8/vgremove.8%{?ext_man}
|
||||
%{_mandir}/man8/vgrename.8%{?ext_man}
|
||||
%{_mandir}/man8/vgs.8%{?ext_man}
|
||||
%{_mandir}/man8/vgscan.8%{?ext_man}
|
||||
%{_mandir}/man8/vgsplit.8%{?ext_man}
|
||||
%{_mandir}/man8/blkdeactivate.8%{?ext_man}
|
||||
%{_mandir}/man8/lvmpolld.8%{?ext_man}
|
||||
%{_mandir}/man8/lvm-lvpoll.8%{?ext_man}
|
||||
%{_udevdir}/rules.d/11-dm-lvm.rules
|
||||
%{_udevdir}/rules.d/69-dm-lvm-metad.rules
|
||||
%dir %{_sysconfdir}/lvm
|
||||
@ -419,6 +651,7 @@ popd
|
||||
%{_sysconfdir}/lvm/profile/cache-mq.profile
|
||||
%{_sysconfdir}/lvm/profile/cache-smq.profile
|
||||
%{_sysconfdir}/lvm/profile/lvmdbusd.profile
|
||||
%{_sysconfdir}/lvm/profile/vdo-small.profile
|
||||
%dir %{_sysconfdir}/lvm/cache
|
||||
%ghost %{_sysconfdir}/lvm/cache/.cache
|
||||
%dir %{_sysconfdir}/lvm/archive
|
||||
@ -426,8 +659,6 @@ popd
|
||||
%{_tmpfilesdir}/%{name}.conf
|
||||
%{_unitdir}/blk-availability.service
|
||||
%{_unitdir}/lvm2-monitor.service
|
||||
%{_unitdir}/lvm2-lvmetad.socket
|
||||
%{_unitdir}/lvm2-lvmetad.service
|
||||
%{_unitdir}/lvm2-pvscan@.service
|
||||
%{_unitdir}/lvm2-lvmpolld.socket
|
||||
%{_unitdir}/lvm2-lvmpolld.service
|
||||
@ -435,27 +666,14 @@ popd
|
||||
%dir %{_libdir}/device-mapper
|
||||
%{_libdir}/device-mapper/libdevmapper-event-lvm2*.so
|
||||
%{_libdir}/libdevmapper-event-lvm2*.so
|
||||
%{_libdir}/libdevmapper-event-lvm2*.so.2.02
|
||||
|
||||
%package -n %{applib}
|
||||
Summary: LVM2 application api library
|
||||
Group: System/Libraries
|
||||
Conflicts: %{name} < %{version}
|
||||
|
||||
%description -n %{applib}
|
||||
LVM library for applications api
|
||||
|
||||
%post -n %{applib} -p /sbin/ldconfig
|
||||
%postun -n %{applib} -p /sbin/ldconfig
|
||||
|
||||
%files -n %{applib}
|
||||
%defattr(-,root,root)
|
||||
%{_libdir}/liblvm2app.so.*
|
||||
%{_libdir}/libdevmapper-event-lvm2*.so.2.03
|
||||
|
||||
%package -n %{cmdlib}
|
||||
Summary: LVM2 command line library
|
||||
Group: System/Libraries
|
||||
Conflicts: %{name} < %{version}
|
||||
Obsoletes: liblvm2app2_2
|
||||
Obsoletes: liblvm2cmd2_02
|
||||
|
||||
%description -n %{cmdlib}
|
||||
The lvm2 command line library allows building programs that manage
|
||||
@ -465,13 +683,11 @@ lvm devices without invoking a separate program.
|
||||
%postun -n %{cmdlib} -p /sbin/ldconfig
|
||||
|
||||
%files -n %{cmdlib}
|
||||
%defattr(-,root,root)
|
||||
%{_libdir}/liblvm2cmd.so.*
|
||||
|
||||
%package devel
|
||||
Summary: Development files for LVM2
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: %{applib} = %{version}
|
||||
Requires: %{cmdlib} = %{version}
|
||||
Requires: device-mapper-devel
|
||||
Requires: lvm2 = %{version}
|
||||
@ -480,17 +696,12 @@ Requires: lvm2 = %{version}
|
||||
This package provides development files for the LVM2 Logical Volume Manager.
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root)
|
||||
%{_includedir}/lvm2cmd.h
|
||||
%{_includedir}/lvm2app.h
|
||||
%{_libdir}/pkgconfig/lvm2app.pc
|
||||
%{_libdir}/liblvm2app.so
|
||||
%{_libdir}/liblvm2cmd.so
|
||||
|
||||
%package testsuite
|
||||
Summary: LVM2 Testsuite
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: %{applib} = %{version}
|
||||
Requires: %{cmdlib} = %{version}
|
||||
Requires: lvm2 = %{version}
|
||||
|
||||
@ -498,9 +709,11 @@ Requires: lvm2 = %{version}
|
||||
An extensive functional testsuite for the LVM2 Logical Volume Manager.
|
||||
|
||||
%files testsuite
|
||||
%defattr(-,root,root)
|
||||
%{_datarootdir}/lvm2-testsuite/
|
||||
%{_libexecdir}/lvm2-testsuite/
|
||||
%{_bindir}/lvm2-testsuite
|
||||
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
|
@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
master="lvm2.spec"
|
||||
sections="COMMON-DEF COMMON-PATCH COMMON-PREP COMMON-CONFIG"
|
||||
for slave in device-mapper.spec lvm2-clvm.spec; do
|
||||
{
|
||||
prev=1
|
||||
for section in $sections; do
|
||||
begin="/$section-BEGIN/"
|
||||
end="/$section-END/"
|
||||
sed -n -e "${prev},${begin}p" $slave
|
||||
sed -n -e "${begin},${end}p" $master | head -n -1 | tail -n +2
|
||||
prev=$end
|
||||
done
|
||||
sed -n -e "${prev},\$p" $slave
|
||||
} > $slave.tmp && mv $slave.tmp $slave
|
||||
done
|
||||
|
||||
# changelogs
|
||||
|
||||
cp lvm2.changes lvm2-clvm.changes
|
||||
cp lvm2.changes device-mapper.changes
|
@ -1,27 +0,0 @@
|
||||
From 3f768d29ceb5427b6e8de4fe35e2c1001409d750 Mon Sep 17 00:00:00 2001
|
||||
From: Gang He <ghe@suse.com>
|
||||
Date: Wed, 20 Jun 2018 14:04:52 +0800
|
||||
Subject: [PATCH] tests: specify python3 as the script interpreter
|
||||
|
||||
specify /usr/bin/python3 as the script interpreter in
|
||||
python_lvm_unit.py.in file, otherwise, there will be a building
|
||||
error in OBS.
|
||||
|
||||
Signed-off-by: Gang He <ghe@suse.com>
|
||||
---
|
||||
test/api/python_lvm_unit.py.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/test/api/python_lvm_unit.py.in b/test/api/python_lvm_unit.py.in
|
||||
index 78ced7e31..c6a7c9905 100755
|
||||
--- a/test/api/python_lvm_unit.py.in
|
||||
+++ b/test/api/python_lvm_unit.py.in
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!@PYTHON@
|
||||
+#!/usr/bin/python3
|
||||
|
||||
# Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved.
|
||||
#
|
||||
--
|
||||
2.12.3
|
||||
|
Loading…
x
Reference in New Issue
Block a user