master - tests: skip unneeded status check
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=ba313ac84a7bc27ce69...
Commit: ba313ac84a7bc27ce69d225dec1bfc80bcb20988
Parent: 1cc13335998558b84750fc2ba25c8b9f7b053746
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Nov 8 13:12:31 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 22:44:25 2019 +0100
tests: skip unneeded status check
If 'remove' was succesful - we can break loop immediatelly.
---
test/shell/pvmove-restart.sh | 11 +++++------
1 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/test/shell/pvmove-restart.sh b/test/shell/pvmove-restart.sh
index 115ce14..1669187 100644
--- a/test/shell/pvmove-restart.sh
+++ b/test/shell/pvmove-restart.sh
@@ -51,12 +51,11 @@ wait
# First take down $lv1 then it's pvmove0
j=0
for i in $lv1 pvmove0 pvmove0_mimage_0 pvmove0_mimage_1 ; do
- while dmsetup status "$vg-$i"; do
- dmsetup remove "$vg-$i" || {
- j=$(( j + 1 ))
- test $j -le 100 || die "Cannot take down devices."
- sleep .1;
- }
+ while dmsetup status "$vg-$i" ; do
+ dmsetup remove "$vg-$i" && break
+ j=$(( j + 1 ))
+ test $j -le 100 || die "Cannot take down devices."
+ sleep .1;
done
done
dmsetup table | grep $PREFIX
4 years, 5 months
master - daemons: check for non-zero thread_id
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=1cc13335998558b8475...
Commit: 1cc13335998558b84750fc2ba25c8b9f7b053746
Parent: cc865749ae443cca276ac411f302fd8989a843ef
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Nov 8 13:10:49 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 22:44:25 2019 +0100
daemons: check for non-zero thread_id
Do not call pthread_join if thread_id would be 0.
---
libdaemon/server/daemon-server.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c
index b45c0e5..66e43d4 100644
--- a/libdaemon/server/daemon-server.c
+++ b/libdaemon/server/daemon-server.c
@@ -551,7 +551,8 @@ static void _reap(daemon_state s, int waiting)
while (ts) {
if (waiting || !ts->active) {
- if ((errno = pthread_join(ts->client.thread_id, &rv)))
+ if (ts->client.thread_id &&
+ (errno = pthread_join(ts->client.thread_id, &rv)))
ERROR(&s, "pthread_join failed: %s", strerror(errno));
last->next = ts->next;
free(ts);
4 years, 5 months
master - daemon: better error path handling for shutdown
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=cc865749ae443cca276...
Commit: cc865749ae443cca276ac411f302fd8989a843ef
Parent: 43db8f8d5d7c773d4fe93f3bbf7ee03be4f6e36e
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Nov 8 13:07:06 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 22:44:25 2019 +0100
daemon: better error path handling for shutdown
Report errors for open in better order.
Ensure descriptors are not leaked.
---
libdaemon/server/daemon-server.c | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c
index 0b1810c..b45c0e5 100644
--- a/libdaemon/server/daemon-server.c
+++ b/libdaemon/server/daemon-server.c
@@ -505,19 +505,22 @@ static int _handle_connect(daemon_state s)
client.socket_fd = accept(s.socket_fd, (struct sockaddr *) &sockaddr, &sl);
if (client.socket_fd < 0) {
- if (errno != EAGAIN || !_shutdown_requested)
+ if (errno != EAGAIN)
ERROR(&s, "Failed to accept connection: %s.", strerror(errno));
- return 0;
+ goto bad;
+ }
+
+ if (_shutdown_requested) {
+ ERROR(&s, "Shutdown requested.");
+ goto bad;
}
- if (fcntl(client.socket_fd, F_SETFD, FD_CLOEXEC))
+ if (fcntl(client.socket_fd, F_SETFD, FD_CLOEXEC))
WARN(&s, "setting CLOEXEC on client socket fd %d failed", client.socket_fd);
if (!(ts = malloc(sizeof(thread_state)))) {
- if (close(client.socket_fd))
- perror("close");
ERROR(&s, "Failed to allocate thread state");
- return 0;
+ goto bad;
}
ts->next = s.threads->next;
@@ -529,10 +532,16 @@ static int _handle_connect(daemon_state s)
if ((errno = pthread_create(&ts->client.thread_id, NULL, _client_thread, ts))) {
ERROR(&s, "Failed to create client thread: %s.", strerror(errno));
- return 0;
+ ts->active = 0;
+ goto bad;
}
return 1;
+bad:
+ if ((client.socket_fd >= 0) && close(client.socket_fd))
+ perror("close");
+
+ return 0;
}
static void _reap(daemon_state s, int waiting)
4 years, 5 months
master - cov: ensure read_ahead is available
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=43db8f8d5d7c773d4fe...
Commit: 43db8f8d5d7c773d4fe93f3bbf7ee03be4f6e36e
Parent: 30a23a194167d270d235afea469352f3d709a466
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Nov 1 21:01:51 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 22:44:25 2019 +0100
cov: ensure read_ahead is available
Make sure read_ahead pointer is not NULL when quering for RA.
---
lib/activate/dev_manager.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index 51ba298..8569e86 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -278,7 +278,7 @@ static int _info_run(const char *dlid, struct dm_info *dminfo,
(strcmp(name_check, devname) != 0))
dminfo->exists = 0; /* mismatching name -> device does not exist */
- if (with_read_ahead && dminfo->exists) {
+ if (with_read_ahead && read_ahead && dminfo->exists) {
if (!dm_task_get_read_ahead(dmt, read_ahead))
goto_out;
} else if (read_ahead)
4 years, 5 months
master - cov: missing checks of syscalls
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=30a23a194167d270d23...
Commit: 30a23a194167d270d235afea469352f3d709a466
Parent: 8679d45917c321ea76c48c150395db833ba7b812
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Nov 8 15:42:42 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 22:44:25 2019 +0100
cov: missing checks of syscalls
Check for sigprocmask errors
---
libdaemon/server/daemon-server.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c
index 2df4e89..0b1810c 100644
--- a/libdaemon/server/daemon-server.c
+++ b/libdaemon/server/daemon-server.c
@@ -653,14 +653,17 @@ void daemon_start(daemon_state s)
FD_ZERO(&in);
FD_SET(s.socket_fd, &in);
- sigprocmask(SIG_SETMASK, &new_set, NULL);
+ if (sigprocmask(SIG_SETMASK, &new_set, NULL))
+ perror("sigprocmask error");
if (_shutdown_requested && !s.threads->next) {
- sigprocmask(SIG_SETMASK, &old_set, NULL);
+ if (sigprocmask(SIG_SETMASK, &old_set, NULL))
+ perror("sigprocmask error");
INFO(&s, "%s shutdown requested", s.name);
break;
}
ret = pselect(s.socket_fd + 1, &in, NULL, NULL, _get_timeout(s), &old_set);
- sigprocmask(SIG_SETMASK, &old_set, NULL);
+ if (sigprocmask(SIG_SETMASK, &old_set, NULL))
+ perror("sigprocmask error");
if (ret < 0) {
if (errno != EINTR && errno != EAGAIN &&
4 years, 5 months
master - gcc: avoid declaration shadowing
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=8679d45917c321ea76c...
Commit: 8679d45917c321ea76c48c150395db833ba7b812
Parent: e184f77109d973297fa80edaa8dca7447b64b40e
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Nov 1 19:35:28 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 22:44:18 2019 +0100
gcc: avoid declaration shadowing
dev_name is global in device.h
---
lib/activate/dev_manager.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index 1adb44d..51ba298 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -259,7 +259,7 @@ static int _info_run(const char *dlid, struct dm_info *dminfo,
void *target = NULL;
uint64_t target_start, target_length, start, length;
char *target_name, *target_params;
- const char *dev_name;
+ const char *devname;
if (seg_status) {
dmtask = DM_DEVICE_STATUS;
@@ -274,8 +274,8 @@ static int _info_run(const char *dlid, struct dm_info *dminfo,
return_0;
if (name_check && dminfo->exists &&
- (dev_name = dm_task_get_name(dmt)) &&
- (strcmp(name_check, dev_name) != 0))
+ (devname = dm_task_get_name(dmt)) &&
+ (strcmp(name_check, devname) != 0))
dminfo->exists = 0; /* mismatching name -> device does not exist */
if (with_read_ahead && dminfo->exists) {
4 years, 5 months
stable-2.02 - tests: fix else path
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=fa4ce13e3f407710510...
Commit: fa4ce13e3f4077105106ab6c3aa80eba1b7ba284
Parent: c3aa2988d1d0f1ebc9b783b9644255073987342b
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Nov 11 18:00:27 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 18:00:27 2019 +0100
tests: fix else path
Code when raid is present has some 'extra' effect that can't be skipped.
---
test/shell/lvmetad-disabled.sh | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/test/shell/lvmetad-disabled.sh b/test/shell/lvmetad-disabled.sh
index 0a9f44c..c0b1369 100644
--- a/test/shell/lvmetad-disabled.sh
+++ b/test/shell/lvmetad-disabled.sh
@@ -79,6 +79,9 @@ grep "WARNING: Not using lvmetad" out
pvremove "$dev1" 2>&1 | tee out
grep "WARNING: Not using lvmetad" out
+else
+vgremove -y $vg1 2>&1 | tee out
+pvremove "$dev1" 2>&1 | tee out
fi
pvscan --cache 2>&1 | tee out
4 years, 5 months
stable-2.02 - WHATS_NEW: update
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=c3aa2988d1d0f1ebc9b...
Commit: c3aa2988d1d0f1ebc9b783b9644255073987342b
Parent: 7581cc20c9d24b8c7801d011eecef5fbc1976b60
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Nov 11 17:44:14 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 17:50:03 2019 +0100
WHATS_NEW: update
---
WHATS_NEW | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 256d947..49c31a4 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.187 -
===================================
+ Fix resize of thin-pool with data and metadata of different segtype.
Fix splitting mirror leg in cluster.
Fix activation order when removing merged snapshot.
Add lvextend-raid.sh to check on RaidLV extensions synchronization.
4 years, 5 months
stable-2.02 - tests: add test of resize of different segtypes
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7581cc20c9d24b8c780...
Commit: 7581cc20c9d24b8c7801d011eecef5fbc1976b60
Parent: b9926fb1be3684926ac871b9397839df4c337237
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Nov 11 17:43:24 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 17:50:03 2019 +0100
tests: add test of resize of different segtypes
---
test/shell/lvextend-thin-raid.sh | 13 ++++++++++++-
1 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/test/shell/lvextend-thin-raid.sh b/test/shell/lvextend-thin-raid.sh
index afbc630..a706887 100644
--- a/test/shell/lvextend-thin-raid.sh
+++ b/test/shell/lvextend-thin-raid.sh
@@ -20,7 +20,7 @@ export LVM_TEST_THIN_REPAIR_CMD=${LVM_TEST_THIN_REPAIR_CMD-/bin/false}
aux have_thin 1 0 0 || skip
aux have_raid 1 3 0 || skip
-aux prepare_vg 6
+aux prepare_vg 6 600
lvcreate --type raid1 -l2 --nosync -n pool $vg
lvconvert --yes --thinpool $vg/pool "$dev3"
@@ -49,4 +49,15 @@ lvextend --poolmetadatasize +1 --size +1 $vg/pool
check lv_field $vg/pool_tdata lv_size "7.50m" -a
check lv_field $vg/pool_tmeta lv_size "4.50m" -a
+lvremove -f $vg
+
+# check resize of pool and metadata being a different segtype
+# https://bugzilla.redhat.com/1722666
+lvcreate -L4 -n pool $vg
+lvcreate --type raid1 -m1 -L2 --nosync -n meta $vg
+lvconvert --yes --thinpool $vg/pool --poolmetadata $vg/meta
+# using big enough pool so resize of pool metadata is enforced
+# (and it's using a differnt segtype)
+lvextend -L3G $vg/pool
+
vgremove -ff $vg
4 years, 5 months
stable-2.02 - lvextend: fix resizing volumes of different segtype
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=b9926fb1be3684926ac...
Commit: b9926fb1be3684926ac871b9397839df4c337237
Parent: 2f615e73de8aad74da77e69d57d012e5a1006389
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Nov 11 17:36:58 2019 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Nov 11 17:48:49 2019 +0100
lvextend: fix resizing volumes of different segtype
When resizing 2 volumes like thin-pool and it's metadata and they
would be of a different type - command would be actually expecting
both LVs being of a same segtype - and would throw an error in
case they are different.
This patch fixes is by setting a new segtype from last segment of
2nd. extented device.
Also it fixes the possible 'percentage' extension setup that
might have been used for 'primary' volume - while the 'secondary'
LV always goes with direct size - as we do not support 'percentage'
setup for them
This affects maily usage of thin-pool where the extension of
thin-pool data size may also lead to extension of metadata size.
---
lib/metadata/lv_manip.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 76451ea..c8acb6c 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -5446,6 +5446,8 @@ static struct logical_volume *_lvresize_setup_aux(struct logical_volume *lv,
struct lv_segment *mseg = last_seg(lv);
lp->alloc = lv->alloc;
+ lp->percent = PERCENT_NONE;
+ lp->segtype = mseg->segtype;
lp->mirrors = seg_is_mirrored(mseg) ? lv_mirror_count(lv) : 0;
lp->resizefs = 0;
lp->stripes = lp->mirrors ? mseg->area_count / lp->mirrors : 0;
4 years, 5 months