master - metadata: add extents_from_percent_size
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=8bf4cd464f4994...
Commit: 8bf4cd464f499403aacde52b1c1867ebb31714da
Parent: 375d7f1c2d4ebe86cb54fce454f503758e02bb7a
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Oct 30 23:43:12 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:49 2014 +0100
metadata: add extents_from_percent_size
Add API call to calculate extents from percentage value.
Size is based in DM_PERCENT_1 units.
(Supporting decimal point number).
This commit is preparing functionality for more global
usage of % with i.e. --size option.
---
lib/metadata/metadata-exported.h | 3 ++
lib/metadata/metadata.c | 61 ++++++++++++++++++++++++++++++++++++++
2 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 5ac68bf..890e808 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -733,6 +733,9 @@ int lv_update_and_reload_origin(struct logical_volume *lv);
uint64_t extents_from_size(struct cmd_context *cmd, uint64_t size,
uint32_t extent_size);
+uint32_t extents_from_percent_size(struct volume_group *vg, const struct dm_list *pvh,
+ uint32_t extents, int roundup,
+ percent_type_t percent, uint64_t size);
struct logical_volume *find_pool_lv(const struct logical_volume *lv);
int pool_is_active(const struct logical_volume *pool_lv);
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 3e1b94a..2038f06 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -1097,6 +1097,67 @@ uint64_t extents_from_size(struct cmd_context *cmd, uint64_t size,
return size / extent_size;
}
+/*
+ * Converts size according to percentage with specified rounding to extents
+ *
+ * For PERCENT_NONE size is in standard sector units.
+ * For all other percent type is in DM_PERCENT_1 base unit (supports decimal point)
+ *
+ * Return value of 0 extents is an error.
+ */
+uint32_t extents_from_percent_size(struct volume_group *vg, const struct dm_list *pvh,
+ uint32_t extents, int roundup,
+ percent_type_t percent, uint64_t size)
+{
+ uint32_t count;
+
+ switch (percent) {
+ case PERCENT_NONE:
+ if (!roundup && (size % vg->extent_size)) {
+ if (!(size -= size % vg->extent_size)) {
+ log_error("Specified size is smaller then physical extent boundary.");
+ return 0;
+ }
+ log_print_unless_silent("Rounding size to boundary between physical extents: %s.",
+ display_size(vg->cmd, size));
+ }
+ return extents_from_size(vg->cmd, size, vg->extent_size);
+ case PERCENT_LV:
+ break; /* Base extents already passed in. */
+ case PERCENT_VG:
+ extents = vg->extent_count;
+ break;
+ case PERCENT_PVS:
+ if (pvh != &vg->pvs) {
+ /* Physical volumes are specified on cmdline */
+ if (!(extents = pv_list_extents_free(pvh))) {
+ log_error("No free extents in the list of physical volumes.");
+ return 0;
+ }
+ break;
+ }
+ /* Fall back to use all PVs in VG like %FREE */
+ case PERCENT_FREE:
+ if (!(extents = vg->free_count)) {
+ log_error("No free extents in Volume group %s.", vg->name);
+ return 0;
+ }
+ break;
+ default:
+ log_error(INTERNAL_ERROR "Unsupported percent type %u.", percent);
+ return 0;
+ }
+
+ if (!(count = percent_of_extents(size, extents, roundup)))
+ log_error("Converted %.2f%%%s into 0 extents.",
+ (double) size / DM_PERCENT_1, get_percent_string(percent));
+ else
+ log_verbose("Converted %.2f%%%s into %" PRIu32 " extents.",
+ (double) size / DM_PERCENT_1, get_percent_string(percent), count);
+
+ return count;
+}
+
static dm_bitset_t _bitset_with_random_bits(struct dm_pool *mem, uint32_t num_bits,
uint32_t num_set_bits, unsigned *seed)
{
9 years, 5 months
master - pv_manip: check for pe_ranges
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=375d7f1c2d4ebe...
Commit: 375d7f1c2d4ebe86cb54fce454f503758e02bb7a
Parent: 464f3b8abd03633ff5dd2c5fe5585d921af8931f
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Oct 28 11:02:58 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:49 2014 +0100
pv_manip: check for pe_ranges
---
lib/metadata/pv_manip.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/lib/metadata/pv_manip.c b/lib/metadata/pv_manip.c
index 9a0f287..00a7fd5 100644
--- a/lib/metadata/pv_manip.c
+++ b/lib/metadata/pv_manip.c
@@ -374,6 +374,10 @@ uint32_t pv_list_extents_free(const struct dm_list *pvh)
struct pv_segment *pvseg;
dm_list_iterate_items(pvl, pvh) {
+ if (!pvl->pe_ranges) {
+ log_warn(INTERNAL_ERROR "WARNING: PV %s is without initialized PE ranges.", dev_name(pvl->pv->dev));
+ continue;
+ }
dm_list_iterate_items(per, pvl->pe_ranges) {
dm_list_iterate_items(pvseg, &pvl->pv->segments) {
if (!pvseg_is_allocated(pvseg))
9 years, 5 months
master - lvmcmdline: support size_mb_arg_with_percent
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=464f3b8abd0363...
Commit: 464f3b8abd03633ff5dd2c5fe5585d921af8931f
Parent: 519fbe71e46c747a254bc200ea93396591e1a1a3
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Oct 30 14:52:37 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:49 2014 +0100
lvmcmdline: support size_mb_arg_with_percent
New size_mb_arg_with_percent is able to read size_mb_arg
but also it's able to read % values.
Percent parsing is share with int_arg_with_sign_and_percent.
---
WHATS_NEW | 1 +
tools/lvmcmdline.c | 66 +++++++++++++++++++++++++++++++++++++---------------
tools/tools.h | 1 +
3 files changed, 49 insertions(+), 19 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index a8ea15f..bb8cd8d 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.112 -
=====================================
+ Introduce size_mb_arg_with_percent() for advanced size arg reading.
Add extra support for '.' as decimal point in size args.
Configurable support for creation of sparse volumes with thin-pools.
Update and correct lvcreate and lvcovert man pages.
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
index 33c0045..1d3e993 100644
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
@@ -384,8 +384,32 @@ static int _get_int_arg(struct arg_values *av, char **ptr)
return 1;
}
+static int _get_percent_arg(struct arg_values *av, const char *ptr)
+{
+ if (!strcasecmp(ptr, "V") || !strcasecmp(ptr, "VG"))
+ av->percent = PERCENT_VG;
+ else if (!strcasecmp(ptr, "L") || !strcasecmp(ptr, "LV"))
+ av->percent = PERCENT_LV;
+ else if (!strcasecmp(ptr, "P") || !strcasecmp(ptr, "PV") ||
+ !strcasecmp(ptr, "PVS"))
+ av->percent = PERCENT_PVS;
+ else if (!strcasecmp(ptr, "F") || !strcasecmp(ptr, "FR") ||
+ !strcasecmp(ptr, "FREE"))
+ av->percent = PERCENT_FREE;
+ else if (!strcasecmp(ptr, "O") || !strcasecmp(ptr, "OR") ||
+ !strcasecmp(ptr, "ORIGIN"))
+ av->percent = PERCENT_ORIGIN;
+ else {
+ log_error("Specified %%%s is unknown.", ptr);
+ return 0;
+ }
+
+ return 1;
+}
+
/* Size stored in sectors */
-static int _size_arg(struct cmd_context *cmd __attribute__((unused)), struct arg_values *av, int factor)
+static int _size_arg(struct cmd_context *cmd __attribute__((unused)),
+ struct arg_values *av, int factor, int percent)
{
char *ptr;
int i;
@@ -429,7 +453,14 @@ static int _size_arg(struct cmd_context *cmd __attribute__((unused)), struct arg
if (ptr == val)
return 0;
- if (*ptr) {
+ if (percent && *ptr == '%') {
+ if (!_get_percent_arg(av, ++ptr))
+ return_0;
+ if ((uint64_t) v >= UINT32_MAX) {
+ log_error("Percentage is too big (>=%d%%).", UINT32_MAX);
+ return 0;
+ }
+ } else if (*ptr) {
for (i = strlen(suffixes) - 1; i >= 0; i--)
if (suffixes[i] == tolower((int) *ptr))
break;
@@ -474,12 +505,17 @@ static int _size_arg(struct cmd_context *cmd __attribute__((unused)), struct arg
int size_kb_arg(struct cmd_context *cmd, struct arg_values *av)
{
- return _size_arg(cmd, av, 2);
+ return _size_arg(cmd, av, 2, 0);
}
int size_mb_arg(struct cmd_context *cmd, struct arg_values *av)
{
- return _size_arg(cmd, av, 2048);
+ return _size_arg(cmd, av, 2048, 0);
+}
+
+int size_mb_arg_with_percent(struct cmd_context *cmd, struct arg_values *av)
+{
+ return _size_arg(cmd, av, 2048, 1);
}
int int_arg(struct cmd_context *cmd __attribute__((unused)), struct arg_values *av)
@@ -516,21 +552,13 @@ int int_arg_with_sign_and_percent(struct cmd_context *cmd __attribute__((unused)
if (*ptr++ != '%')
return 0;
- if (!strcasecmp(ptr, "V") || !strcasecmp(ptr, "VG"))
- av->percent = PERCENT_VG;
- else if (!strcasecmp(ptr, "L") || !strcasecmp(ptr, "LV"))
- av->percent = PERCENT_LV;
- else if (!strcasecmp(ptr, "P") || !strcasecmp(ptr, "PV") ||
- !strcasecmp(ptr, "PVS"))
- av->percent = PERCENT_PVS;
- else if (!strcasecmp(ptr, "F") || !strcasecmp(ptr, "FR") ||
- !strcasecmp(ptr, "FREE"))
- av->percent = PERCENT_FREE;
- else if (!strcasecmp(ptr, "O") || !strcasecmp(ptr, "OR") ||
- !strcasecmp(ptr, "ORIGIN"))
- av->percent = PERCENT_ORIGIN;
- else
+ if (!_get_percent_arg(av, ptr))
+ return_0;
+
+ if (av->ui64_value >= UINT32_MAX) {
+ log_error("Percentage is too big (>=%d%%).", UINT32_MAX);
return 0;
+ }
return 1;
}
@@ -613,7 +641,7 @@ int readahead_arg(struct cmd_context *cmd __attribute__((unused)), struct arg_va
return 1;
}
- if (!_size_arg(cmd, av, 1))
+ if (!_size_arg(cmd, av, 1, 0))
return 0;
if (av->sign == SIGN_MINUS)
diff --git a/tools/tools.h b/tools/tools.h
index 5a5d729..2196dba 100644
--- a/tools/tools.h
+++ b/tools/tools.h
@@ -129,6 +129,7 @@ int discards_arg(struct cmd_context *cmd, struct arg_values *av);
int mirrorlog_arg(struct cmd_context *cmd, struct arg_values *av);
int size_kb_arg(struct cmd_context *cmd, struct arg_values *av);
int size_mb_arg(struct cmd_context *cmd, struct arg_values *av);
+int size_mb_arg_with_percent(struct cmd_context *cmd, struct arg_values *av);
int int_arg(struct cmd_context *cmd, struct arg_values *av);
int int_arg_with_sign(struct cmd_context *cmd, struct arg_values *av);
int int_arg_with_sign_and_percent(struct cmd_context *cmd, struct arg_values *av);
9 years, 5 months
master - lvmcmdline: extra support for decimal point
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=519fbe71e46c74...
Commit: 519fbe71e46c747a254bc200ea93396591e1a1a3
Parent: 97cccfbf1c000e597cf751e26284614a15f77cb5
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Oct 28 11:20:33 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:49 2014 +0100
lvmcmdline: extra support for decimal point
If root has locales with different decimal point then '.'
(i.e. Czech with ',') lets be tolerant and retry with
"C" locales in the case '.' is found during parse of number.
Locales are then restored back.
---
WHATS_NEW | 1 +
tools/lvmcmdline.c | 12 ++++++++++++
2 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index e59e0f4..a8ea15f 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.112 -
=====================================
+ Add extra support for '.' as decimal point in size args.
Configurable support for creation of sparse volumes with thin-pools.
Update and correct lvcreate and lvcovert man pages.
Mark pools and snapshots as unzeroable volumes.
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
index c426873..33c0045 100644
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
@@ -27,6 +27,7 @@
#include <sys/resource.h>
#include <dirent.h>
#include <paths.h>
+#include <locale.h>
#ifdef HAVE_GETOPTLONG
# include <getopt.h>
@@ -414,6 +415,17 @@ static int _size_arg(struct cmd_context *cmd __attribute__((unused)), struct arg
v = strtod(val, &ptr);
+ if (*ptr == '.') {
+ /*
+ * Maybe user has non-C locale with different decimal point ?
+ * Lets be toleran and retry with standard C locales
+ */
+ if (setlocale(LC_ALL, "C")) {
+ v = strtod(val, &ptr);
+ setlocale(LC_ALL, "");
+ }
+ }
+
if (ptr == val)
return 0;
9 years, 5 months
master - segtype: drop cmdcontex pointer
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=97cccfbf1c000e...
Commit: 97cccfbf1c000e597cf751e26284614a15f77cb5
Parent: 87fc3b710c3b8fc656dcf48ec453e1da280ec696
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 27 10:50:52 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:49 2014 +0100
segtype: drop cmdcontex pointer
Users of context provide their cmd pointer,
so don't keep it inside segtype.
---
lib/cache_segtype/cache.c | 4 ----
lib/commands/toolcontext.c | 1 -
lib/error/errseg.c | 2 --
lib/freeseg/freeseg.c | 2 --
lib/metadata/segtype.h | 1 -
lib/mirror/mirrored.c | 2 --
lib/raid/raid.c | 2 +-
lib/snapshot/snapshot.c | 2 --
lib/striped/striped.c | 2 --
lib/unknown/unknown.c | 2 --
lib/zero/zero.c | 2 --
tools/reporter.c | 1 -
12 files changed, 1 insertions(+), 22 deletions(-)
diff --git a/lib/cache_segtype/cache.c b/lib/cache_segtype/cache.c
index 8c2ff78..93027d7 100644
--- a/lib/cache_segtype/cache.c
+++ b/lib/cache_segtype/cache.c
@@ -388,12 +388,10 @@ int init_cache_segtypes(struct cmd_context *cmd,
log_error("Failed to allocate memory for cache_pool segtype");
return 0;
}
- segtype->cmd = cmd;
segtype->name = "cache-pool";
segtype->flags = SEG_CACHE_POOL | SEG_CANNOT_BE_ZEROED;
segtype->ops = &_cache_pool_ops;
- segtype->private = NULL;
if (!lvm_register_segtype(seglib, segtype))
return_0;
@@ -404,12 +402,10 @@ int init_cache_segtypes(struct cmd_context *cmd,
log_error("Failed to allocate memory for cache segtype");
return 0;
}
- segtype->cmd = cmd;
segtype->name = "cache";
segtype->flags = SEG_CACHE;
segtype->ops = &_cache_ops;
- segtype->private = NULL;
if (!lvm_register_segtype(seglib, segtype))
return_0;
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
index 72525f5..3900179 100644
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
@@ -1174,7 +1174,6 @@ int lvm_register_segtype(struct segtype_library *seglib,
struct segment_type *segtype2;
segtype->library = seglib->lib;
- segtype->cmd = seglib->cmd;
dm_list_iterate_items(segtype2, &seglib->cmd->segtypes) {
if (strcmp(segtype2->name, segtype->name))
diff --git a/lib/error/errseg.c b/lib/error/errseg.c
index af19e7d..fa0b9c0 100644
--- a/lib/error/errseg.c
+++ b/lib/error/errseg.c
@@ -94,10 +94,8 @@ struct segment_type *init_error_segtype(struct cmd_context *cmd)
if (!segtype)
return_NULL;
- segtype->cmd = cmd;
segtype->ops = &_error_ops;
segtype->name = "error";
- segtype->private = NULL;
segtype->flags = SEG_CAN_SPLIT | SEG_VIRTUAL | SEG_CANNOT_BE_ZEROED;
log_very_verbose("Initialised segtype: %s", segtype->name);
diff --git a/lib/freeseg/freeseg.c b/lib/freeseg/freeseg.c
index b4eba94..71d7f8c 100644
--- a/lib/freeseg/freeseg.c
+++ b/lib/freeseg/freeseg.c
@@ -32,10 +32,8 @@ struct segment_type *init_free_segtype(struct cmd_context *cmd)
if (!segtype)
return_NULL;
- segtype->cmd = cmd;
segtype->ops = &_freeseg_ops;
segtype->name = "free";
- segtype->private = NULL;
segtype->flags = SEG_VIRTUAL | SEG_CANNOT_BE_ZEROED;
log_very_verbose("Initialised segtype: %s", segtype->name);
diff --git a/lib/metadata/segtype.h b/lib/metadata/segtype.h
index 749b188..4635681 100644
--- a/lib/metadata/segtype.h
+++ b/lib/metadata/segtype.h
@@ -81,7 +81,6 @@ struct dev_manager;
struct segment_type {
struct dm_list list; /* Internal */
- struct cmd_context *cmd; /* lvm_register_segtype() sets this. */
uint32_t flags;
uint32_t parity_devs; /* Parity drives required by segtype */
diff --git a/lib/mirror/mirrored.c b/lib/mirror/mirrored.c
index 46dfe02..7ab11c2 100644
--- a/lib/mirror/mirrored.c
+++ b/lib/mirror/mirrored.c
@@ -618,10 +618,8 @@ struct segment_type *init_segtype(struct cmd_context *cmd)
if (!segtype)
return_NULL;
- segtype->cmd = cmd;
segtype->ops = &_mirrored_ops;
segtype->name = "mirror";
- segtype->private = NULL;
segtype->flags = SEG_MIRROR | SEG_AREAS_MIRRORED;
#ifdef DEVMAPPER_SUPPORT
diff --git a/lib/raid/raid.c b/lib/raid/raid.c
index 7cc4301..6f4fe27 100644
--- a/lib/raid/raid.c
+++ b/lib/raid/raid.c
@@ -462,7 +462,7 @@ static struct segment_type *_init_raid_segtype(struct cmd_context *cmd,
rt->name);
return NULL;
}
- segtype->cmd = cmd;
+
segtype->ops = &_raid_ops;
segtype->name = rt->name;
segtype->flags = SEG_RAID | rt->extra_flags | monitored;
diff --git a/lib/snapshot/snapshot.c b/lib/snapshot/snapshot.c
index aefab3a..b64e533 100644
--- a/lib/snapshot/snapshot.c
+++ b/lib/snapshot/snapshot.c
@@ -258,10 +258,8 @@ struct segment_type *init_segtype(struct cmd_context *cmd)
if (!segtype)
return_NULL;
- segtype->cmd = cmd;
segtype->ops = &_snapshot_ops;
segtype->name = "snapshot";
- segtype->private = NULL;
segtype->flags = SEG_SNAPSHOT | SEG_CANNOT_BE_ZEROED;
#ifdef DEVMAPPER_SUPPORT
diff --git a/lib/striped/striped.c b/lib/striped/striped.c
index dfd4518..1803077 100644
--- a/lib/striped/striped.c
+++ b/lib/striped/striped.c
@@ -228,10 +228,8 @@ struct segment_type *init_striped_segtype(struct cmd_context *cmd)
if (!segtype)
return_NULL;
- segtype->cmd = cmd;
segtype->ops = &_striped_ops;
segtype->name = "striped";
- segtype->private = NULL;
segtype->flags =
SEG_CAN_SPLIT | SEG_AREAS_STRIPED | SEG_FORMAT1_SUPPORT;
diff --git a/lib/unknown/unknown.c b/lib/unknown/unknown.c
index 760f1c2..3712c66 100644
--- a/lib/unknown/unknown.c
+++ b/lib/unknown/unknown.c
@@ -67,10 +67,8 @@ struct segment_type *init_unknown_segtype(struct cmd_context *cmd, const char *n
return NULL;
}
- segtype->cmd = cmd;
segtype->ops = &_unknown_ops;
segtype->name = dm_pool_strdup(cmd->libmem, name);
- segtype->private = NULL;
segtype->flags = SEG_UNKNOWN | SEG_VIRTUAL | SEG_CANNOT_BE_ZEROED;
log_very_verbose("Initialised segtype: %s", segtype->name);
diff --git a/lib/zero/zero.c b/lib/zero/zero.c
index 9f9d06c..f07f288 100644
--- a/lib/zero/zero.c
+++ b/lib/zero/zero.c
@@ -90,10 +90,8 @@ struct segment_type *init_zero_segtype(struct cmd_context *cmd)
if (!segtype)
return_NULL;
- segtype->cmd = cmd;
segtype->ops = &_zero_ops;
segtype->name = "zero";
- segtype->private = NULL;
segtype->flags = SEG_CAN_SPLIT | SEG_VIRTUAL | SEG_CANNOT_BE_ZEROED;
log_very_verbose("Initialised segtype: %s", segtype->name);
diff --git a/tools/reporter.c b/tools/reporter.c
index 9688151..02f6064 100644
--- a/tools/reporter.c
+++ b/tools/reporter.c
@@ -100,7 +100,6 @@ static int _do_pvsegs_sub_single(struct cmd_context *cmd,
struct lvinfo lvinfo = { .exists = 0 };
struct segment_type _freeseg_type = {
- .cmd = cmd,
.name = "free",
.flags = SEG_VIRTUAL | SEG_CANNOT_BE_ZEROED,
};
9 years, 5 months
master - lvcreate: improving recent lvcreate updates
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=87fc3b710c3b8f...
Commit: 87fc3b710c3b8fc656dcf48ec453e1da280ec696
Parent: 651613e9a40c9cc0aaf4a1c7c262ad394ac93ffb
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Oct 30 23:36:07 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:48 2014 +0100
lvcreate: improving recent lvcreate updates
We need to be able to parse:
lvcreate --type snapshot -s
lvcreate --type thin -s
lvcreate --type cache-pool -H
---
tools/lvcreate.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index e507858..6b8c4b5 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -153,6 +153,8 @@ static int _lvcreate_name_params(struct cmd_context *cmd,
vg_name = skip_dev_dir(cmd, argv[0], NULL);
if (!strchr(vg_name, '/')) {
+ if (lp->snapshot && arg_is_set(cmd, virtualsize_ARG))
+ lp->snapshot = 0 ; /* Sparse volume via thin-pool */
if (!_set_vg_name(lp, vg_name))
return_0;
} else {
@@ -639,10 +641,6 @@ static int _lvcreate_params(struct cmd_context *cmd,
segtype_str = "striped";
only_linear = 1; /* User requested linear only target */
}
- if (arg_from_list_is_set(cmd, "is conflicting with option --type",
- cache_ARG, thin_ARG, snapshot_ARG,
- -1))
- return_0;
/* More estimations from options after shortcuts */
} else if (arg_is_set(cmd, snapshot_ARG) &&
(arg_is_set(cmd, virtualoriginsize_ARG) ||
@@ -754,6 +752,7 @@ static int _lvcreate_params(struct cmd_context *cmd,
LVCREATE_ARGS,
POOL_ARGS,
SIZE_ARGS,
+ cache_ARG,
chunksize_ARG,
-1))
return_0;
@@ -853,6 +852,7 @@ static int _lvcreate_params(struct cmd_context *cmd,
SIZE_ARGS,
THIN_POOL_ARGS,
chunksize_ARG,
+ snapshot_ARG,
thin_ARG,
virtualsize_ARG,
wipesignatures_ARG, zero_ARG,
@@ -888,7 +888,8 @@ static int _lvcreate_params(struct cmd_context *cmd,
return_0;
} else /* Parse free arg as snapshot origin */
lp->snapshot = 1;
- }
+ } else if (arg_is_set(cmd, snapshot_ARG))
+ lp->snapshot = 1;
} else if (seg_is_thin_pool(lp)) {
if (arg_outside_list_is_set(cmd, "is unsupported with thin pools",
LVCREATE_ARGS,
9 years, 5 months
master - man: update lvcreate with sparse
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=651613e9a40c9c...
Commit: 651613e9a40c9cc0aaf4a1c7c262ad394ac93ffb
Parent: e6e647489d49e02dbe9795371df7b154d30baf74
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Oct 30 19:44:42 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:48 2014 +0100
man: update lvcreate with sparse
Document sparse device creation and its default segtype selection.
---
man/lvcreate.8.in | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/man/lvcreate.8.in b/man/lvcreate.8.in
index c843949..e2b6d91 100644
--- a/man/lvcreate.8.in
+++ b/man/lvcreate.8.in
@@ -155,7 +155,7 @@ Normally the \fB\-\-zero\fP \fIn\fP argument has to be supplied too because
zeroing (the default behaviour) also requires activation.
If autoactivation option is used (\fB\-a\fIay\fR), the logical volume is
activated only if it matches an item in the
-.BR activation / auto_activation_volume_list
+.IR activation / auto_activation_volume_list
set in \fBlvm.conf\fP(5).
For autoactivated logical volumes, \fB\-\-zero\fP \fIn\fP and
\fB\-\-wipesignatures\fP \fIn\fP is always assumed and it can't
@@ -291,7 +291,9 @@ The default is "\fIraid1\fP". See the
legacy "\fImirror\fP" segment type. See
.BR lvm.conf (5)
settings
-.BR global / mirror_segtype_default
+.IR global / mirror_segtype_default
+and
+.IR global / raid10_segtype_default
to configure default mirror segment type.
The options
\fB\-\-mirrorlog\fP and \fB\-\-corelog\fP apply
@@ -316,9 +318,9 @@ Starts or avoids monitoring a mirrored, snapshot or thin pool logical volume wit
dmeventd, if it is installed.
If a device used by a monitored mirror reports an I/O error,
the failure is handled according to
-.BR activation / mirror_image_fault_policy
+.IR activation / mirror_image_fault_policy
and
-.BR activation / mirror_log_fault_policy
+.IR activation / mirror_log_fault_policy
set in \fBlvm.conf\fP(5).
.TP
.IR \fB\-n ", " \fB\-\-name " " LogicalVolume { Name | Path }
@@ -531,8 +533,12 @@ or
Default type is \fIlinear\fP.
.TP
.BR \-V ", " \-\-virtualsize " " \fIVirtualSize [ \fIbBsSkKmMgGtTpPeE ]
-Creates a sparse device of the given size (in MiB by default) using a snapshot
-or thinly provisioned device when thin pool is specified.
+Creates a thinly provisioned device or a sparse device of the given size (in MiB by default).
+See
+.BR lvm.conf (5)
+settings
+.IR global / sparse_segtype_default
+to configure default sparse segment type.
See \fBlvmthin\fP(7) for more info about thin provisioning support.
Anything written to a sparse snapshot will be returned when reading from it.
Reading from other areas of the device will return blocks of zeros.
@@ -546,12 +552,12 @@ Controls wiping of detected signatures on newly created Logical Volume.
If this option is not specified, then by default signature wiping is done
each time the zeroing (\fB\-Z\fP/\fB\-\-zero\fP) is done. This default behaviour
can be controlled by
-.BR allocation / wipe_signatures_when_zeroing_new_lvs
+.IR allocation / wipe_signatures_when_zeroing_new_lvs
setting found in
.BR lvm.conf (5).
.br
If blkid wiping is used
-.BR allocation / use_blkid_wiping
+.IR allocation / use_blkid_wiping
setting in
.BR lvm.conf (5))
and LVM2 is compiled with blkid wiping support, then \fBblkid\fP(8) library is used
9 years, 5 months
master - configure: autoreconf
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=e6e647489d49e0...
Commit: e6e647489d49e02dbe9795371df7b154d30baf74
Parent: e0164f21886a5b4964110bcac65535a670fdf6f3
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Oct 30 17:07:58 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:48 2014 +0100
configure: autoreconf
Just rebuild after configure.in update.
---
aclocal.m4 | 2 +-
configure | 194 +++++++++++++++++++++++++++++++++++++++---------------------
2 files changed, 127 insertions(+), 69 deletions(-)
diff --git a/aclocal.m4 b/aclocal.m4
index 6f752f2..2325191 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.13.4 -*- Autoconf -*-
+# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
diff --git a/configure b/configure
index 6a15ed8..28651ac 100755
--- a/configure
+++ b/configure
@@ -697,16 +697,19 @@ DMEVENTD_PATH
DMEVENTD
DL_LIBS
DEVMAPPER
+DEFAULT_SYS_DIR
+DEFAULT_SPARSE_SEGTYPE
DEFAULT_RUN_DIR
+DEFAULT_RAID10_SEGTYPE
+DEFAULT_PROFILE_SUBDIR
DEFAULT_PID_DIR
-DEFAULT_DM_RUN_DIR
+DEFAULT_MIRROR_SEGTYPE
DEFAULT_LOCK_DIR
+DEFAULT_DM_RUN_DIR
DEFAULT_DATA_ALIGNMENT
-DEFAULT_PROFILE_SUBDIR
DEFAULT_CACHE_SUBDIR
DEFAULT_BACKUP_SUBDIR
DEFAULT_ARCHIVE_SUBDIR
-DEFAULT_SYS_DIR
DEBUG
COPTIMISE_FLAG
CONFDIR
@@ -870,7 +873,10 @@ with_cluster
with_snapshots
with_mirrors
with_raid
+with_default_mirror_segtype
+with_default_raid10r_segtype
with_replicators
+with_default_sparse_segtype
with_thin
with_thin_check
with_thin_dump
@@ -1638,52 +1644,53 @@ Optional Features:
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-user=USER set the owner of installed files [[USER=]]
- --with-group=GROUP set the group owner of installed files [[GROUP=]]
- --with-device-uid=UID set the owner used for new device nodes [[UID=0]]
- --with-device-gid=GID set the group used for new device nodes [[GID=0]]
- --with-device-mode=MODE set the mode used for new device nodes [[MODE=0600]]
+ --with-user=USER set the owner of installed files [USER=]
+ --with-group=GROUP set the group owner of installed files [GROUP=]
+ --with-device-uid=UID set the owner used for new device nodes [UID=0]
+ --with-device-gid=GID set the group used for new device nodes [GID=0]
+ --with-device-mode=MODE set the mode used for new device nodes [MODE=0600]
--with-device-nodes-on=ON
- create nodes on resume or create [[ON=resume]]
+ create nodes on resume or create [ON=resume]
--with-default-name-mangling=MANGLING
- default name mangling: auto/none/hex
- [[MANGLING=auto]]
+ default name mangling: auto/none/hex [auto]
--with-lvm1=TYPE LVM1 metadata support: internal/shared/none
- [[TYPE=internal]]
+ [internal]
--with-pool=TYPE GFS pool read-only support: internal/shared/none
- [[TYPE=internal]]
+ [internal]
--with-cluster=TYPE cluster LVM locking support: internal/shared/none
- [[TYPE=internal]]
- --with-snapshots=TYPE snapshot support: internal/shared/none
- [[TYPE=internal]]
- --with-mirrors=TYPE mirror support: internal/shared/none
- [[TYPE=internal]]
- --with-raid=TYPE raid support: internal/shared/none [[TYPE=internal]]
- --with-replicators=TYPE replicator support: internal/shared/none
- [[TYPE=none]]
+ [internal]
+ --with-snapshots=TYPE snapshot support: internal/shared/none [internal]
+ --with-mirrors=TYPE mirror support: internal/shared/none [internal]
+ --with-raid=TYPE raid support: internal/shared/none [internal]
+ --with-default-mirror-segtype=TYPE
+ default mirror segtype: raid1/mirror [raid1]
+ --with-default-raid10-segtype=TYPE
+ default mirror segtype: raid10/mirror [raid10]
+ --with-replicators=TYPE replicator support: internal/shared/none [none]
+ --with-default-sparse-segtype=TYPE
+ default sparse segtype: thin/snapshot [thin]
--with-thin=TYPE thin provisioning support: internal/shared/none
- [[TYPE=internal]]
- --with-thin-check=PATH thin_check tool: [[autodetect]]
- --with-thin-dump=PATH thin_dump tool: [[autodetect]]
- --with-thin-repair=PATH thin_repair tool: [[autodetect]]
+ [internal]
+ --with-thin-check=PATH thin_check tool: [autodetect]
+ --with-thin-dump=PATH thin_dump tool: [autodetect]
+ --with-thin-repair=PATH thin_repair tool: [autodetect]
--with-thin-restore=PATH
- thin_restore tool: [[autodetect]]
- --with-cache=TYPE cache support: internal/shared/none
- [[TYPE=internal]]
- --with-cache-check=PATH cache_check tool: [[autodetect]]
- --with-cache-dump=PATH cache_dump tool: [[autodetect]]
+ thin_restore tool: [autodetect]
+ --with-cache=TYPE cache support: internal/shared/none [internal]
+ --with-cache-check=PATH cache_check tool: [autodetect]
+ --with-cache-dump=PATH cache_dump tool: [autodetect]
--with-cache-repair=PATH
- cache_repair tool: [[autodetect]]
+ cache_repair tool: [autodetect]
--with-cache-restore=PATH
- cache_restore tool: [[autodetect]]
- --with-ocfdir=DIR install OCF files in DIR
- [[PREFIX/lib/ocf/resource.d/lvm2]]
+ cache_restore tool: [autodetect]
+ --with-ocfdir=DIR install OCF files in
+ [PREFIX/lib/ocf/resource.d/lvm2]
--with-default-pid-dir=PID_DIR
- Default directory to keep PID files in. [[/var/run]]
+ Default directory to keep PID files in. [/var/run]
--with-default-dm-run-dir=DM_RUN_DIR
- Default DM run directory. [[/var/run]]
+ Default DM run directory. [/var/run]
--with-default-run-dir=RUN_DIR
- Default LVM run directory. [[/var/run/lvm]]
+ Default LVM run directory. [/var/run/lvm]
--with-clvmd=TYPE build cluster LVM Daemon
The following cluster manager combinations are valid:
* cman (RHEL5 or equivalent)
@@ -1691,46 +1698,46 @@ Optional Packages:
* singlenode (localhost only)
* all (autodetect)
* none (disable build)
- [TYPE=none]
+ [none]
--with-clvmd-pidfile=PATH
- clvmd pidfile [[PID_DIR/clvmd.pid]]
+ clvmd pidfile [PID_DIR/clvmd.pid]
--with-cmirrord-pidfile=PATH
- cmirrord pidfile [[PID_DIR/cmirrord.pid]]
- --with-optimisation=OPT C optimisation flag [[OPT=-O2]]
+ cmirrord pidfile [PID_DIR/cmirrord.pid]
+ --with-optimisation=OPT C optimisation flag [OPT=-O2]
--with-lvmetad-pidfile=PATH
- lvmetad pidfile [[PID_DIR/lvmetad.pid]]
- --with-localedir=DIR translation files in DIR [[PREFIX/share/locale]]
- --with-confdir=DIR configuration files in DIR [[/etc]]
- --with-staticdir=DIR static binaries in DIR [[EPREFIX/sbin]]
- --with-usrlibdir=DIR usrlib in DIR [[PREFIX/lib]]
- --with-usrsbindir=DIR usrsbin executables in DIR [[PREFIX/sbin]]
+ lvmetad pidfile [PID_DIR/lvmetad.pid]
+ --with-localedir=DIR translation files in DIR [PREFIX/share/locale]
+ --with-confdir=DIR configuration files in DIR [/etc]
+ --with-staticdir=DIR static binaries in DIR [EPREFIX/sbin]
+ --with-usrlibdir=DIR usrlib in DIR [PREFIX/lib]
+ --with-usrsbindir=DIR usrsbin executables in DIR [PREFIX/sbin]
--with-udev-prefix=UPREFIX
- install udev rule files in UPREFIX [[EPREFIX]]
- --with-udevdir=DIR udev rules in DIR [[UPREFIX/lib/udev/rules.d]]
+ install udev rule files in UPREFIX [EPREFIX]
+ --with-udevdir=DIR udev rules in DIR [UPREFIX/lib/udev/rules.d]
--with-systemdsystemunitdir=DIR
systemd service files in DIR
--with-tmpfilesdir=DIR install configuration files for management of
volatile files and directories in DIR
- [[PREFIX/lib/tmpfiles.d]]
+ [PREFIX/lib/tmpfiles.d]
--with-dmeventd-pidfile=PATH
- dmeventd pidfile [[PID_DIR/dmeventd.pid]]
+ dmeventd pidfile [PID_DIR/dmeventd.pid]
--with-dmeventd-path=PATH
- dmeventd path [[EPREFIX/sbin/dmeventd]]
+ dmeventd path [EPREFIX/sbin/dmeventd]
--with-default-system-dir=DIR
- default LVM system directory [[/etc/lvm]]
+ default LVM system directory [/etc/lvm]
--with-default-profile-subdir=SUBDIR
- default configuration profile subdir [[profile]]
+ default configuration profile subdir [profile]
--with-default-archive-subdir=SUBDIR
- default metadata archive subdir [[archive]]
+ default metadata archive subdir [archive]
--with-default-backup-subdir=SUBDIR
- default metadata backup subdir [[backup]]
+ default metadata backup subdir [backup]
--with-default-cache-subdir=SUBDIR
- default metadata cache subdir [[cache]]
+ default metadata cache subdir [cache]
--with-default-locking-dir=DIR
- default locking directory [[/var/lock/lvm]]
+ default locking directory [/var/lock/lvm]
--with-default-data-alignment=NUM
- set the default data alignment in MiB [[1]]
- --with-interface=IFACE choose kernel interface (ioctl) [[ioctl]]
+ set the default data alignment in MiB [1]
+ --with-interface=IFACE choose kernel interface (ioctl) [ioctl]
Some influential environment variables:
CC C compiler command
@@ -7244,14 +7251,44 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $RAID" >&5
$as_echo "$RAID" >&6; }
+
+# Check whether --with-default-mirror-segtype was given.
+if test "${with_default_mirror_segtype+set}" = set; then :
+ withval=$with_default_mirror_segtype; DEFAULT_MIRROR_SEGTYPE=$withval
+else
+ DEFAULT_MIRROR_SEGTYPE="raid1"
+fi
+
+
+# Check whether --with-default-raid10r-segtype was given.
+if test "${with_default_raid10r_segtype+set}" = set; then :
+ withval=$with_default_raid10r_segtype; DEFAULT_RAID10_SEGTYPE=$withval
+else
+ DEFAULT_RAID10_SEGTYPE="raid10"
+fi
+
case "$RAID" in
- none|shared) ;;
+ none) test "$DEFAULT_MIRROR_SEGTYPE" = "raid1" && DEFAULT_MIRROR_SEGTYPE="mirror"
+ test "$DEFAULT_RAID10_SEGTYPE" = "raid10" && DEFAULT_RAID10_SEGTYPE="mirror" ;;
+ shared) ;;
internal)
$as_echo "#define RAID_INTERNAL 1" >>confdefs.h
;;
*) as_fn_error $? "--with-raid parameter invalid" "$LINENO" 5 ;;
esac
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_MIRROR_SEGTYPE "$DEFAULT_MIRROR_SEGTYPE"
+_ACEOF
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_RAID10_SEGTYPE "$DEFAULT_RAID10_SEGTYPE"
+_ACEOF
+
+
################################################################################
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include replicators" >&5
$as_echo_n "checking whether to include replicators... " >&6; }
@@ -7274,6 +7311,16 @@ $as_echo "#define REPLICATOR_INTERNAL 1" >>confdefs.h
*) as_fn_error $? "--with-replicators parameter invalid ($REPLICATORS)" "$LINENO" 5 ;;
esac
+
+
+# Check whether --with-default-sparse-segtype was given.
+if test "${with_default_sparse_segtype+set}" = set; then :
+ withval=$with_default_sparse_segtype; DEFAULT_SPARSE_SEGTYPE=$withval
+else
+ DEFAULT_SPARSE_SEGTYPE="thin"
+fi
+
+
################################################################################
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include thin provisioning" >&5
$as_echo_n "checking whether to include thin provisioning... " >&6; }
@@ -7322,13 +7369,20 @@ fi
$as_echo "$THIN" >&6; }
case "$THIN" in
- none|shared) ;;
+ none) test "$DEFAULT_SPARSE_SEGTYPE" = "thin" && DEFAULT_SPARSE_SEGTYPE="snapshot" ;;
+ shared) ;;
internal)
$as_echo "#define THIN_INTERNAL 1" >>confdefs.h
;;
*) as_fn_error $? "--with-thin parameter invalid ($THIN)" "$LINENO" 5 ;;
esac
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_SPARSE_SEGTYPE "$DEFAULT_SPARSE_SEGTYPE"
+_ACEOF
+
+
# Check whether --enable-thin_check_needs_check was given.
if test "${enable_thin_check_needs_check+set}" = set; then :
enableval=$enable_thin_check_needs_check; THIN_CHECK_NEEDS_CHECK=$enableval
@@ -7786,18 +7840,19 @@ $as_echo "$as_me: WARNING: thin_restore not found in path $PATH" >&2;}
THIN_CONFIGURE_WARN=y
}
fi
- ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether thin_check supports the needs-check flag" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether thin_check supports the needs-check flag" >&5
$as_echo_n "checking whether thin_check supports the needs-check flag... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $THIN_CHECK_NEEDS_CHECK" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THIN_CHECK_NEEDS_CHECK" >&5
$as_echo "$THIN_CHECK_NEEDS_CHECK" >&6; }
-if test "$THIN_CHECK_NEEDS_CHECK" = yes; then
+ if test "$THIN_CHECK_NEEDS_CHECK" = yes; then
$as_echo "#define THIN_CHECK_NEEDS_CHECK 1" >>confdefs.h
-fi
+ fi
+
+ ;;
+esac
cat >>confdefs.h <<_ACEOF
@@ -12602,6 +12657,9 @@ LVM_LIBAPI=`echo "$VER" | $AWK -F '[()]' '{print $2}'`
+
+
+
################################################################################
ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/cmirrord/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/lvm2/Makefile daemons/dmeventd/plugins/raid/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile daemons/dmeventd/plugins/thin/Makefile daemons/lvmetad/Makefile conf/Makefile conf/example.conf conf/command_profile_template.profile conf/metadata_profile_template.profile include/.symlinks include/Makefile lib/Makefile lib/format1/Makefile lib/format_pool/Makefile lib/locking/Makefile lib/mirror/Makefile lib/replicator/Makefile lib/misc/lvm-version.h lib/raid/Makefile lib/snapshot/Makefile lib/thin/Makefile lib/cache_segtype/Makefile libdaemon/Makefile libdaemon/client/Makefile libdaemon/server/Makefile libdm/Makefile libdm/libdevmapper.pc liblvm/Makefile liblvm/liblvm2app.pc man/Makefile po/Makefile
python/Makefile python/setup.py scripts/blkdeactivate.sh scripts/blk_availability_init_red_hat scripts/blk_availability_systemd_red_hat.service scripts/clvmd_init_red_hat scripts/cmirrord_init_red_hat scripts/dm_event_systemd_red_hat.service scripts/dm_event_systemd_red_hat.socket scripts/lvm2_cluster_activation_red_hat.sh scripts/lvm2_cluster_activation_systemd_red_hat.service scripts/lvm2_clvmd_systemd_red_hat.service scripts/lvm2_cmirrord_systemd_red_hat.service scripts/lvm2_lvmetad_init_red_hat scripts/lvm2_lvmetad_systemd_red_hat.service scripts/lvm2_lvmetad_systemd_red_hat.socket scripts/lvm2_monitoring_init_red_hat scripts/lvm2_monitoring_systemd_red_hat.service scripts/lvm2_pvscan_systemd_red_hat@.service scripts/lvm2_tmpfiles_red_hat.conf scripts/Makefile test/Makefile test/api/Makefile test/unit/Makefile tools/Makefile udev/Makefile unit-tests/datastruct/Makefile unit-tests/regex/Makefile unit-tests/mm/Makefile"
9 years, 5 months
master - sparse: configurable type for sparse volumes
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=e0164f21886a5b...
Commit: e0164f21886a5b4964110bcac65535a670fdf6f3
Parent: 87f59af15ce315bb76ebaa176dd458295f607816
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Oct 30 23:38:02 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:58:48 2014 +0100
sparse: configurable type for sparse volumes
Support compile type configurable defaults for creation
of sparse volumes.
By default now create 'thin-pools' for sparse volumes.
Use the global/sparse_segtype_default to switch back to old
snapshots if needed.
Apply the same compile logic for newly introduces mirror/raid1 options.
---
WHATS_NEW | 1 +
conf/example.conf.in | 22 ++++++++++++++++-
configure.in | 52 +++++++++++++++++++++++++++++++++---------
lib/config/config_settings.h | 1 +
lib/config/defaults.h | 5 +--
lib/misc/configure.h.in | 9 +++++++
tools/lvcreate.c | 16 +++++++++----
7 files changed, 85 insertions(+), 21 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 5ad246c..e59e0f4 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.112 -
=====================================
+ Configurable support for creation of sparse volumes with thin-pools.
Update and correct lvcreate and lvcovert man pages.
Mark pools and snapshots as unzeroable volumes.
Check for zeroing of volume after segment type is fully detected.
diff --git a/conf/example.conf.in b/conf/example.conf.in
index d1da23f..d1a1397 100644
--- a/conf/example.conf.in
+++ b/conf/example.conf.in
@@ -646,7 +646,7 @@ global {
#
# Specify the '--type <mirror|raid1>' option to override this default
# setting.
- mirror_segtype_default = "raid1"
+ mirror_segtype_default = "@DEFAULT_MIRROR_SEGTYPE@"
# 'raid10_segtype_default' determines the segment types used by default
# when the '--stripes/-i' and '--mirrors/-m' arguments are both specified
@@ -663,7 +663,25 @@ global {
# this setting is not advised.
# Specify the '--type <raid10|mirror>' option to override this default
# setting.
- raid10_segtype_default = "raid10"
+ raid10_segtype_default = "@DEFAULT_RAID10_SEGTYPE@"
+
+ # 'sparse_segtype_default' defines which segtype will be used when the
+ # shorthand '-V and -L' option is used for sparse volume creation.
+ #
+ # "snapshot" - The original snapshot implementation provided by LVM2/DM.
+ # It is using old snashot that mixes data and metadata within
+ # a single COW storage volume and has poor performs when
+ # the size of stored data passes hundereds of MB.
+ #
+ # "thin" - Newer implementation leverages thin provisioning target.
+ # It has bigger minimal chunk size (64KiB) and uses separate volume
+ # for metadata. It has better performance especially in case of
+ # bigger data uses. This device type has also full snapshot support.
+ #
+ # Specify the '--type <snapshot|thin>' option to override this default
+ # setting.
+ sparse_segtype_default = "@DEFAULT_SPARSE_SEGTYPE@"
+
# The default format for displaying LV names in lvdisplay was changed
# in version 2.02.89 to show the LV name and path separately.
diff --git a/configure.in b/configure.in
index 8d47bc7..9e10dc3 100644
--- a/configure.in
+++ b/configure.in
@@ -349,13 +349,29 @@ AC_ARG_WITH(raid,
RAID=$withval, RAID=internal)
AC_MSG_RESULT($RAID)
+AC_ARG_WITH(default-mirror-segtype,
+ AC_HELP_STRING([--with-default-mirror-segtype=TYPE],
+ [default mirror segtype: raid1/mirror [raid1]]),
+ DEFAULT_MIRROR_SEGTYPE=$withval, DEFAULT_MIRROR_SEGTYPE="raid1")
+AC_ARG_WITH(default-raid10r-segtype,
+ AC_HELP_STRING([--with-default-raid10-segtype=TYPE],
+ [default mirror segtype: raid10/mirror [raid10]]),
+ DEFAULT_RAID10_SEGTYPE=$withval, DEFAULT_RAID10_SEGTYPE="raid10")
case "$RAID" in
- none|shared) ;;
+ none) test "$DEFAULT_MIRROR_SEGTYPE" = "raid1" && DEFAULT_MIRROR_SEGTYPE="mirror"
+ test "$DEFAULT_RAID10_SEGTYPE" = "raid10" && DEFAULT_RAID10_SEGTYPE="mirror" ;;
+ shared) ;;
internal) AC_DEFINE([RAID_INTERNAL], 1,
[Define to 1 to include built-in support for raid.]) ;;
*) AC_MSG_ERROR([--with-raid parameter invalid]) ;;
esac
+AC_DEFINE_UNQUOTED([DEFAULT_MIRROR_SEGTYPE], ["$DEFAULT_MIRROR_SEGTYPE"],
+ [Default segtype used for mirror volumes.])
+
+AC_DEFINE_UNQUOTED([DEFAULT_RAID10_SEGTYPE], ["$DEFAULT_RAID10_SEGTYPE"],
+ [Default segtype used for raid10 volumes.])
+
################################################################################
dnl -- asynchronous volume replicator inclusion type
AC_MSG_CHECKING(whether to include replicators)
@@ -372,6 +388,12 @@ case "$REPLICATORS" in
*) AC_MSG_ERROR([--with-replicators parameter invalid ($REPLICATORS)]) ;;
esac
+
+AC_ARG_WITH(default-sparse-segtype,
+ AC_HELP_STRING([--with-default-sparse-segtype=TYPE],
+ [default sparse segtype: thin/snapshot [thin]]),
+ DEFAULT_SPARSE_SEGTYPE=$withval, DEFAULT_SPARSE_SEGTYPE="thin")
+
################################################################################
dnl -- thin provisioning
AC_MSG_CHECKING(whether to include thin provisioning)
@@ -399,12 +421,16 @@ AC_ARG_WITH(thin-restore,
AC_MSG_RESULT($THIN)
case "$THIN" in
- none|shared) ;;
+ none) test "$DEFAULT_SPARSE_SEGTYPE" = "thin" && DEFAULT_SPARSE_SEGTYPE="snapshot" ;;
+ shared) ;;
internal) AC_DEFINE([THIN_INTERNAL], 1,
[Define to 1 to include built-in support for thin provisioning.]) ;;
*) AC_MSG_ERROR([--with-thin parameter invalid ($THIN)]) ;;
esac
+AC_DEFINE_UNQUOTED([DEFAULT_SPARSE_SEGTYPE], ["$DEFAULT_SPARSE_SEGTYPE"],
+ [Default segtype used for sparse volumes.])
+
dnl -- thin_check needs-check flag
AC_ARG_ENABLE(thin_check_needs_check,
AC_HELP_STRING([--disable-thin_check_needs_check],
@@ -466,15 +492,16 @@ case "$THIN" in
THIN_CONFIGURE_WARN=y
}
fi
+
+ AC_MSG_CHECKING([whether thin_check supports the needs-check flag])
+ AC_MSG_RESULT([$THIN_CHECK_NEEDS_CHECK])
+ if test "$THIN_CHECK_NEEDS_CHECK" = yes; then
+ AC_DEFINE([THIN_CHECK_NEEDS_CHECK], 1, [Define to 1 if the external 'thin_check' tool requires the --clear-needs-check-flag option])
+ fi
+
;;
esac
-AC_MSG_CHECKING([whether thin_check supports the needs-check flag])
-AC_MSG_RESULT([$THIN_CHECK_NEEDS_CHECK])
-if test "$THIN_CHECK_NEEDS_CHECK" = yes; then
- AC_DEFINE([THIN_CHECK_NEEDS_CHECK], 1, [Define to 1 if the external 'thin_check' tool requires the --clear-needs-check-flag option])
-fi
-
AC_DEFINE_UNQUOTED([THIN_CHECK_CMD], ["$THIN_CHECK_CMD"],
[The path to 'thin_check', if available.])
@@ -1645,16 +1672,19 @@ AC_SUBST(CPG_CFLAGS)
AC_SUBST(CPG_LIBS)
AC_SUBST(CSCOPE_CMD)
AC_SUBST(DEBUG)
-AC_SUBST(DEFAULT_SYS_DIR)
AC_SUBST(DEFAULT_ARCHIVE_SUBDIR)
AC_SUBST(DEFAULT_BACKUP_SUBDIR)
AC_SUBST(DEFAULT_CACHE_SUBDIR)
-AC_SUBST(DEFAULT_PROFILE_SUBDIR)
AC_SUBST(DEFAULT_DATA_ALIGNMENT)
-AC_SUBST(DEFAULT_LOCK_DIR)
AC_SUBST(DEFAULT_DM_RUN_DIR)
+AC_SUBST(DEFAULT_LOCK_DIR)
+AC_SUBST(DEFAULT_MIRROR_SEGTYPE)
AC_SUBST(DEFAULT_PID_DIR)
+AC_SUBST(DEFAULT_PROFILE_SUBDIR)
+AC_SUBST(DEFAULT_RAID10_SEGTYPE)
AC_SUBST(DEFAULT_RUN_DIR)
+AC_SUBST(DEFAULT_SPARSE_SEGTYPE)
+AC_SUBST(DEFAULT_SYS_DIR)
AC_SUBST(DEVMAPPER)
AC_SUBST(DLM_CFLAGS)
AC_SUBST(DLM_LIBS)
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
index a6c1d1b..e944b81 100644
--- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h
@@ -175,6 +175,7 @@ cfg(global_detect_internal_vg_cache_corruption_CFG, "detect_internal_vg_cache_co
cfg(global_metadata_read_only_CFG, "metadata_read_only", global_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_METADATA_READ_ONLY, vsn(2, 2, 75), NULL)
cfg(global_mirror_segtype_default_CFG, "mirror_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_MIRROR_SEGTYPE, vsn(2, 2, 87), NULL)
cfg(global_raid10_segtype_default_CFG, "raid10_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_RAID10_SEGTYPE, vsn(2, 2, 99), NULL)
+cfg(global_sparse_segtype_default_CFG, "sparse_segtype_default", global_CFG_SECTION, 0, CFG_TYPE_STRING, DEFAULT_SPARSE_SEGTYPE, vsn(2, 2, 112), NULL)
cfg(global_lvdisplay_shows_full_device_path_CFG, "lvdisplay_shows_full_device_path", global_CFG_SECTION, CFG_PROFILABLE, CFG_TYPE_BOOL, DEFAULT_LVDISPLAY_SHOWS_FULL_DEVICE_PATH, vsn(2, 2, 89), NULL)
cfg(global_use_lvmetad_CFG, "use_lvmetad", global_CFG_SECTION, 0, CFG_TYPE_BOOL, 0, vsn(2, 2, 93), NULL)
cfg(global_thin_check_executable_CFG, "thin_check_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, THIN_CHECK_CMD, vsn(2, 2, 94), NULL)
diff --git a/lib/config/defaults.h b/lib/config/defaults.h
index 2724cd1..acf768b 100644
--- a/lib/config/defaults.h
+++ b/lib/config/defaults.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
- * Copyright (C) 2004-2012 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004-2014 Red Hat, Inc. All rights reserved.
*
* This file is part of LVM2.
*
@@ -52,13 +52,12 @@
#define DEFAULT_METADATA_READ_ONLY 0
#define DEFAULT_LVDISPLAY_SHOWS_FULL_DEVICE_PATH 0
-#define DEFAULT_MIRROR_SEGTYPE "raid1"
#define DEFAULT_MIRRORLOG MIRROR_LOG_DISK
#define DEFAULT_MIRROR_LOG_FAULT_POLICY "allocate"
#define DEFAULT_MIRROR_IMAGE_FAULT_POLICY "remove"
#define DEFAULT_MIRROR_MAX_IMAGES 8 /* limited by kernel DM_KCOPYD_MAX_REGIONS */
-#define DEFAULT_RAID10_SEGTYPE "raid10"
#define DEFAULT_RAID_FAULT_POLICY "warn"
+
#define DEFAULT_DMEVENTD_RAID_LIB "libdevmapper-event-lvm2raid.so"
#define DEFAULT_DMEVENTD_MIRROR_LIB "libdevmapper-event-lvm2mirror.so"
#define DEFAULT_DMEVENTD_SNAPSHOT_LIB "libdevmapper-event-lvm2snapshot.so"
diff --git a/lib/misc/configure.h.in b/lib/misc/configure.h.in
index f137f14..7c0d64c 100644
--- a/lib/misc/configure.h.in
+++ b/lib/misc/configure.h.in
@@ -68,18 +68,27 @@
/* Name of default locking directory. */
#undef DEFAULT_LOCK_DIR
+/* Default segtype used for mirror volumes. */
+#undef DEFAULT_MIRROR_SEGTYPE
+
/* Default directory to keep PID files in. */
#undef DEFAULT_PID_DIR
/* Name of default configuration profile subdirectory. */
#undef DEFAULT_PROFILE_SUBDIR
+/* Default segtype used for raid10 volumes. */
+#undef DEFAULT_RAID10_SEGTYPE
+
/* Default LVM run directory. */
#undef DEFAULT_RUN_DIR
/* Define to 0 to reinstate the pre-2.02.54 handling of unit suffixes. */
#undef DEFAULT_SI_UNIT_CONSISTENCY
+/* Default segtype used for sparse volumes. */
+#undef DEFAULT_SPARSE_SEGTYPE
+
/* Path to LVM system directory. */
#undef DEFAULT_SYS_DIR
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 78b6898..e507858 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -644,15 +644,21 @@ static int _lvcreate_params(struct cmd_context *cmd,
-1))
return_0;
/* More estimations from options after shortcuts */
- } else if (arg_is_set(cmd, snapshot_ARG))
+ } else if (arg_is_set(cmd, snapshot_ARG) &&
+ (arg_is_set(cmd, virtualoriginsize_ARG) ||
+ !arg_is_set(cmd, virtualsize_ARG)))
/* Snapshot has higher priority then thin */
segtype_str = "snapshot"; /* --thinpool makes thin volume */
- else if (arg_is_set(cmd, cache_ARG) || arg_count(cmd, cachepool_ARG))
+ else if (arg_is_set(cmd, cache_ARG) || arg_is_set(cmd, cachepool_ARG))
segtype_str = "cache";
- else if (arg_count(cmd, thin_ARG) || arg_count(cmd, thinpool_ARG) ||
- arg_is_set(cmd, virtualsize_ARG))
+ else if (arg_is_set(cmd, thin_ARG) || arg_is_set(cmd, thinpool_ARG))
segtype_str = "thin";
- else if (arg_uint_value(cmd, mirrors_ARG, 0)) {
+ else if (arg_is_set(cmd, virtualsize_ARG)) {
+ if (arg_is_set(cmd, virtualoriginsize_ARG))
+ segtype_str = "snapshot";
+ else
+ segtype_str = find_config_tree_str(cmd, global_sparse_segtype_default_CFG, NULL);
+ } else if (arg_uint_value(cmd, mirrors_ARG, 0)) {
/* Remember, '-m 0' implies stripe */
mirror_default_cfg = (arg_uint_value(cmd, stripes_ARG, 1) > 1)
? global_raid10_segtype_default_CFG : global_mirror_segtype_default_CFG;
9 years, 5 months
master - configure: option cleanup
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=87f59af15ce315...
Commit: 87f59af15ce315bb76ebaa176dd458295f607816
Parent: 7049eeeb839b59314d07c0bac250c89cf8ac78f8
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Oct 30 17:13:05 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Thu Oct 30 23:51:39 2014 +0100
configure: option cleanup
Drop double [[ ]] around default args.
(AC_HELP_STRING is already quoted so double [[]] are not needed).
---
configure.in | 111 ++++++++++++++++++++++++++-------------------------------
1 files changed, 51 insertions(+), 60 deletions(-)
diff --git a/configure.in b/configure.in
index 3956ff0..8d47bc7 100644
--- a/configure.in
+++ b/configure.in
@@ -173,7 +173,7 @@ dnl -- Setup the ownership of the files
AC_MSG_CHECKING(file owner)
AC_ARG_WITH(user,
AC_HELP_STRING([--with-user=USER],
- [set the owner of installed files [[USER=]]]),
+ [set the owner of installed files [USER=]]),
OWNER=$withval)
AC_MSG_RESULT($OWNER)
test -n "$OWNER" && INSTALL="$INSTALL -o $OWNER"
@@ -183,7 +183,7 @@ dnl -- Setup the group ownership of the files
AC_MSG_CHECKING(group owner)
AC_ARG_WITH(group,
AC_HELP_STRING([--with-group=GROUP],
- [set the group owner of installed files [[GROUP=]]]),
+ [set the group owner of installed files [GROUP=]]),
GROUP=$withval)
AC_MSG_RESULT($GROUP)
test -n "$GROUP" && INSTALL="$INSTALL -g $GROUP"
@@ -194,7 +194,7 @@ AC_MSG_CHECKING(device node uid)
AC_ARG_WITH(device-uid,
AC_HELP_STRING([--with-device-uid=UID],
- [set the owner used for new device nodes [[UID=0]]]),
+ [set the owner used for new device nodes [UID=0]]),
DM_DEVICE_UID=$withval, DM_DEVICE_UID=0)
AC_MSG_RESULT($DM_DEVICE_UID)
@@ -204,7 +204,7 @@ AC_MSG_CHECKING(device node gid)
AC_ARG_WITH(device-gid,
AC_HELP_STRING([--with-device-gid=GID],
- [set the group used for new device nodes [[GID=0]]]),
+ [set the group used for new device nodes [GID=0]]),
DM_DEVICE_GID=$withval, DM_DEVICE_GID=0)
AC_MSG_RESULT($DM_DEVICE_GID)
@@ -214,14 +214,14 @@ AC_MSG_CHECKING(device node mode)
AC_ARG_WITH(device-mode,
AC_HELP_STRING([--with-device-mode=MODE],
- [set the mode used for new device nodes [[MODE=0600]]]),
+ [set the mode used for new device nodes [MODE=0600]]),
DM_DEVICE_MODE=$withval, DM_DEVICE_MODE=0600)
AC_MSG_RESULT($DM_DEVICE_MODE)
AC_MSG_CHECKING(when to create device nodes)
AC_ARG_WITH(device-nodes-on,
AC_HELP_STRING([--with-device-nodes-on=ON],
- [create nodes on resume or create [[ON=resume]]]),
+ [create nodes on resume or create [ON=resume]]),
ADD_NODE=$withval, ADD_NODE=resume)
case "$ADD_NODE" in
resume) add_on=DM_ADD_NODE_ON_RESUME;;
@@ -234,7 +234,7 @@ AC_DEFINE_UNQUOTED([DEFAULT_DM_ADD_NODE], $add_on, [Define default node creation
AC_MSG_CHECKING(default name mangling)
AC_ARG_WITH(default-name-mangling,
AC_HELP_STRING([--with-default-name-mangling=MANGLING],
- [default name mangling: auto/none/hex [[MANGLING=auto]]]),
+ [default name mangling: auto/none/hex [auto]]),
MANGLING=$withval, MANGLING=auto)
case "$MANGLING" in
auto) mangling=DM_STRING_MANGLING_AUTO;;
@@ -264,8 +264,7 @@ dnl -- format1 inclusion type
AC_MSG_CHECKING(whether to include support for lvm1 metadata)
AC_ARG_WITH(lvm1,
AC_HELP_STRING([--with-lvm1=TYPE],
- [LVM1 metadata support: internal/shared/none
- [[TYPE=internal]]]),
+ [LVM1 metadata support: internal/shared/none [internal]]),
LVM1=$withval, LVM1=internal)
AC_MSG_RESULT($LVM1)
@@ -282,8 +281,7 @@ dnl -- format_pool inclusion type
AC_MSG_CHECKING(whether to include support for GFS pool metadata)
AC_ARG_WITH(pool,
AC_HELP_STRING([--with-pool=TYPE],
- [GFS pool read-only support: internal/shared/none
- [[TYPE=internal]]]),
+ [GFS pool read-only support: internal/shared/none [internal]]),
POOL=$withval, POOL=internal)
AC_MSG_RESULT($POOL)
@@ -299,8 +297,7 @@ dnl -- cluster_locking inclusion type
AC_MSG_CHECKING(whether to include support for cluster locking)
AC_ARG_WITH(cluster,
AC_HELP_STRING([--with-cluster=TYPE],
- [cluster LVM locking support: internal/shared/none
- [[TYPE=internal]]]),
+ [cluster LVM locking support: internal/shared/none [internal]]),
CLUSTER=$withval)
AC_MSG_RESULT($CLUSTER)
@@ -316,8 +313,7 @@ dnl -- snapshots inclusion type
AC_MSG_CHECKING(whether to include snapshots)
AC_ARG_WITH(snapshots,
AC_HELP_STRING([--with-snapshots=TYPE],
- [snapshot support: internal/shared/none
- [[TYPE=internal]]]),
+ [snapshot support: internal/shared/none [internal]]),
SNAPSHOTS=$withval, SNAPSHOTS=internal)
AC_MSG_RESULT($SNAPSHOTS)
@@ -333,8 +329,7 @@ dnl -- mirrors inclusion type
AC_MSG_CHECKING(whether to include mirrors)
AC_ARG_WITH(mirrors,
AC_HELP_STRING([--with-mirrors=TYPE],
- [mirror support: internal/shared/none
- [[TYPE=internal]]]),
+ [mirror support: internal/shared/none [internal]]),
MIRRORS=$withval, MIRRORS=internal)
AC_MSG_RESULT($MIRRORS)
@@ -350,8 +345,7 @@ dnl -- raid inclusion type
AC_MSG_CHECKING(whether to include raid)
AC_ARG_WITH(raid,
AC_HELP_STRING([--with-raid=TYPE],
- [raid support: internal/shared/none
- [[TYPE=internal]]]),
+ [raid support: internal/shared/none [internal]]),
RAID=$withval, RAID=internal)
AC_MSG_RESULT($RAID)
@@ -367,8 +361,7 @@ dnl -- asynchronous volume replicator inclusion type
AC_MSG_CHECKING(whether to include replicators)
AC_ARG_WITH(replicators,
AC_HELP_STRING([--with-replicators=TYPE],
- [replicator support: internal/shared/none
- [[TYPE=none]]]),
+ [replicator support: internal/shared/none [none]]),
REPLICATORS=$withval, REPLICATORS=none)
AC_MSG_RESULT($REPLICATORS)
@@ -384,24 +377,23 @@ dnl -- thin provisioning
AC_MSG_CHECKING(whether to include thin provisioning)
AC_ARG_WITH(thin,
AC_HELP_STRING([--with-thin=TYPE],
- [thin provisioning support: internal/shared/none
- [[TYPE=internal]]]),
+ [thin provisioning support: internal/shared/none [internal]]),
THIN=$withval, THIN=internal)
AC_ARG_WITH(thin-check,
AC_HELP_STRING([--with-thin-check=PATH],
- [thin_check tool: [[autodetect]]]),
+ [thin_check tool: [autodetect]]),
THIN_CHECK_CMD=$withval, THIN_CHECK_CMD="autodetect")
AC_ARG_WITH(thin-dump,
AC_HELP_STRING([--with-thin-dump=PATH],
- [thin_dump tool: [[autodetect]]]),
+ [thin_dump tool: [autodetect]]),
THIN_DUMP_CMD=$withval, THIN_DUMP_CMD="autodetect")
AC_ARG_WITH(thin-repair,
AC_HELP_STRING([--with-thin-repair=PATH],
- [thin_repair tool: [[autodetect]]]),
+ [thin_repair tool: [autodetect]]),
THIN_REPAIR_CMD=$withval, THIN_REPAIR_CMD="autodetect")
AC_ARG_WITH(thin-restore,
AC_HELP_STRING([--with-thin-restore=PATH],
- [thin_restore tool: [[autodetect]]]),
+ [thin_restore tool: [autodetect]]),
THIN_RESTORE_CMD=$withval, THIN_RESTORE_CMD="autodetect")
AC_MSG_RESULT($THIN)
@@ -500,23 +492,23 @@ dnl -- cache inclusion type
AC_MSG_CHECKING(whether to include cache)
AC_ARG_WITH(cache,
AC_HELP_STRING([--with-cache=TYPE],
- [cache support: internal/shared/none [[TYPE=internal]]]),
+ [cache support: internal/shared/none [internal]]),
CACHE=$withval, CACHE="internal")
AC_ARG_WITH(cache-check,
AC_HELP_STRING([--with-cache-check=PATH],
- [cache_check tool: [[autodetect]]]),
+ [cache_check tool: [autodetect]]),
CACHE_CHECK_CMD=$withval, CACHE_CHECK_CMD="autodetect")
AC_ARG_WITH(cache-dump,
AC_HELP_STRING([--with-cache-dump=PATH],
- [cache_dump tool: [[autodetect]]]),
+ [cache_dump tool: [autodetect]]),
CACHE_DUMP_CMD=$withval, CACHE_DUMP_CMD="autodetect")
AC_ARG_WITH(cache-repair,
AC_HELP_STRING([--with-cache-repair=PATH],
- [cache_repair tool: [[autodetect]]]),
+ [cache_repair tool: [autodetect]]),
CACHE_REPAIR_CMD=$withval, CACHE_REPAIR_CMD="autodetect")
AC_ARG_WITH(cache-restore,
AC_HELP_STRING([--with-cache-restore=PATH],
- [cache_restore tool: [[autodetect]]]),
+ [cache_restore tool: [autodetect]]),
CACHE_RESTORE_CMD=$withval, CACHE_RESTORE_CMD="autodetect")
AC_MSG_RESULT($CACHE)
@@ -608,7 +600,7 @@ AC_ARG_ENABLE(ocf,
AC_MSG_RESULT($OCF)
AC_ARG_WITH(ocfdir,
AC_HELP_STRING([--with-ocfdir=DIR],
- [install OCF files in DIR [[PREFIX/lib/ocf/resource.d/lvm2]]]),
+ [install OCF files in [PREFIX/lib/ocf/resource.d/lvm2]]),
OCFDIR=$withval, OCFDIR='${prefix}/lib/ocf/resource.d/lvm2')
################################################################################
@@ -629,7 +621,7 @@ dnl -- Set up pidfile and run directory
AH_TEMPLATE(DEFAULT_PID_DIR)
AC_ARG_WITH(default-pid-dir,
AC_HELP_STRING([--with-default-pid-dir=PID_DIR],
- [Default directory to keep PID files in. [[/var/run]]]),
+ [Default directory to keep PID files in. [/var/run]]),
DEFAULT_PID_DIR="$withval", DEFAULT_PID_DIR="/var/run")
AC_DEFINE_UNQUOTED(DEFAULT_PID_DIR, ["$DEFAULT_PID_DIR"],
[Default directory to keep PID files in.])
@@ -637,7 +629,7 @@ AC_DEFINE_UNQUOTED(DEFAULT_PID_DIR, ["$DEFAULT_PID_DIR"],
AH_TEMPLATE(DEFAULT_DM_RUN_DIR, [Name of default DM run directory.])
AC_ARG_WITH(default-dm-run-dir,
AC_HELP_STRING([--with-default-dm-run-dir=DM_RUN_DIR],
- [ Default DM run directory. [[/var/run]]]),
+ [ Default DM run directory. [/var/run]]),
DEFAULT_DM_RUN_DIR="$withval", DEFAULT_DM_RUN_DIR="/var/run")
AC_DEFINE_UNQUOTED(DEFAULT_DM_RUN_DIR, ["$DEFAULT_DM_RUN_DIR"],
[Default DM run directory.])
@@ -645,7 +637,7 @@ AC_DEFINE_UNQUOTED(DEFAULT_DM_RUN_DIR, ["$DEFAULT_DM_RUN_DIR"],
AH_TEMPLATE(DEFAULT_RUN_DIR, [Name of default LVM run directory.])
AC_ARG_WITH(default-run-dir,
AC_HELP_STRING([--with-default-run-dir=RUN_DIR],
- [Default LVM run directory. [[/var/run/lvm]]]),
+ [Default LVM run directory. [/var/run/lvm]]),
DEFAULT_RUN_DIR="$withval", DEFAULT_RUN_DIR="/var/run/lvm")
AC_DEFINE_UNQUOTED(DEFAULT_RUN_DIR, ["$DEFAULT_RUN_DIR"],
[Default LVM run directory.])
@@ -661,7 +653,7 @@ AC_ARG_WITH(clvmd,
* singlenode (localhost only)
* all (autodetect)
* none (disable build)
- [[TYPE=none]]],
+ [[none]]],
CLVMD=$withval, CLVMD=none)
test "$CLVMD" = yes && CLVMD=all
AC_MSG_RESULT($CLVMD)
@@ -878,7 +870,7 @@ 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]]]),
+ [clvmd pidfile [PID_DIR/clvmd.pid]]),
CLVMD_PIDFILE=$withval,
CLVMD_PIDFILE="$DEFAULT_PID_DIR/clvmd.pid")
AC_DEFINE_UNQUOTED(CLVMD_PIDFILE, ["$CLVMD_PIDFILE"],
@@ -901,7 +893,7 @@ dnl -- cmirrord pidfile
if test "$BUILD_CMIRRORD" = yes; then
AC_ARG_WITH(cmirrord-pidfile,
AC_HELP_STRING([--with-cmirrord-pidfile=PATH],
- [cmirrord pidfile [[PID_DIR/cmirrord.pid]]]),
+ [cmirrord pidfile [PID_DIR/cmirrord.pid]]),
CMIRRORD_PIDFILE=$withval,
CMIRRORD_PIDFILE="$DEFAULT_PID_DIR/cmirrord.pid")
AC_DEFINE_UNQUOTED(CMIRRORD_PIDFILE, ["$CMIRRORD_PIDFILE"],
@@ -948,7 +940,7 @@ dnl -- Override optimisation
AC_MSG_CHECKING(for C optimisation flag)
AC_ARG_WITH(optimisation,
AC_HELP_STRING([--with-optimisation=OPT],
- [C optimisation flag [[OPT=-O2]]]),
+ [C optimisation flag [OPT=-O2]]),
COPTIMISE_FLAG=$withval)
AC_MSG_RESULT($COPTIMISE_FLAG)
@@ -1040,7 +1032,7 @@ if test "$BUILD_LVMETAD" = yes; then
AC_ARG_WITH(lvmetad-pidfile,
AC_HELP_STRING([--with-lvmetad-pidfile=PATH],
- [lvmetad pidfile [[PID_DIR/lvmetad.pid]]]),
+ [lvmetad pidfile [PID_DIR/lvmetad.pid]]),
LVMETAD_PIDFILE=$withval,
LVMETAD_PIDFILE="$DEFAULT_PID_DIR/lvmetad.pid")
AC_DEFINE_UNQUOTED(LVMETAD_PIDFILE, ["$LVMETAD_PIDFILE"],
@@ -1405,8 +1397,7 @@ if test "$INTL" = yes; then
AC_ARG_WITH(localedir,
AC_HELP_STRING([--with-localedir=DIR],
- [translation files in DIR
- [[PREFIX/share/locale]]]),
+ [translation files in DIR [PREFIX/share/locale]]),
LOCALEDIR=$withval, LOCALEDIR='${prefix}/share/locale')
fi
@@ -1414,33 +1405,33 @@ fi
dnl -- FIXME: need to switch to regular option here --sysconfdir
AC_ARG_WITH(confdir,
AC_HELP_STRING([--with-confdir=DIR],
- [configuration files in DIR [[/etc]]]),
+ [configuration files in DIR [/etc]]),
CONFDIR=$withval, CONFDIR='/etc')
AC_ARG_WITH(staticdir,
AC_HELP_STRING([--with-staticdir=DIR],
- [static binaries in DIR [[EPREFIX/sbin]]]),
+ [static binaries in DIR [EPREFIX/sbin]]),
STATICDIR=$withval, STATICDIR='${exec_prefix}/sbin')
AC_ARG_WITH(usrlibdir,
AC_HELP_STRING([--with-usrlibdir=DIR],
- [usrlib in DIR [[PREFIX/lib]]]),
+ [usrlib in DIR [PREFIX/lib]]),
usrlibdir=$withval, usrlibdir='${prefix}/lib')
AC_ARG_WITH(usrsbindir,
AC_HELP_STRING([--with-usrsbindir=DIR],
- [usrsbin executables in DIR [[PREFIX/sbin]]]),
+ [usrsbin executables in DIR [PREFIX/sbin]]),
usrsbindir=$withval, usrsbindir='${prefix}/sbin')
################################################################################
AC_ARG_WITH(udev_prefix,
AC_HELP_STRING([--with-udev-prefix=UPREFIX],
- [install udev rule files in UPREFIX [[EPREFIX]]]),
+ [install udev rule files in UPREFIX [EPREFIX]]),
udev_prefix=$withval, udev_prefix='${exec_prefix}')
AC_ARG_WITH(udevdir,
AC_HELP_STRING([--with-udevdir=DIR],
- [udev rules in DIR [[UPREFIX/lib/udev/rules.d]]]),
+ [udev rules in DIR [UPREFIX/lib/udev/rules.d]]),
udevdir=$withval, udevdir='${udev_prefix}/lib/udev/rules.d')
################################################################################
@@ -1462,7 +1453,7 @@ test -z "$systemdutildir" && systemdutildir='${exec_prefix}/lib/systemd';
################################################################################
AC_ARG_WITH(tmpfilesdir,
AC_HELP_STRING([--with-tmpfilesdir=DIR],
- [install configuration files for management of volatile files and directories in DIR [[PREFIX/lib/tmpfiles.d]]]),
+ [install configuration files for management of volatile files and directories in DIR [PREFIX/lib/tmpfiles.d]]),
tmpfilesdir=$withval, tmpfilesdir='${prefix}/lib/tmpfiles.d')
################################################################################
dnl -- Ensure additional headers required
@@ -1524,7 +1515,7 @@ dnl -- dmeventd pidfile and executable path
if test "$BUILD_DMEVENTD" = yes; then
AC_ARG_WITH(dmeventd-pidfile,
AC_HELP_STRING([--with-dmeventd-pidfile=PATH],
- [dmeventd pidfile [[PID_DIR/dmeventd.pid]]]),
+ [dmeventd pidfile [PID_DIR/dmeventd.pid]]),
DMEVENTD_PIDFILE=$withval,
DMEVENTD_PIDFILE="$DEFAULT_PID_DIR/dmeventd.pid")
AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE, ["$DMEVENTD_PIDFILE"],
@@ -1534,7 +1525,7 @@ fi
if test "$BUILD_DMEVENTD" = yes; then
AC_ARG_WITH(dmeventd-path,
AC_HELP_STRING([--with-dmeventd-path=PATH],
- [dmeventd path [[EPREFIX/sbin/dmeventd]]]),
+ [dmeventd path [EPREFIX/sbin/dmeventd]]),
DMEVENTD_PATH=$withval,
DMEVENTD_PATH="$lvm_exec_prefix/sbin/dmeventd")
AC_DEFINE_UNQUOTED(DMEVENTD_PATH, ["$DMEVENTD_PATH"],
@@ -1546,42 +1537,42 @@ dnl -- various defaults
dnl -- FIXME: need to switch to regular option here --sysconfdir
AC_ARG_WITH(default-system-dir,
AC_HELP_STRING([--with-default-system-dir=DIR],
- [default LVM system directory [[/etc/lvm]]]),
+ [default LVM system directory [/etc/lvm]]),
DEFAULT_SYS_DIR=$withval, DEFAULT_SYS_DIR="/etc/lvm")
AC_DEFINE_UNQUOTED(DEFAULT_SYS_DIR, ["$DEFAULT_SYS_DIR"],
[Path to LVM system directory.])
AC_ARG_WITH(default-profile-subdir,
AC_HELP_STRING([--with-default-profile-subdir=SUBDIR],
- [default configuration profile subdir [[profile]]]),
+ [default configuration profile subdir [profile]]),
DEFAULT_PROFILE_SUBDIR=$withval, DEFAULT_PROFILE_SUBDIR=profile)
AC_DEFINE_UNQUOTED(DEFAULT_PROFILE_SUBDIR, ["$DEFAULT_PROFILE_SUBDIR"],
[Name of default configuration profile subdirectory.])
AC_ARG_WITH(default-archive-subdir,
AC_HELP_STRING([--with-default-archive-subdir=SUBDIR],
- [default metadata archive subdir [[archive]]]),
+ [default metadata archive subdir [archive]]),
DEFAULT_ARCHIVE_SUBDIR=$withval, DEFAULT_ARCHIVE_SUBDIR=archive)
AC_DEFINE_UNQUOTED(DEFAULT_ARCHIVE_SUBDIR, ["$DEFAULT_ARCHIVE_SUBDIR"],
[Name of default metadata archive subdirectory.])
AC_ARG_WITH(default-backup-subdir,
AC_HELP_STRING([--with-default-backup-subdir=SUBDIR],
- [default metadata backup subdir [[backup]]]),
+ [default metadata backup subdir [backup]]),
DEFAULT_BACKUP_SUBDIR=$withval, DEFAULT_BACKUP_SUBDIR=backup)
AC_DEFINE_UNQUOTED(DEFAULT_BACKUP_SUBDIR, ["$DEFAULT_BACKUP_SUBDIR"],
[Name of default metadata backup subdirectory.])
AC_ARG_WITH(default-cache-subdir,
AC_HELP_STRING([--with-default-cache-subdir=SUBDIR],
- [default metadata cache subdir [[cache]]]),
+ [default metadata cache subdir [cache]]),
DEFAULT_CACHE_SUBDIR=$withval, DEFAULT_CACHE_SUBDIR=cache)
AC_DEFINE_UNQUOTED(DEFAULT_CACHE_SUBDIR, ["$DEFAULT_CACHE_SUBDIR"],
[Name of default metadata cache subdirectory.])
AC_ARG_WITH(default-locking-dir,
AC_HELP_STRING([--with-default-locking-dir=DIR],
- [default locking directory [[/var/lock/lvm]]]),
+ [default locking directory [/var/lock/lvm]]),
DEFAULT_LOCK_DIR=$withval, DEFAULT_LOCK_DIR="/var/lock/lvm")
AC_DEFINE_UNQUOTED(DEFAULT_LOCK_DIR, ["$DEFAULT_LOCK_DIR"],
[Name of default locking directory.])
@@ -1590,7 +1581,7 @@ AC_DEFINE_UNQUOTED(DEFAULT_LOCK_DIR, ["$DEFAULT_LOCK_DIR"],
dnl -- Setup default data alignment
AC_ARG_WITH(default-data-alignment,
AC_HELP_STRING([--with-default-data-alignment=NUM],
- [set the default data alignment in MiB [[1]]]),
+ [set the default data alignment in MiB [1]]),
DEFAULT_DATA_ALIGNMENT=$withval, DEFAULT_DATA_ALIGNMENT=1)
AC_DEFINE_UNQUOTED(DEFAULT_DATA_ALIGNMENT, [$DEFAULT_DATA_ALIGNMENT],
[Default data alignment.])
@@ -1600,7 +1591,7 @@ dnl -- which kernel interface to use (ioctl only)
AC_MSG_CHECKING(for kernel interface choice)
AC_ARG_WITH(interface,
AC_HELP_STRING([--with-interface=IFACE],
- [choose kernel interface (ioctl) [[ioctl]]]),
+ [choose kernel interface (ioctl) [ioctl]]),
interface=$withval, interface=ioctl)
test "$interface" != ioctl && AC_MSG_ERROR([--with-interface=ioctl required. fs no longer supported.])
AC_MSG_RESULT($interface)
9 years, 5 months