master - radix_tree: add remove method
by Joe Thornber
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=b7fd8ac8ebf07f7a811...
Commit: b7fd8ac8ebf07f7a8119aae723f40ef6f85273ce
Parent: 87291a28328e6b786ea6674aa52003e7f4af0ac3
Author: Joe Thornber <ejt(a)redhat.com>
AuthorDate: Wed May 23 12:48:06 2018 +0100
Committer: Joe Thornber <ejt(a)redhat.com>
CommitterDate: Wed May 23 12:48:06 2018 +0100
radix_tree: add remove method
---
base/data-struct/radix-tree.c | 185 +++++++++++++++++++++++++++++++++++++++-
base/data-struct/radix-tree.h | 2 +-
test/unit/radix_tree_t.c | 112 ++++++++++++++++++++++++-
3 files changed, 289 insertions(+), 10 deletions(-)
diff --git a/base/data-struct/radix-tree.c b/base/data-struct/radix-tree.c
index b4b6791..a359aaa 100644
--- a/base/data-struct/radix-tree.c
+++ b/base/data-struct/radix-tree.c
@@ -68,6 +68,7 @@ struct node48 {
};
struct node256 {
+ uint32_t nr_entries;
struct value values[256];
};
@@ -397,10 +398,13 @@ static bool _insert_node48(struct value *v, uint8_t *kb, uint8_t *ke, union radi
static bool _insert_node256(struct value *v, uint8_t *kb, uint8_t *ke, union radix_value rv)
{
struct node256 *n256 = v->value.ptr;
- if (!_insert(n256->values + *kb, kb + 1, ke, rv)) {
- n256->values[*kb].type = UNSET;
+ bool was_unset = n256->values[*kb].type == UNSET;
+
+ if (!_insert(n256->values + *kb, kb + 1, ke, rv))
return false;
- }
+
+ if (was_unset)
+ n256->nr_entries++;
return true;
}
@@ -538,9 +542,180 @@ bool radix_tree_insert(struct radix_tree *rt, uint8_t *kb, uint8_t *ke, union ra
return false;
}
-void radix_tree_delete(struct radix_tree *rt, uint8_t *key_begin, uint8_t *key_end)
+// Note the degrade functions also free the original node.
+static void _degrade_to_n4(struct node16 *n16, struct value *result)
+{
+ struct node4 *n4 = zalloc(sizeof(*n4));
+
+ n4->nr_entries = n16->nr_entries;
+ memcpy(n4->keys, n16->keys, n16->nr_entries * sizeof(*n4->keys));
+ memcpy(n4->values, n16->values, n16->nr_entries * sizeof(*n4->values));
+ free(n16);
+
+ result->type = NODE4;
+ result->value.ptr = n4;
+}
+
+static void _degrade_to_n16(struct node48 *n48, struct value *result)
+{
+ struct node4 *n16 = zalloc(sizeof(*n16));
+
+ n16->nr_entries = n48->nr_entries;
+ memcpy(n16->keys, n48->keys, n48->nr_entries * sizeof(*n16->keys));
+ memcpy(n16->values, n48->values, n48->nr_entries * sizeof(*n16->values));
+ free(n48);
+
+ result->type = NODE16;
+ result->value.ptr = n16;
+}
+
+static void _degrade_to_n48(struct node256 *n256, struct value *result)
+{
+ unsigned i, count = 0;
+ struct node4 *n48 = zalloc(sizeof(*n48));
+
+ n48->nr_entries = n256->nr_entries;
+ for (i = 0; i < 256; i++) {
+ if (n256->values[i].type == UNSET)
+ continue;
+
+ n48->keys[count] = i;
+ n48->values[count] = n256->values[i];
+ count++;
+ }
+ free(n256);
+
+ result->type = NODE48;
+ result->value.ptr = n48;
+}
+
+static bool _remove(struct value *root, uint8_t *kb, uint8_t *ke)
+{
+ bool r;
+ unsigned i;
+ struct value_chain *vc;
+ struct prefix_chain *pc;
+ struct node4 *n4;
+ struct node16 *n16;
+ struct node48 *n48;
+ struct node256 *n256;
+
+ if (kb == ke) {
+ if (root->type == VALUE) {
+ root->type = UNSET;
+ return true;
+
+ } else if (root->type == VALUE_CHAIN) {
+ vc = root->value.ptr;
+ memcpy(root, &vc->child, sizeof(*root));
+ free(vc);
+ return true;
+
+ } else
+ return false;
+ }
+
+ switch (root->type) {
+ case UNSET:
+ case VALUE:
+ // this is a value for a prefix of the key
+ return false;
+
+ case VALUE_CHAIN:
+ vc = root->value.ptr;
+ r = _remove(&vc->child, kb, ke);
+ if (r && (vc->child.type == UNSET)) {
+ memcpy(root, &vc->child, sizeof(*root));
+ free(vc);
+ }
+ return r;
+
+ case PREFIX_CHAIN:
+ pc = root->value.ptr;
+ if (ke - kb < pc->len)
+ return false;
+
+ for (i = 0; i < pc->len; i++)
+ if (kb[i] != pc->prefix[i])
+ return false;
+
+ return _remove(&pc->child, kb + pc->len, ke);
+
+ case NODE4:
+ n4 = root->value.ptr;
+ for (i = 0; i < n4->nr_entries; i++) {
+ if (n4->keys[i] == *kb) {
+ r = _remove(n4->values + i, kb + 1, ke);
+ if (r && n4->values[i].type == UNSET) {
+ n4->nr_entries--;
+ if (i < n4->nr_entries)
+ // slide the entries down
+ memmove(n4->keys + i, n4->keys + i + 1,
+ sizeof(*n4->keys) * (n4->nr_entries - i));
+ if (!n4->nr_entries)
+ root->type = UNSET;
+ }
+ return r;
+ }
+ }
+ return false;
+
+ case NODE16:
+ n16 = root->value.ptr;
+ for (i = 0; i < n16->nr_entries; i++) {
+ if (n16->keys[i] == *kb) {
+ r = _remove(n16->values + i, kb + 1, ke);
+ if (r && n16->values[i].type == UNSET) {
+ n16->nr_entries--;
+ if (i < n16->nr_entries)
+ // slide the entries down
+ memmove(n16->keys + i, n16->keys + i + 1,
+ sizeof(*n16->keys) * (n16->nr_entries - i));
+ if (n16->nr_entries <= 4)
+ _degrade_to_n4(n16, root);
+ }
+ return r;
+ }
+ }
+ return false;
+
+ case NODE48:
+ n48 = root->value.ptr;
+ i = n48->keys[*kb];
+ if (i < 48) {
+ r = _remove(n48->values + i, kb + 1, ke);
+ if (r && n48->values[i].type == UNSET) {
+ n48->keys[*kb] = 48;
+ n48->nr_entries--;
+ if (n48->nr_entries <= 16)
+ _degrade_to_n16(n48, root);
+ }
+ return r;
+ }
+ return false;
+
+ case NODE256:
+ n256 = root->value.ptr;
+ r = _remove(n256->values + (*kb), kb + 1, ke);
+ if (r && n256->values[*kb].type == UNSET) {
+ n256->nr_entries--;
+ if (n256->nr_entries <= 48)
+ _degrade_to_n48(n256, root);
+ }
+ return r;
+ }
+
+ return false;
+}
+
+bool radix_tree_remove(struct radix_tree *rt, uint8_t *key_begin, uint8_t *key_end)
{
- assert(0);
+ if (_remove(&rt->root, key_begin, key_end)) {
+ rt->nr_entries--;
+ return true;
+ }
+
+ return false;
}
bool radix_tree_lookup(struct radix_tree *rt,
diff --git a/base/data-struct/radix-tree.h b/base/data-struct/radix-tree.h
index d84e3c5..983b5fa 100644
--- a/base/data-struct/radix-tree.h
+++ b/base/data-struct/radix-tree.h
@@ -34,7 +34,7 @@ void radix_tree_destroy(struct radix_tree *rt, radix_value_dtr dtr, void *contex
unsigned radix_tree_size(struct radix_tree *rt);
bool radix_tree_insert(struct radix_tree *rt, uint8_t *kb, uint8_t *ke, union radix_value v);
-void radix_tree_delete(struct radix_tree *rt, uint8_t *kb, uint8_t *ke);
+bool radix_tree_remove(struct radix_tree *rt, uint8_t *kb, uint8_t *ke);
bool radix_tree_lookup(struct radix_tree *rt,
uint8_t *kb, uint8_t *ke, union radix_value *result);
diff --git a/test/unit/radix_tree_t.c b/test/unit/radix_tree_t.c
index 4455f2b..9f2ba07 100644
--- a/test/unit/radix_tree_t.c
+++ b/test/unit/radix_tree_t.c
@@ -152,22 +152,122 @@ static void test_prefix_keys_reversed(void *fixture)
T_ASSERT_EQUAL(v.n, 2345);
}
+static void _gen_key(uint8_t *b, uint8_t *e)
+{
+ for (; b != e; b++)
+ *b = rand() % 256;
+}
+
static void test_sparse_keys(void *fixture)
{
- unsigned i, n;
+ unsigned n;
struct radix_tree *rt = fixture;
union radix_value v;
uint8_t k[32];
for (n = 0; n < 100000; n++) {
- for (i = 0; i < 32; i++)
- k[i] = rand() % 256;
-
+ _gen_key(k, k + sizeof(k));
v.n = 1234;
T_ASSERT(radix_tree_insert(rt, k, k + 32, v));
}
}
+static void test_remove_one(void *fixture)
+{
+ struct radix_tree *rt = fixture;
+ uint8_t k[4];
+ union radix_value v;
+
+ _gen_key(k, k + sizeof(k));
+ v.n = 1234;
+ T_ASSERT(radix_tree_insert(rt, k, k + sizeof(k), v));
+ T_ASSERT(radix_tree_remove(rt, k, k + sizeof(k)));
+ T_ASSERT(!radix_tree_lookup(rt, k, k + sizeof(k), &v));
+}
+
+static void test_remove_one_byte_keys(void *fixture)
+{
+ struct radix_tree *rt = fixture;
+ unsigned i, j;
+ uint8_t k[1];
+ union radix_value v;
+
+ for (i = 0; i < 256; i++) {
+ k[0] = i;
+ v.n = i + 1000;
+ T_ASSERT(radix_tree_insert(rt, k, k + 1, v));
+ }
+
+ for (i = 0; i < 256; i++) {
+ k[0] = i;
+ T_ASSERT(radix_tree_remove(rt, k, k + 1));
+
+ for (j = i + 1; j < 256; j++) {
+ k[0] = j;
+ T_ASSERT(radix_tree_lookup(rt, k, k + 1, &v));
+ T_ASSERT_EQUAL(v.n, j + 1000);
+ }
+ }
+
+ for (i = 0; i < 256; i++) {
+ k[0] = i;
+ T_ASSERT(!radix_tree_lookup(rt, k, k + 1, &v));
+ }
+}
+
+static void test_remove_prefix_keys(void *fixture)
+{
+ struct radix_tree *rt = fixture;
+ unsigned i, j;
+ uint8_t k[32];
+ union radix_value v;
+
+ _gen_key(k, k + sizeof(k));
+
+ for (i = 0; i < 32; i++) {
+ v.n = i;
+ T_ASSERT(radix_tree_insert(rt, k, k + i, v));
+ }
+
+ for (i = 0; i < 32; i++) {
+ T_ASSERT(radix_tree_remove(rt, k, k + i));
+ for (j = i + 1; j < 32; j++) {
+ T_ASSERT(radix_tree_lookup(rt, k, k + j, &v));
+ T_ASSERT_EQUAL(v.n, j);
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ T_ASSERT(!radix_tree_lookup(rt, k, k + i, &v));
+}
+
+static void test_remove_prefix_keys_reversed(void *fixture)
+{
+ struct radix_tree *rt = fixture;
+ unsigned i, j;
+ uint8_t k[32];
+ union radix_value v;
+
+ _gen_key(k, k + sizeof(k));
+
+ for (i = 0; i < 32; i++) {
+ v.n = i;
+ T_ASSERT(radix_tree_insert(rt, k, k + i, v));
+ }
+
+ for (i = 0; i < 32; i++) {
+ fprintf(stderr, "removing %u\n", i);
+ T_ASSERT(radix_tree_remove(rt, k, k + (31 - i)));
+ for (j = 0; j < 31 - i; j++) {
+ T_ASSERT(radix_tree_lookup(rt, k, k + j, &v));
+ T_ASSERT_EQUAL(v.n, j);
+ }
+ }
+
+ for (i = 0; i < 32; i++)
+ T_ASSERT(!radix_tree_lookup(rt, k, k + i, &v));
+}
+
//----------------------------------------------------------------
#define T(path, desc, fn) register_test(ts, "/base/data-struct/radix-tree/" path, desc, fn)
@@ -188,6 +288,10 @@ void radix_tree_tests(struct dm_list *all_tests)
T("prefix-keys", "prefixes of other keys are valid keys", test_prefix_keys);
T("prefix-keys-reversed", "prefixes of other keys are valid keys", test_prefix_keys_reversed);
T("sparse-keys", "see what the memory usage is for sparsely distributed keys", test_sparse_keys);
+ T("remove-one", "remove one entry", test_remove_one);
+ T("remove-one-byte-keys", "remove many one byte keys", test_remove_one_byte_keys);
+ T("remove-prefix-keys", "remove a set of keys that have common prefixes", test_remove_prefix_keys);
+ T("remove-prefix-keys-reversed", "remove a set of keys that have common prefixes (reversed)", test_remove_prefix_keys_reversed);
dm_list_add(all_tests, &ts->list);
}
4 years, 10 months
master - scan: refresh paths and retry open
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=28c8e95d197bf512a39...
Commit: 28c8e95d197bf512a39b561281162ff4d93a598e
Parent: 9a730233c935085ec5de9440796daa0d416ba4ba
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Fri May 25 11:14:12 2018 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Fri May 25 13:09:07 2018 -0500
scan: refresh paths and retry open
If scanning fails to open any devices, refresh the
device paths in dev cache, and retry the opens.
---
lib/device/dev-cache.c | 2 +
lib/label/label.c | 115 +++++++++++++++++++++++++++++++---
test/shell/pvcreate-operation-md.sh | 6 ++
3 files changed, 112 insertions(+), 11 deletions(-)
diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c
index 975fc12..dd01558 100644
--- a/lib/device/dev-cache.c
+++ b/lib/device/dev-cache.c
@@ -1079,6 +1079,8 @@ static int _insert(const char *path, const struct stat *info,
void dev_cache_scan(void)
{
struct dir_list *dl;
+
+ log_debug_devs("Creating list of system devices.");
_cache.has_scanned = 1;
diff --git a/lib/label/label.c b/lib/label/label.c
index b9227f5..8ecaa61 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -427,7 +427,11 @@ static int _process_block(struct cmd_context *cmd, struct dev_filter *f,
static int _scan_dev_open(struct device *dev)
{
+ struct dm_list *name_list;
+ struct dm_str_list *name_sl;
const char *name;
+ struct stat sbuf;
+ int retried = 0;
int flags = 0;
int fd;
@@ -435,20 +439,30 @@ static int _scan_dev_open(struct device *dev)
return 0;
if (dev->flags & DEV_IN_BCACHE) {
- log_error("scan_dev_open %s DEV_IN_BCACHE already set", dev_name(dev));
+ /* Shouldn't happen */
+ log_error("Device open %s has DEV_IN_BCACHE already set", dev_name(dev));
dev->flags &= ~DEV_IN_BCACHE;
}
if (dev->bcache_fd > 0) {
- log_error("scan_dev_open %s already open with fd %d",
+ /* Shouldn't happen */
+ log_error("Device open %s already open with fd %d",
dev_name(dev), dev->bcache_fd);
return 0;
}
- if (!(name = dev_name_confirmed(dev, 1))) {
- log_error("scan_dev_open %s no name", dev_name(dev));
+ /*
+ * All the names for this device (major:minor) are kept on
+ * dev->aliases, the first one is the primary/preferred name.
+ */
+ if (!(name_list = dm_list_first(&dev->aliases))) {
+ /* Shouldn't happen */
+ log_error("Device open %s %d:%d has no path names.",
+ dev_name(dev), (int)MAJOR(dev->dev), (int)MINOR(dev->dev));
return 0;
}
+ name_sl = dm_list_item(name_list, struct dm_str_list);
+ name = name_sl->str;
flags |= O_RDWR;
flags |= O_DIRECT;
@@ -457,6 +471,8 @@ static int _scan_dev_open(struct device *dev)
if (dev->flags & DEV_BCACHE_EXCL)
flags |= O_EXCL;
+retry_open:
+
fd = open(name, flags, 0777);
if (fd < 0) {
@@ -464,7 +480,48 @@ static int _scan_dev_open(struct device *dev)
log_error("Can't open %s exclusively. Mounted filesystem?",
dev_name(dev));
} else {
- log_error("scan_dev_open %s failed errno %d", dev_name(dev), errno);
+ int major, minor;
+
+ /*
+ * Shouldn't happen, if it does, print stat info to help figure
+ * out what's wrong.
+ */
+
+ major = (int)MAJOR(dev->dev);
+ minor = (int)MINOR(dev->dev);
+
+ log_error("Device open %s %d:%d failed errno %d", name, major, minor, errno);
+
+ if (stat(name, &sbuf)) {
+ log_debug_devs("Device open %s %d:%d stat failed errno %d",
+ name, major, minor, errno);
+ } else if (sbuf.st_rdev != dev->dev) {
+ log_debug_devs("Device open %s %d:%d stat %d:%d does not match.",
+ name, major, minor,
+ (int)MAJOR(sbuf.st_rdev), (int)MINOR(sbuf.st_rdev));
+ }
+
+ /*
+ * FIXME: do we want to try opening this device using
+ * one of the other path aliases for the same
+ * major:minor from dev->aliases? We could iterate
+ * through those aliases to try opening each of them to
+ * find one that works. What are the consequences of
+ * using a different, non-preferred alias to a device?
+ */
+
+ if (!retried) {
+ /*
+ * FIXME: remove this, the theory for this retry is that
+ * there may be a udev race that we can sometimes mask by
+ * retrying. This is here until we can figure out if it's
+ * needed and if so fix the real problem.
+ */
+ usleep(5000);
+ log_debug_devs("Device open %s retry", dev_name(dev));
+ retried = 1;
+ goto retry_open;
+ }
}
return 0;
}
@@ -509,9 +566,10 @@ static int _scan_list(struct cmd_context *cmd, struct dev_filter *f,
{
struct dm_list wait_devs;
struct dm_list done_devs;
+ struct dm_list reopen_devs;
struct device_list *devl, *devl2;
struct block *bb;
- int scan_open_errors = 0;
+ int retried_open = 0;
int scan_read_errors = 0;
int scan_process_errors = 0;
int scan_failed_count = 0;
@@ -524,6 +582,7 @@ static int _scan_list(struct cmd_context *cmd, struct dev_filter *f,
dm_list_init(&wait_devs);
dm_list_init(&done_devs);
+ dm_list_init(&reopen_devs);
log_debug_devs("Scanning %d devices for VG info", dm_list_size(devs));
@@ -547,9 +606,7 @@ static int _scan_list(struct cmd_context *cmd, struct dev_filter *f,
if (!_scan_dev_open(devl->dev)) {
log_debug_devs("Scan failed to open %s.", dev_name(devl->dev));
dm_list_del(&devl->list);
- dm_list_add(&done_devs, &devl->list);
- scan_open_errors++;
- scan_failed_count++;
+ dm_list_add(&reopen_devs, &devl->list);
continue;
}
}
@@ -612,8 +669,44 @@ static int _scan_list(struct cmd_context *cmd, struct dev_filter *f,
if (!dm_list_empty(devs))
goto scan_more;
- log_debug_devs("Scanned devices: open errors %d read errors %d process errors %d",
- scan_open_errors, scan_read_errors, scan_process_errors);
+ /*
+ * We're done scanning all the devs. If we failed to open any of them
+ * the first time through, refresh device paths and retry. We failed
+ * to open the devs on the reopen_devs list.
+ *
+ * FIXME: it's not clear if or why this helps.
+ *
+ * FIXME: should we delete the first path name from dev->aliases that
+ * we failed to open the first time before retrying? If that path
+ * still exists on the system, dev_cache_scan should put it back, but
+ * if it doesn't exist we don't want to try using it again.
+ */
+ if (!dm_list_empty(&reopen_devs)) {
+ if (retried_open) {
+ /* Don't try again. */
+ scan_failed_count += dm_list_size(&reopen_devs);
+ dm_list_splice(&done_devs, &reopen_devs);
+ goto out;
+ }
+ retried_open = 1;
+
+ /*
+ * This will search the system's /dev for new path names and
+ * could help us reopen the device if it finds a new preferred
+ * path name for this dev's major:minor. It does that by
+ * inserting a new preferred path name on dev->aliases. open
+ * uses the first name from that list.
+ */
+ log_debug_devs("Scanning refreshing device paths.");
+ dev_cache_scan();
+
+ /* Put devs that failed to open back on the original list to retry. */
+ dm_list_splice(devs, &reopen_devs);
+ goto scan_more;
+ }
+out:
+ log_debug_devs("Scanned devices: read errors %d process errors %d failed %d",
+ scan_read_errors, scan_process_errors, scan_failed_count);
if (failed)
*failed = scan_failed_count;
diff --git a/test/shell/pvcreate-operation-md.sh b/test/shell/pvcreate-operation-md.sh
index 359113d..f534785 100644
--- a/test/shell/pvcreate-operation-md.sh
+++ b/test/shell/pvcreate-operation-md.sh
@@ -90,6 +90,12 @@ EOF
maj=$(($(stat -L --printf=0x%t "${mddev}p1")))
min=$(($(stat -L --printf=0x%T "${mddev}p1")))
+ ls /sys/dev/block/$maj:$min/
+ ls /sys/dev/block/$maj:$min/holders/
+ cat /sys/dev/block/$maj:$min/dev
+ cat /sys/dev/block/$maj:$min/stat
+ cat /sys/dev/block/$maj:$min/size
+
sysfs_alignment_offset="/sys/dev/block/$maj:$min/alignment_offset"
[ -f "$sysfs_alignment_offset" ] && \
alignment_offset=$(< "$sysfs_alignment_offset") || \
4 years, 10 months
master - format_text: Use versionsort to sort archive files
by Marian Csontos
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=9a730233c935085ec5d...
Commit: 9a730233c935085ec5de9440796daa0d416ba4ba
Parent: 0ecf232194986b12c3ae95b3f93e7fdd56158dc1
Author: Alasdair G Kergon <agk(a)redhat.com>
AuthorDate: Fri Feb 9 01:08:55 2018 +0000
Committer: Marian Csontos <mcsontos(a)redhat.com>
CommitterDate: Thu May 24 17:51:03 2018 +0200
format_text: Use versionsort to sort archive files
Ensure that vg_100000-* follows vg_99999-* so that the expiry logic
doesn't stop too early.
https://bugzilla.redhat.com/1481085
---
WHATS_NEW | 1 +
lib/format_text/archive.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 35695ab..25707ab 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.178 -
====================================
+ Use versionsort to fix archive file expiry beyond 100000 files.
Version 2.02.178-rc1 - 24th May 2018
====================================
diff --git a/lib/format_text/archive.c b/lib/format_text/archive.c
index 690bc74..533e91c 100644
--- a/lib/format_text/archive.c
+++ b/lib/format_text/archive.c
@@ -135,8 +135,8 @@ static struct dm_list *_scan_archive(struct dm_pool *mem,
dm_list_init(results);
- /* Sort fails beyond 5-digit indexes */
- if ((count = scandir(dir, &dirent, NULL, alphasort)) < 0) {
+ /* Use versionsort to handle numbers beyond 5 digits */
+ if ((count = scandir(dir, &dirent, NULL, versionsort)) < 0) {
log_error("Couldn't scan the archive directory (%s).", dir);
return 0;
}
4 years, 10 months
v2_02_178-rc1 annotated tag has been created
by Marian Csontos
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=deb1c80ba74b083ead9...
Commit: deb1c80ba74b083ead9a158998c3e817b0e9fa72
Parent: 0000000000000000000000000000000000000000
Author: Marian Csontos <mcsontos(a)redhat.com>
AuthorDate: 2018-05-24 13:15 +0000
Committer: Marian Csontos <mcsontos(a)redhat.com>
CommitterDate: 2018-05-24 13:15 +0000
annotated tag: v2_02_178-rc1 has been created
at deb1c80ba74b083ead9a158998c3e817b0e9fa72 (tag)
tagging adae8ee1c2926d59c85dc9fc253375f07f262819 (commit)
replaces v2_02_177
Release 2.02.178 Release Candidate 1
Major changes:
Remove support for historical lvm1 and GFS pool formats.
Major changes in label scanning.
Use libaio.
See doc/release-notes/2.02.178 for details.
Alasdair G Kergon (50):
post-release
device: Move dev_read memory allocation into device layer.
label: Add mempool.
label: Move setting result of label_read into separate fn.
label: Move _set_label_read_result call into _find_labeller.
label: Wrap _find_labeller params into a struct.
config: Split config buffer processing into new fn.
toolcontext: Add paired label_init to refresh_toolcontext.
format_text: Split the text import fns into two pieces.
format_text: Allocate update_mda baton from mempool.
format_text: Split up _update_mda.
format_text: Split out raw_read_mda_header processing
format_text: Split vgname_from_mda into three pieces.
metadata: Change the new data processing fns to void.
metadata: Use a consistent format for callback fn parameters
device: Introduce dev_read_callback
label: Add callback fns (partially)
label: Add label_read callback.
format_text: Use vgsummary callbacks
libdm: Introduce dm_malloc_aligned
label: Rename a variable
format_text: Use malloc aligned for export buffer
allocation: Avoid exceeding array bounds in allocation tag code
device: Keep the last data buffer read off each device.
device: Free cached device bufs when metadata invalid or dev closed.
device: Remove some data copying between buffers.
device: Suppress repeated reads of the same data.
device: Eliminate unnecessary buffer from dev_read.
device: Mark read-only device buffers const.
config: Move use_mmap to local variable.
label: Clean up storing of device and label sector.
man: regenerate
libdm: Fix a size_t in _dm_malloc_aligned_aux message.
command: Skip some memory zeroing.
device: Reorder device.h before change.
device: Store offset to data instead of pointer.
device: Add reason to devbuf.
device: Rearrange _aligned_io().
format_text: Change update_mda_baton to use label not labeller
format_text: Refactor mda counting in label processing.
device: Merge _dev_read and dev_read_callback.
device: Move buffer allocation nearer to the I/O.
device: Add ioflags parameter to transfer additional state.
callbacks: Miscellaneous fixes for recent changes
device: Add flag to indicate that a code path can support AIO
device: Basic config and setup to support async I/O.
lvmcache: Use asynchronous I/O when scanning devices.
device: Queue any aio beyond defined limits.
device: Fix basic async I/O error handling
format_text: Use versionsort to sort archive files
Alex Benn��e (1):
bcache: don't use PAGE_SIZE compile const
David Teigland (123):
lvmlockd: clear coverity complaint
man lvmlockd: update wording
lvmlockd: add lockopt values for skipping selected locks
lvmlockd: print warning when skipping locking
man lvmlockd: remove lv resizing comment
[device/bcache] fix missing max_io fn in bcache async engine
[device/bcache] fix min() function
[device/bcache] bcache_read_bytes should put blocks
[makefile] add -laio to makefiles
scan: use bcache for label scan and vg read
scan: use new label_scan for lvmcache_label_scan
scan: do scanning at the start of a command
label_scan: fix independent metadata areas
independent metadata areas: fix bogus code
lvmetad: use new label_scan for update from lvmlockd
lvmetad: use new label_scan for update from pvscan
vgcreate: improve the use of label_scan
label_scan: remove extra label scan and read for orphan PVs
lvmcache: simplify metadata cache
format-text.c log message fixes
pvremove: device check doesn't require label_read
process_each_label: use lvmcache
scan: use separate fd for bcache
scan: add a dev to bcache before each read to handle write path
scan: handle no devices
remove unused variable in _pvremove_check_single
remove debugging print
scan: handle request to scan missing dev
scan: skip extra scan in vg_read
vgremove: fix force remove on devs with damaged metadata
scan: setup bcache for commands using lvmetad
scan: leave the caller's dev list unchanged
scan: always setup bcache for commands using lvmetad
lvmdiskscan: use the new label_scan
disable LVM1 tests
test: vgsplit-usage if LVM1 tests
scan: use 128K bcache block size
pvck: use bcache
scan: put dev back on caller's list
scan: drop bcache and close fd for LV with stacked PV
vgchange: invalidate bcache for stacked LVs when deactivating
misc bcache fixes from ejt
bcache: do all writes through bcache
bcache: use wrappers for bcache read write in lvm
scan: create bcache with minimum number of blocks
bcache: add some error messages for debugging
scan: invalidate bcache for dev after errors
scan: add function to drop bcache blocks
bcache: fix error handling
lvmcache: add shorter way to delete dev info
scan: remove lvmcache info for failed devs
scan: check for errors in text layer
clvm: fix bcache scan handling
lvmetad: fix process_each_label
lvmetad: need to set up bcache in another place
lvmetad: more fixes related to bcache
tests: vgck now exits with error for bad vg
scan: drop bcache between lvm shell commands
bcache: let caller see an error
scan: improve io error checking and reporting
remove unnecessary REQUIRES_FULL_LABEL_SCAN
dev_cache: clean up scan
lvmcache: simplify
bcache: intercept test mode before write
lvmpolld: update to use new scanning correctly
scan: skip device rescan in vg_read
liblvm2app: missed the addition of lvmcache_label_scan
clvm: rescan when VG or PV not found
lvmcache: rename suspended_vg to saved_vg
clvmd: reuse a vg struct for sequential LV operations
clvmd: skip dev rescan after full scan
skip some clvmd-specific code in common cases
scan: don't use cmd mem pool in scan
pvmove: in fork mode destroy bcache in child
scan: refresh filters before scan
clvmd: drop old saved_vg when returning new saved_vg
test: remove pv-duplicate
toollib: fix wrong dev reference in process_each_label
clvmd: keep old saved_vg if it matches new
tests: fix THIN built-in check
clvmd: don't repair vg from vg_read in clvmd
Remove lvm1 and pool disk formats
lvmcache: fix typo in lvmcache_get_saved_vg
bcache_write_bytes needs to be followed by flush
tests: update lvmetad-disabled to not use lvm1
tests: remove gfs pool test
tests: remove use of lvm1 metadatatype
devices: ignore lvm1 and pool devices
tests: add gfs-pool test
filters: increase MAX_FILTERS for new filter
clvmd: defer freeing saved vgs
clvmd: separate saved_vg from vginfo
clvmd: don't save cft and buf for saved_vg
clvmd: saved_vg code and comment formatting
doc: lvm disk reading
io: replace dev_set with bcache equivalents
doc: add filter info to scanning
filter: use bcache for filter reads
pvscan: remove unused var warning
io: write log header with bcache
pvck: allow checking at user specified offsets
bcache: disable fallback to old io
dev_cache: drop open_list
dev_cache: fix close in dev_get_block_size
devs: recognize md devices in subsystem check
scan: remove unused args from label_read
dev_cache: fix close in utility functions
dev_cache: remove the lvmcache check when closing fd
scan: ignore duplicates that are md component devs
scan: add some missing frees
lvmcache: fix loop freeing infos
WHATS_NEW: updates
scan: use up to 1024 max bcache blocks
doc: add some performance info
scan: fix missing close in lib
liblvm2app: fix valgrind memory warning
liblvm2app: add a couple tests
fix id_write_format on non-uuid string
fullreport: fix with lvmetad and only orphan PVs are visible
lvmlockd: suppress error messages related to lvmetad
man vgexport: expand description
scan: move warnings about duplicate devices
filters: clarify some parts of md filter
Heinz Mauelshagen (9):
raid: support raid5_n convenience type on conversion to raid10
dev_manager: always activate RAID SubLVs readwrite
lvcreate: remove RaidLV on creation failure
test: add lvcreate-raid-volume_list
lvconvert: don't return success on degraded -m raid1 conversion
raid: use new internal APIs
tests: don't rely on cache target in component-raid.sh
tests: bump raid target version in reshape tests
tests: fix kernal_at_least argument in aux.sh
Joe Thornber (106):
[io paths] Unpick agk's aio stuff
[device/bcache] Initial code drop.
[lib/device/bcache] Tweaks after Kabi's review
[build] Quieten the build down
[unit tests] remove old unit tests that weren't built or run.
[git] Update .gitignore
[device/bcache] stub a unit test
[device/bcache] some more work on bcache
[device/bcache] Add a couple of invalidate methods
[device/bcache] Add bcache_max_prefetches()
[device/bcache] fix bug in _alloc_block
[device/bcache] another unit test
[device/bcache] rename a unit test
[build] include test/unit/Makefile rather than recursive build
[device/bcache] More tests and some bug fixes
[device/bcache] add bcache_prefetch_bytes() and bcache_read_bytes()
[device/bcache] More fiddling with tests
[device/bcache] more work on bcache
[git] Update .gitignore
Merge remote-tracking branch 'sourceware/master' into upstream
[unit-test] Push the new unit test framwork.
[bcache] get all unit tests passing again
[bcache] Add some unit tests for invalidate block.
[bcache] Some work on bcache_invalidate()
bcache: write some sanity checks for the asyn io engine
build: Stop creating the symlinks in include/ on the fly.
Revert "build: Stop creating the symlinks in include/ on the fly."
build: Stop creating the symlinks in include/ on the fly.
unit-tests: Move to test/unit
build: Calculate dependencies at same time as compiling.
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2 into merge
build: rename configure.in -> configure.ac
[build] uncomment 'serial 3' in an m4 file.
[lvmetad.h] Use static inline functions to stub out functions.
[metadata-liblvm.c] comment out some dead code and add a FIXME
[scripts] remove scripts/vg_convert
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
build: remove --with-{snapshots,mirrors,raid,thin,cache} options from ./configure
build: Remove unused Makefiles from configure.ac
build: fix typo in dmeventd/plugins/Makefile.in
vdo: Code drop for status parsing.
configure: Remove --enable-testing
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
unit-test/io_engine_t: use posix_memalign() rather than aligned_alloc()
unit-test/io_engine_t: Improve the read test.
unit-test/bcache_t: fixup a test.
unit-test/io_engine_t: add a little test for bcache_{read,write}_bytes
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
bcache: rewrite bcache_{write,zero}_bytes
build: update ./configure and configure.h.in
unit-test/bcache_t: Use a stripped down fixture for some tests
bcache: squash some warnings on rhel6
unit-test/bcache_t: test was using too large a block size
Revert "build: Stop creating the symlinks in include/ on the fly."
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
Merge branch 'master' into 2018-04-30-vdo-support
vdo: get status parser compiling
unit-test/matcher_t: add another (failing!) test for Kabi
unit-test/matcher_t: Fixup Kabi's test
build: add -D_FILE_OFFSET_BITS=64
device/bcache: reorder includes
bcache: reorder includes in .c file too
bcache: add a comment
bcache: add bcache_block_sectors() query fn
bcache: Move the utils to a separate file.
bcache: switch off_t -> uint64_t
bcache: rewrite bcache_write_zeros()
bcache: rename bcache_write_zeroes() -> bcache_zero_bytes()
bcache-utils: rewrite
configure.ac: Remove some more remnants of optional RAID
functional tests: Update have_raid function
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
configure.ac: bad configure generated due to stray ;;
unit-test: a bunch of tests for bcache-utils
Merge branch '2018-05-03-improve-bcache-utils'
Revert "build: Calculate dependencies at same time as compiling."
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
Merge branch 'master' into 2018-04-30-vdo-support
unit-test/bcache-utils: Tweak zero tests
bcache-utils: bcache_set_bytes()
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
Merge branch 'master' into 2018-04-30-vdo-support
vdo status: Unit tests + fix bugs
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
bcache: knock out err param.
bcache: Add sync io engine
functional-tests/vdo: fix mem leak in test
label/lv_manip: squash some warnings
bcache/sync io engine: handle short ios
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
radix-tree: First drop of radix tree.
doc: add a little document describing new directory structure.
radix-tree: remove some unneccessary includes
radix-tree: fix a function decl
bcache: nr_ios_pending wasn't being incremented
Merge branch 'master' of git://sourceware.org/git/lvm2
unit-tests: remove a couple of debug printfs
scripts: add a little scripts to show git history for the last 2 weeks.
scripts/code-stats.rb: count files better, handle bad utf8
Merge branch 'master' of git://sourceware.org/git/lvm2
bcache: Don't call sysconf for every io
WHATS_NEW: typo
Merge branch 'master' of git+ssh://sourceware.org/git/lvm2
release note: 2.02.178
release note: typo
release note: typos
Jonathan Brassow (1):
clean-up: example.conf.in typo
Marian Csontos (7):
doc: Add VDO stacking document
test: mirrored mirrorlog is not supposed to work in cluster
mirror: Add deprecation warning for mirrored log
doc: Fixing VDO document
tests: check vgsplit thin-data and ext.origin
test: Skip tests which require too much RAM
pre-release
Martin Wilck (2):
udev: explicit pvscan rule in 69-dm-lvm-metad.rules
udev: keep systemd vars on change event in 69-dm-lvm-metad.rules for systemd reload
Rick Elrod (1):
cleanup: fix grammar in output - less then -> less than
Tim Foerster (1):
lvmdbusd: Remove duplicated DataPercent definition
Zdenek Kabelac (223):
lvm-string: add function to detect component LV suffix
tests: sleep first
lvconvert: use excl activation for conversion
pvmove: fix _remove_sibling_pvs_from_trim_list
pvmove: better check for exclusive LV
pvmove: drop misleading pvmove restriction for cluster
dmeventd: add check for result code
activation: guard exclusive activation
cleanup: enhance messages
cleanup: drop unused code
tests: properly test with clustered VG
tests: check preserved exclusivness of snapshot merge
tests: longer startup timeout for daemons with valgrind
tests: check pvmove is merging segments
activation: move check later
python: some LVs do need exclusive activation
debug: drop DEBUG_MEM path
tests: update set of devices
dev_io: fix writes for unaligned buffers
pvmove: reinstantiate clustered pvmove
libdm: accept mirror status with userspace word in the line
configure: ensure path /usr/sbin is checked for some tools
toolcontext: do not change stream for pthreaded programs
partial revert "command: Skip some memory zeroing."
python: add devmapper library to linking
toolcontext: light context missed to set-up mem mempool
libdm-stats: correct checking of dm_snprintf error
vgimportclone: add some dm_snprintf checks
clean: drop unneeded -1 for snprintf
lvmlockd: improve dm path creation for sanlock LV
cleanup: detect dmeventd_executable just once
activation: separate reporting of error and monitoring status
activation: cleanup error to warning
cleanup: decode dso path just once
segtype: better get_monitor_dso_path api
debug: add stack tracking
segtype: replace mempool allocation
segtype: no libmem pool usage for name allocation
gcc: remove warns about free of const
cleanup: add missing WARNING
locking: exclusive can be either remote or local
pvmove: enhance accepted states of active LVs
tests: update
sanlock: set proper return value
locking: move cache dropping to primary locking code
debug: capture internal error for too long resource name
tests: correct usage of pipe
coverity: missing free on error path
raid: add free for error path
io: keep 64b arithmetic
lv_manip: enhance for_each_sub_lv
command: use bigger buffer
lvremove: drop unneded check
lvresize: check external origin with new size
tests: check inactive extorig resize
debug: change message severity
cleanup: unused header file
cleanup: explicitely ignore result code
cleanup: use lv_is_used_cache_pool
cleanup: indent
thin: pass environment to scripts
raid: fix error path for lv_raid_data_offset
raid: move VG update after archiving happened
lvcreate: fix activation of cached LV
lvremove: drop duplicate check for active LV
cleanup: more usage of dm_strncpy
debug: update comment
activation: add base lv component function
lvremove: validate removed component LV is not active
lvremove: ensure no subLV is active
lvconvert: support for convertsion with active component devices
activation: support activation of component LVs
activation: support proper /dev names for component LVs
tests: component activation
tests: skipping test waiting for fixed kernel
snapshot: keep COW writable for read-only volumes
snapshot: skip invalid snapshost
cache: fix lock usage for cache conversion
cleanup: use log_warn
cleanup: all tests needs target_type
raid: skip frozen raid devices
cleanup: use path on stack
scanning: skip more private devices
mirror: correct locking for mirror log initialization
dmsetup: use stderr for error output
dmsetup: cleanup err usage
dmsetup: stderr to log_error
dmsetup: join large fprintf
dmsetup: update messages
dmsetup: update _display_info
dmsetup: use dm_snprintf
dmsetup: report close as debug
cleanup: matching signess
dmsetup: indent
tests: try unfreezeing raids
libdm: support for DM_DEBUG_WITH_LINE_NUMBERS
devcache: add reason and always log_error
dmsetup: loop output table as verbose
dmstatus: check nr_regions ahead of find call
libdm-stats: fix error messages
locking: introduce prioritized_section
activation: check for prioritized_section
cleanup: missing dots and indent
tests: fix running tests on systems without udevd
tests: use DM_DEBUG_WITH_LINE_NUMBERS
tests: skip test when not enough space
activation: separate prioritized counter
pools: skip checks when tools are missing
raid: fix version check of target
lvconvert: accept striped LV as snapshot COW LV
coverity: add missing error check for str_list_add
coverity: ensure lock_type is not NULL
coverity: validate descriptor
coverity: make use of defined variable
coverity: move declaration out of the loop
coverity: drop unneeded header files
coverity: drop unused local static var
cleanup: use direct initializer
cleanup: use zalloc
tests: test striped COW LV
tests: check activation of cache without cache_check
tests: use 4k extents
cache: disallow to combine format 2 with mq
cleanup: typo fix
tests: update no tool test
libdm: enhance mounted fs detection
tests: handle setting better
fsadm: shellcheck prefer explicit escaping
tests: shellcheck prevention check
tests: shellcheck use grep -E
tests: shellcheck liter
tests: shellcheck split assing
tests: shellcheck misc
pvmove: support properly subLV locking
thin: restore usability of thin for external origin
lvconvert: drop limitation for converting lv
activation: add generic rule for visibility change
mirror: fix 32bit size calculation
mirror: improve mirror log size estimation
mirror: fix calcs for maximal region_size
mirror: fix region_size for clustered VG
mirror: block_on_error only with monitoring
mirror: properly reload table for log init
mirror: validate region_size for mirrors
mirror: checking for mirror segtype
mirror: use vg mempool
cleanup: call uname once
cleanup: reorder condition
cleanup: correct casting
cleanup: add _mb_ to regiosize option
cleanup: display_lvname update message
cleanup: enhance debug message
cleanup: correcting macro wrapping
cleanup: avoid compiler warn
coverity: ensure 0 end string
tests: update mirror test
tests: improve mirror_images_redundant
gcc: remove duplicate typedef
lvchange: update mirror table when changing monitoring
lvconvert: preserve regionsize from existing mirror
debug: more explanatory error message
tests: update testing to not use delay dev
tests: more zero usage
aux: enhance teardown to better handle weird names
mirror: improve table update
tests: add also snapshot monitoring
poll: add stdout fflush after poll query
tests: raise min size for XFS
tests: happy using of 4K backend devices
tests: crypt test cannot run on ramdisk
tests: try running tests over ramdisk
tests: aux support throttling of dm mirror
tests: use throttle_dm_mirror
tests: move device discard
tests: using throttling
tests: drop delaying
tests: again disable this raid test
tests: aux extra protection for rm -rf
tests: inittest compare string
tests: inittest may run without root
build: properly track source file for lmvlockctl
tests: add support to run unit test
tests: drop cache checking
build: make generate
bcache: do not use libdm header files
build: fix build rules for srcdir
build: rename device-mapper to device_mapper
tests: detect running bcache test on tmpfs
tests: add unit-test
build: install unit-test
build: lcov reporting for unit tests
tests: aux detecs supported segments
tests: restore functionality
tests: do not try to create 1K extents
tests: fix check sysfs
tests: start to use 4k mkfs
tests: swith to mkstemp
tests: old systems do not have even throttling
tests: dont try to use DAX based brd device
tests: fix size of COW
conf: update conf
build: configure detect libaio
tests: move into generated file
tests: drop junk
tests: time limit waiting on lvmetad kill
tests: aux fixes
python: specify libdm path for linking
tests: better check for python libpath
lvmapp: do not unlock not locked VGs
build: set clean vars earlier
python: use python3 paths directly
tests; make sure python_lvm_unit.py is executable
tests: pick either python2 or python3 .so
python: use // for integer division
tests: use 4K extent size
tests: disable symlink test
gitignore
man: fix cut and paste bug
man: make generate
tests: aux improve for mdadm support
tests: correcting symlink manipulation
tests: passthrough args with extend_filter_LVMTEST
tests: checking scanning correctness
4 years, 10 months
master - Merge remote-tracking branch 'origin/master'
by Marian Csontos
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=0ecf232194986b12c3a...
Commit: 0ecf232194986b12c3ae95b3f93e7fdd56158dc1
Parent: 264077907e7faa504ffa9fb3baa52b876cddc831 3702f39ef3e1bb7811427df3fe92235890228fc0
Author: Marian Csontos <mcsontos(a)redhat.com>
AuthorDate: Thu May 24 17:32:42 2018 +0200
Committer: Marian Csontos <mcsontos(a)redhat.com>
CommitterDate: Thu May 24 17:32:42 2018 +0200
Merge remote-tracking branch 'origin/master'
man/dmeventd.8_main | 2 +-
test/shell/pvcreate-md-fake-hdr.sh | 21 +++++++++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
4 years, 10 months
master - post-release
by Marian Csontos
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=264077907e7faa504ff...
Commit: 264077907e7faa504ffa9fb3baa52b876cddc831
Parent: adae8ee1c2926d59c85dc9fc253375f07f262819
Author: Marian Csontos <mcsontos(a)redhat.com>
AuthorDate: Thu May 24 15:23:08 2018 +0200
Committer: Marian Csontos <mcsontos(a)redhat.com>
CommitterDate: Thu May 24 15:23:08 2018 +0200
post-release
---
VERSION | 2 +-
VERSION_DM | 2 +-
WHATS_NEW | 3 +++
WHATS_NEW_DM | 3 +++
4 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/VERSION b/VERSION
index 1594f32..51e0d33 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.02.178(2)-rc1 (2018-05-24)
+2.02.178(2)-git (2018-05-24)
diff --git a/VERSION_DM b/VERSION_DM
index e95d765..1c2b36c 100644
--- a/VERSION_DM
+++ b/VERSION_DM
@@ -1 +1 @@
-1.02.147-rc1 (2018-05-24)
+1.02.147-git (2018-05-24)
diff --git a/WHATS_NEW b/WHATS_NEW
index 620c9d5..35695ab 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,3 +1,6 @@
+Version 2.02.178 -
+====================================
+
Version 2.02.178-rc1 - 24th May 2018
====================================
Add libaio dependency for build.
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index a40ca4e..7a94016 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,3 +1,6 @@
+Version 1.02.147 -
+====================================
+
Version 1.02.147-rc1 - 24th May 2018
====================================
Reuse uname() result for mirror target.
4 years, 10 months
master - pre-release
by Marian Csontos
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=adae8ee1c2926d59c85...
Commit: adae8ee1c2926d59c85dc9fc253375f07f262819
Parent: 7e85361c34ec539880fe8e764e4b49fc55f78a09
Author: Marian Csontos <mcsontos(a)redhat.com>
AuthorDate: Thu May 24 15:13:10 2018 +0200
Committer: Marian Csontos <mcsontos(a)redhat.com>
CommitterDate: Thu May 24 15:13:10 2018 +0200
pre-release
---
VERSION | 2 +-
VERSION_DM | 2 +-
WHATS_NEW | 21 ++++++++-------------
WHATS_NEW_DM | 4 ++--
4 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/VERSION b/VERSION
index 586bf0f..1594f32 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.02.178(2)-git (2017-12-18)
+2.02.178(2)-rc1 (2018-05-24)
diff --git a/VERSION_DM b/VERSION_DM
index d55b61b..e95d765 100644
--- a/VERSION_DM
+++ b/VERSION_DM
@@ -1 +1 @@
-1.02.147-git (2017-12-18)
+1.02.147-rc1 (2018-05-24)
diff --git a/WHATS_NEW b/WHATS_NEW
index 3d722da..620c9d5 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,16 +1,18 @@
-Version 2.02.178 -
-=====================================
+Version 2.02.178-rc1 - 24th May 2018
+====================================
+ Add libaio dependency for build.
Remove lvm1 and pool format handling and add filter to ignore them.
Move some filter checks to after disks are read.
Rework disk scanning and when it is used.
Add new io layer and shift code to using it.
- lvconvert: don't return success on degraded -m raid1 conversion
+ Fix lvconvert's return code on degraded -m raid1 conversion.
--enable-testing switch for ./configure has been removed.
--with-snapshots switch for ./configure has been removed.
--with-mirrors switch for ./configure has been removed.
--with-raid switch for ./configure has been removed.
--with-thin switch for ./configure has been removed.
--with-cache switch for ./configure has been removed.
+ Include new unit-test framework and unit tests.
Extend validation of region_size for mirror segment.
Reload whole device stack when reinitilizing mirror log.
Mirrors without monitoring are WARNING and not blocking on error.
@@ -34,8 +36,8 @@ Version 2.02.178 -
Enhance mirror log initialization for old mirror target.
Skip private crypto and stratis devices.
Skip frozen raid devices from scanning.
- Activate RAID SubLVs on read_only_volume_list readwrite
- Offer convenience type raid5_n converting to raid10
+ Activate RAID SubLVs on read_only_volume_list readwrite.
+ Offer convenience type raid5_n converting to raid10.
Automatically avoid reading invalid snapshots during device scan.
Ensure COW device is writable even for read-only thick snapshots.
Support activation of component LVs in read-only mode.
@@ -53,20 +55,13 @@ Version 2.02.178 -
Improve validation of created strings in vgimportclone.
Add missing initialisation of mem pool in systemd generator.
Do not reopen output streams for multithreaded users of liblvm.
- Use versionsort to fix archive file expiry beyond 100000 files.
- Add devices/use_aio, aio_max, aio_memory to configure AIO limits.
- Support asynchronous I/O when scanning devices.
- Detect asynchronous I/O capability in configure or accept --disable-aio.
- Add AIO_SUPPORTED_CODE_PATH to indicate whether AIO may be used.
Configure ensures /usr/bin dir is checked for dmpd tools.
Restore pvmove support for wide-clustered active volumes (2.02.177).
Avoid non-exclusive activation of exclusive segment types.
Fix trimming sibling PVs when doing a pvmove of raid subLVs.
Preserve exclusive activation during thin snaphost merge.
- Suppress some repeated reads of the same disk data at the device layer.
Avoid exceeding array bounds in allocation tag processing.
- Refactor metadata reading code to use callback functions.
- Move memory allocation for the key dev_reads into the device layer.
+ Add --lockopt to common options and add option to skip selected locks.
Version 2.02.177 - 18th December 2017
=====================================
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index 8fc3230..a40ca4e 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,5 @@
-Version 1.02.147 -
-=====================================
+Version 1.02.147-rc1 - 24th May 2018
+====================================
Reuse uname() result for mirror target.
Recognize also mounted btrfs through dm_device_has_mounted_fs().
Add missing log_error() into dm_stats_populate() returning 0.
4 years, 10 months
master - tests: improve usability on older systems
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=3702f39ef3e1bb78114...
Commit: 3702f39ef3e1bb7811427df3fe92235890228fc0
Parent: d6f244599623ef547fe2c5f70e21abf4cce9a49d
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 24 15:20:22 2018 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu May 24 16:02:31 2018 +0200
tests: improve usability on older systems
---
test/shell/pvcreate-md-fake-hdr.sh | 21 +++++++++++----------
1 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/test/shell/pvcreate-md-fake-hdr.sh b/test/shell/pvcreate-md-fake-hdr.sh
index acd6785..50a5b14 100644
--- a/test/shell/pvcreate-md-fake-hdr.sh
+++ b/test/shell/pvcreate-md-fake-hdr.sh
@@ -33,7 +33,7 @@ aux prepare_md_dev 1 64 2 "$dev1" "$dev2"
mddev=$(< MD_DEV)
pvdev=$(< MD_DEV_PV)
-
+sleep 3
mdadm --stop "$mddev"
# copy fake PV/VG header PV3 -> PV2 (which is however md raid1 leg)
@@ -52,7 +52,7 @@ sleep 3
# print what blkid thinks about each PV
for i in "$dev1" "$dev2" "$dev3" "$dev4"
do
- blkid "$i"
+ blkid -c /dev/null -w /dev/null "$i" || echo "Unknown signature"
done
# expect open count for each PV to be 0
@@ -74,20 +74,21 @@ sleep 3
dmsetup info -c
# if for any reason array went up - stop it again
-mdadm --detail "$mddev" && {
+if mdadm --detail "$mddev" ; then
mdadm --stop "$mddev"
aux udev_wait
should not mdadm --detail "$mddev"
-}
+fi
-# now reassemble array from PV1 & PV2
+# now reassemble array from PV1 & PV2
mdadm --assemble --verbose "$mddev" "$dev1" "$dev2"
aux udev_wait
sleep 1
# and let 'fake hdr' to be fixed from master/primary leg
-mdadm --action=repair "$mddev"
-sleep 1
-
-# should be showing correctly PV3 & PV4
-pvs
+# (when mdadm supports repair)
+if mdadm --action=repair "$mddev" ; then
+ sleep 1
+ # should be showing correctly PV3 & PV4
+ pvs
+fi
4 years, 10 months
master - man: another missed typo for thin plugin
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=d6f244599623ef547fe...
Commit: d6f244599623ef547fe2c5f70e21abf4cce9a49d
Parent: 7e85361c34ec539880fe8e764e4b49fc55f78a09
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 24 15:01:52 2018 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu May 24 16:02:31 2018 +0200
man: another missed typo for thin plugin
---
man/dmeventd.8_main | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/man/dmeventd.8_main b/man/dmeventd.8_main
index 98b1b98..06f8f58 100644
--- a/man/dmeventd.8_main
+++ b/man/dmeventd.8_main
@@ -123,7 +123,7 @@ Command is executed with environmental variable
in this environment will not try to interact with dmeventd.
To see the fullness of a thin pool command may check these
two environmental variables
-\fBDMEVENTD_THIN_POOL_DATA\fP and \fBDMEVENTD_THIN_POOL_DATA\fP.
+\fBDMEVENTD_THIN_POOL_DATA\fP and \fBDMEVENTD_THIN_POOL_METADATA\fP.
Command can also read status with tools like \fBlvs\fP(8).
.
.SH ENVIRONMENT VARIABLES
4 years, 10 months
master - release note: typos
by Joe Thornber
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7e85361c34ec539880f...
Commit: 7e85361c34ec539880fe8e764e4b49fc55f78a09
Parent: fab063cfcbbe2e3801ba2af7d061059eb37a7eaa
Author: Joe Thornber <ejt(a)redhat.com>
AuthorDate: Thu May 24 12:32:16 2018 +0100
Committer: Joe Thornber <ejt(a)redhat.com>
CommitterDate: Thu May 24 12:32:16 2018 +0100
release note: typos
---
doc/release-notes/2.02.178 | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/doc/release-notes/2.02.178 b/doc/release-notes/2.02.178
index f986d1d..5b4319e 100644
--- a/doc/release-notes/2.02.178
+++ b/doc/release-notes/2.02.178
@@ -23,7 +23,7 @@ Rewrite label scanning
----------------------
Dave Teigland has reworked the label scanning and metadata reading
-logic to minimise the amount a IOs issued. Combined with the aio changes
+logic to minimise the amount of IOs issued. Combined with the aio changes
this can greatly improve scanning speed for some systems.
./configure options
@@ -31,16 +31,16 @@ this can greatly improve scanning speed for some systems.
We're going to try and remove as many options from ./configure as we
can. Each option multiplies the number of possible configurations
-that we should test (this testing is currently not occuring).
+that we should test (this testing is currently not occurring).
The first batch to be removed are:
- --enable-testing switch for ./configure has been removed.
- --with-snapshots switch for ./configure has been removed.
- --with-mirrors switch for ./configure has been removed.
- --with-raid switch for ./configure has been removed.
- --with-thin switch for ./configure has been removed.
- --with-cache switch for ./configure has been removed.
+ --enable-testing
+ --with-snapshots
+ --with-mirrors
+ --with-raid
+ --with-thin
+ --with-cache
Stable targets that are in the upstream kernel will just be supported.
4 years, 10 months