main - WHATS_NEW: update
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=f49bedc0295d4b03800...
Commit: f49bedc0295d4b038004adfda64fafcfa8b1d2c7
Parent: 04cd4df847c682a65fa4c451d78b76a052d1155d
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 15:34:12 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
WHATS_NEW: update
---
WHATS_NEW | 3 +++
1 file changed, 3 insertions(+)
diff --git a/WHATS_NEW b/WHATS_NEW
index bf2c5806c..01ee40dc4 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,8 @@
Version 2.03.12 -
===================================
+ Add workaround to avoid read of internal 'converted' devices.
+ Prohibit merging snapshot into the read-only thick snapshot origin.
+ Restore support for flipping rw/r permissions for thin snapshot origin.
Support resize of cached volumes.
Disable autoactivation with global/event_activation=0.
Check if lvcreate passes read_only_volume_list with tags and skips zeroing.
2 years, 3 months
main - gcc: drop unused assingment
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=04cd4df847c682a65fa...
Commit: 04cd4df847c682a65fa4c451d78b76a052d1155d
Parent: a1e2541333ed551c41882e2a636a1ab981d425b9
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 14:55:35 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
gcc: drop unused assingment
---
lib/config/config.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/config/config.c b/lib/config/config.c
index f9ca56677..96f2ad58d 100644
--- a/lib/config/config.c
+++ b/lib/config/config.c
@@ -710,7 +710,7 @@ static struct dm_config_value *_get_def_array_values(struct cmd_context *cmd,
return array;
}
- if (!(p = token = enc_value = strdup(def_enc_value))) {
+ if (!(token = enc_value = strdup(def_enc_value))) {
log_error("_get_def_array_values: strdup failed");
return NULL;
}
2 years, 3 months
main - gcc: ensure pointer is always defined
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=a1e2541333ed551c418...
Commit: a1e2541333ed551c41882e2a636a1ab981d425b9
Parent: 82bffa99ada0173704739b6fff856a3d6cb5455d
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 14:30:58 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
gcc: ensure pointer is always defined
---
daemons/lvmlockd/lvmlockd-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
index c4abf66be..b271a9aee 100644
--- a/daemons/lvmlockd/lvmlockd-core.c
+++ b/daemons/lvmlockd/lvmlockd-core.c
@@ -872,7 +872,7 @@ static int read_adopt_file(struct list_head *vg_lockd)
char vg_uuid[72];
char lm_type_str[16];
char mode[8];
- struct lockspace *ls, *ls2;
+ struct lockspace *ls = NULL, *ls2;
struct resource *r;
FILE *fp;
2 years, 3 months
main - libdm: simplify line emitter checking
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=82bffa99ada01737047...
Commit: 82bffa99ada0173704739b6fff856a3d6cb5455d
Parent: 4b371246f52d2b3296ec27467a15a35a18b40542
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 15:10:28 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
libdm: simplify line emitter checking
---
libdm/libdm-deptree.c | 20 ++++++++------------
libdm/libdm-report.c | 2 +-
2 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
index 336cbb696..bf027ee81 100644
--- a/libdm/libdm-deptree.c
+++ b/libdm/libdm-deptree.c
@@ -2231,7 +2231,7 @@ static int _mirror_emit_segment_line(struct dm_task *dmt, struct load_segment *s
EMIT_PARAMS(pos, " %u ", seg->mirror_area_count);
- if (_emit_areas_line(dmt, seg, params, paramsize, &pos) <= 0)
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
return_0;
if (handle_errors)
@@ -2433,7 +2433,7 @@ static int _raid_emit_segment_line(struct dm_task *dmt, uint32_t major,
/* Print number of metadata/data device pairs */
EMIT_PARAMS(pos, " %u", area_count);
- if (_emit_areas_line(dmt, seg, params, paramsize, &pos) <= 0)
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
return_0;
return 1;
@@ -2561,7 +2561,6 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
size_t paramsize)
{
int pos = 0;
- int r;
int target_type_is_raid = 0;
char originbuf[DM_FORMAT_DEV_BUFSIZE], cowbuf[DM_FORMAT_DEV_BUFSIZE];
@@ -2572,8 +2571,7 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
break;
case SEG_MIRRORED:
/* Mirrors are pretty complicated - now in separate function */
- r = _mirror_emit_segment_line(dmt, seg, params, paramsize);
- if (!r)
+ if (!_mirror_emit_segment_line(dmt, seg, params, paramsize))
return_0;
break;
case SEG_SNAPSHOT:
@@ -2619,9 +2617,8 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
case SEG_RAID6_LA_6:
case SEG_RAID6_RA_6:
target_type_is_raid = 1;
- r = _raid_emit_segment_line(dmt, major, minor, seg, seg_start,
- params, paramsize);
- if (!r)
+ if (!_raid_emit_segment_line(dmt, major, minor, seg, seg_start,
+ params, paramsize))
return_0;
break;
@@ -2652,10 +2649,9 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
case SEG_CRYPT:
case SEG_LINEAR:
case SEG_STRIPED:
- if ((r = _emit_areas_line(dmt, seg, params, paramsize, &pos)) <= 0) {
- stack;
- return r;
- }
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
+ return_0;
+
if (!params[0]) {
log_error("No parameters supplied for %s target "
"%u:%u.", _dm_segtypes[seg->type].target,
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index b0c89ab61..a1c07badd 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -491,7 +491,7 @@ static int _report_field_string_list(struct dm_report *rh,
delimiter = ",";
delimiter_len = strlen(delimiter);
- i = pos = len = 0;
+ i = pos = 0;
dm_list_iterate_items(sl, data) {
arr[i].str = sl->str;
if (!sort) {
2 years, 3 months
main - device_mapper: simplify line emitter checking
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=4b371246f52d2b3296e...
Commit: 4b371246f52d2b3296ec27467a15a35a18b40542
Parent: a3835861774f4758e0de2a4b462eb51b91a3f09b
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 15:22:39 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
device_mapper: simplify line emitter checking
---
device_mapper/libdm-deptree.c | 22 +++++++++-------------
device_mapper/libdm-report.c | 2 +-
2 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/device_mapper/libdm-deptree.c b/device_mapper/libdm-deptree.c
index 5b60dc91a..ec345ac55 100644
--- a/device_mapper/libdm-deptree.c
+++ b/device_mapper/libdm-deptree.c
@@ -2382,7 +2382,7 @@ static int _mirror_emit_segment_line(struct dm_task *dmt, struct load_segment *s
EMIT_PARAMS(pos, " %u ", seg->mirror_area_count);
- if (_emit_areas_line(dmt, seg, params, paramsize, &pos) <= 0)
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
return_0;
if (handle_errors)
@@ -2584,7 +2584,7 @@ static int _raid_emit_segment_line(struct dm_task *dmt, uint32_t major,
/* Print number of metadata/data device pairs */
EMIT_PARAMS(pos, " %u", area_count);
- if (_emit_areas_line(dmt, seg, params, paramsize, &pos) <= 0)
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
return_0;
return 1;
@@ -2927,7 +2927,6 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
size_t paramsize)
{
int pos = 0;
- int r;
int target_type_is_raid = 0;
char originbuf[DM_FORMAT_DEV_BUFSIZE], cowbuf[DM_FORMAT_DEV_BUFSIZE];
@@ -2938,8 +2937,7 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
break;
case SEG_MIRRORED:
/* Mirrors are pretty complicated - now in separate function */
- r = _mirror_emit_segment_line(dmt, seg, params, paramsize);
- if (!r)
+ if (!_mirror_emit_segment_line(dmt, seg, params, paramsize))
return_0;
break;
case SEG_SNAPSHOT:
@@ -2960,7 +2958,7 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
EMIT_PARAMS(pos, "%u %u ", seg->area_count, seg->stripe_size);
break;
case SEG_VDO:
- if (!(r = _vdo_emit_segment_line(dmt, seg, params, paramsize)))
+ if (!_vdo_emit_segment_line(dmt, seg, params, paramsize))
return_0;
break;
case SEG_CRYPT:
@@ -2989,9 +2987,8 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
case SEG_RAID6_LA_6:
case SEG_RAID6_RA_6:
target_type_is_raid = 1;
- r = _raid_emit_segment_line(dmt, major, minor, seg, seg_start,
- params, paramsize);
- if (!r)
+ if (!_raid_emit_segment_line(dmt, major, minor, seg, seg_start,
+ params, paramsize))
return_0;
break;
@@ -3032,10 +3029,9 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
case SEG_CRYPT:
case SEG_LINEAR:
case SEG_STRIPED:
- if ((r = _emit_areas_line(dmt, seg, params, paramsize, &pos)) <= 0) {
- stack;
- return r;
- }
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
+ return_0;
+
if (!params[0]) {
log_error("No parameters supplied for %s target "
"%u:%u.", _dm_segtypes[seg->type].target,
diff --git a/device_mapper/libdm-report.c b/device_mapper/libdm-report.c
index 9279e3370..1928354d3 100644
--- a/device_mapper/libdm-report.c
+++ b/device_mapper/libdm-report.c
@@ -492,7 +492,7 @@ static int _report_field_string_list(struct dm_report *rh,
delimiter = ",";
delimiter_len = strlen(delimiter);
- i = pos = len = 0;
+ i = pos = 0;
dm_list_iterate_items(sl, data) {
arr[i].str = sl->str;
if (!sort) {
2 years, 3 months
main - label: avoid rescaning unusable DM devices
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=a3835861774f4758e0d...
Commit: a3835861774f4758e0de2a4b462eb51b91a3f09b
Parent: f90082ce8f218781ff3b9361e748dbff0ff0e2e3
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 00:43:40 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
label: avoid rescaning unusable DM devices
---
lib/label/label.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/lib/label/label.c b/lib/label/label.c
index 1e777d7c2..030d2c578 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -707,6 +707,19 @@ static int _scan_list(struct cmd_context *cmd, struct dev_filter *f,
if (!rem_prefetches)
break;
+ /* FIXME: figure better solution to avoid opening DM we shouldn't open */
+ if (dm_is_dm_major(MAJOR(devl->dev->dev)) &&
+ !device_is_usable(devl->dev, (struct dev_usable_check_params) {
+ .check_blocked = 1,
+ .check_suspended = ignore_suspended_devices(),
+ .check_reserved = 1,
+ .check_error_target = 1,
+ })) {
+ log_debug_devs("Scan skips unusuable DM device %s.", dev_name(devl->dev));
+ dm_list_del(&devl->list);
+ continue;
+ }
+
if (!_in_bcache(devl->dev)) {
if (!_scan_dev_open(devl->dev)) {
log_debug_devs("Scan failed to open %s.", dev_name(devl->dev));
2 years, 3 months
main - lvconvert: read-only origin cannot be merged
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=f90082ce8f218781ff3...
Commit: f90082ce8f218781ff3b9361e748dbff0ff0e2e3
Parent: 289518005834b5844f88ce1f22265df99f7072d0
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 00:40:21 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
lvconvert: read-only origin cannot be merged
When user sets snapshost origin as read-only,
lvm will not allow simple merge and user needs to
flip permission,
---
tools/lvconvert.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index a72126bf4..77afaf487 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -2162,15 +2162,21 @@ static int _lvconvert_merge_old_snapshot(struct cmd_context *cmd,
log_error("Cannot merge snapshot %s into the origin %s "
"with merging snapshot %s.",
display_lvname(lv), display_lvname(origin),
- display_lvname(find_snapshot(origin)->lv));
+ display_lvname(snap_seg->lv));
return 0;
}
- if (lv_is_external_origin(origin_from_cow(lv))) {
+ if (lv_is_external_origin(origin)) {
log_error("Cannot merge snapshot %s into "
"the read-only external origin %s.",
- display_lvname(lv),
- display_lvname(origin_from_cow(lv)));
+ display_lvname(lv), display_lvname(origin));
+ return 0;
+ }
+
+ if (!(origin->status & LVM_WRITE)) {
+ log_error("Cannot merge snapshot %s into "
+ "the read-only origin %s. (Use lvchange -p rw).",
+ display_lvname(lv), display_lvname(origin));
return 0;
}
2 years, 3 months
main - lvchange: snapshot thick origin permission rw/r
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=289518005834b5844f8...
Commit: 289518005834b5844f88ce1f22265df99f7072d0
Parent: 3cc9efc0ed48f7053f2e92f251586ea7d3edc06a
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 00:38:37 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
lvchange: snapshot thick origin permission rw/r
User is allowed to change permission for thick origin.
FIXME: it's not quite clear why few others are prohibited to change.
---
tools/command-lines.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/command-lines.in b/tools/command-lines.in
index 8ea65ca83..c5c93abd3 100644
--- a/tools/command-lines.in
+++ b/tools/command-lines.in
@@ -250,7 +250,7 @@ RULE: --writebehind --writemostly and LV_raid1
RULE: --cachemode --cachepolicy --cachesettings and LV_cache LV_cachepool LV_writecache
RULE: --errorwhenfull --discards --zero and LV_thinpool
RULE: --permission not lv_is_external_origin lv_is_raid_metadata lv_is_raid_image LV_thinpool
-RULE: --alloc --contiguous --metadataprofile --permission --persistent --profile --readahead not lv_is_thick_origin
+RULE: --alloc --contiguous --metadataprofile --persistent --profile --readahead not lv_is_thick_origin
RULE: --alloc --discards --zero --cachemode --cachepolicy --cachesettings not lv_is_partial
# It's unfortunate that activate needs to be optionally allowed here,
2 years, 3 months
main - snapshot: create origin of virtual snap read only
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=3cc9efc0ed48f7053f2...
Commit: 3cc9efc0ed48f7053f2e92f251586ea7d3edc06a
Parent: 96910de4c7acbc11dc9f4c43925765847a059871
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Feb 9 22:31:31 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:39:03 2021 +0100
snapshot: create origin of virtual snap read only
When creating old fashioned way thick virtual snapshot,
use read-only 'zero' _vorigin device.
---
lib/metadata/lv_manip.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 833d7f8c5..32bdc7990 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -8747,7 +8747,7 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
/* Create zero origin volume for spare snapshot */
if (lp->virtual_extents &&
!(origin_lv = _create_virtual_origin(cmd, vg, lv->name,
- lp->permission,
+ (lp->permission & ~LVM_WRITE),
lp->virtual_extents)))
goto revert_new_lv;
2 years, 3 months
main - dev-cache: remove duplicated allocation
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=96910de4c7acbc11dc9...
Commit: 96910de4c7acbc11dc9f4c43925765847a059871
Parent: f74f94c2ddb1d33d75d325c959344a566a621fd5
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 14:33:17 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 10 15:38:18 2021 +0100
dev-cache: remove duplicated allocation
Merge mistake missed to remove allocation that is now postponed
until it's really needed.
---
lib/device/dev-cache.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c
index 2783d4acc..67e1386d3 100644
--- a/lib/device/dev-cache.c
+++ b/lib/device/dev-cache.c
@@ -329,7 +329,7 @@ enum add_hash {
static int _add_alias(struct device *dev, const char *path, enum add_hash hash)
{
- struct dm_str_list *sl = _zalloc(sizeof(*sl));
+ struct dm_str_list *sl;
struct dm_str_list *strl;
const char *oldpath;
int prefer_old = 1;
2 years, 3 months