master - cleanup: remove superfluous wrappers
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=5b6bab2e30f9f3...
Commit: 5b6bab2e30f9f3f8f447e33c19590533c8c92123
Parent: 562ad293fd52b8f3096b28bcac20e32aa1e8c1b0
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Tue Mar 19 13:58:02 2013 +0100
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Tue Mar 19 13:58:02 2013 +0100
cleanup: remove superfluous wrappers
_find_pv_by_name -> find_pv_by_name
_find_pv_in_vg -> find_pv_in_vg
_find_pv_in_vg_by_uuid -> find_pv_in_vg_by_uuid
The only callers of the underscored variants were their wrappers
without the underscore. No other part of the code referenced the
underscored variants.
---
lib/metadata/metadata.c | 48 +++++++++-------------------------------------
1 files changed, 10 insertions(+), 38 deletions(-)
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 403d86d..7c2846c 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -40,15 +40,6 @@ static struct physical_volume *_pv_read(struct cmd_context *cmd,
struct format_instance *fid,
int warnings, int scan_label_only);
-static struct physical_volume *_find_pv_by_name(struct cmd_context *cmd,
- const char *pv_name);
-
-static struct pv_list *_find_pv_in_vg(const struct volume_group *vg,
- const char *pv_name);
-
-static struct pv_list *_find_pv_in_vg_by_uuid(const struct volume_group *vg,
- const struct id *id);
-
static uint32_t _vg_bad_status_bits(const struct volume_group *vg,
uint64_t status);
@@ -244,8 +235,8 @@ int add_pv_to_vg(struct volume_group *vg, const char *pv_name,
return 0;
}
- if (_find_pv_in_vg(vg, pv_name) ||
- _find_pv_in_vg_by_uuid(vg, &pv->id)) {
+ if (find_pv_in_vg(vg, pv_name) ||
+ find_pv_in_vg_by_uuid(vg, &pv->id)) {
if (!id_write_format(&pv->id, uuid, sizeof(uuid))) {
stack;
uuid[0] = '\0';
@@ -1690,13 +1681,7 @@ struct physical_volume *pv_create(const struct cmd_context *cmd,
/* FIXME: liblvm todo - make into function that returns handle */
struct pv_list *find_pv_in_vg(const struct volume_group *vg,
- const char *pv_name)
-{
- return _find_pv_in_vg(vg, pv_name);
-}
-
-static struct pv_list *_find_pv_in_vg(const struct volume_group *vg,
- const char *pv_name)
+ const char *pv_name)
{
struct pv_list *pvl;
@@ -1730,18 +1715,6 @@ int pv_is_in_vg(struct volume_group *vg, struct physical_volume *pv)
return 0;
}
-static struct pv_list *_find_pv_in_vg_by_uuid(const struct volume_group *vg,
- const struct id *id)
-{
- struct pv_list *pvl;
-
- dm_list_iterate_items(pvl, &vg->pvs)
- if (id_equal(&pvl->pv->id, id))
- return pvl;
-
- return NULL;
-}
-
/**
* find_pv_in_vg_by_uuid - Find PV in VG by PV UUID
* @vg: volume group to search
@@ -1757,7 +1730,13 @@ static struct pv_list *_find_pv_in_vg_by_uuid(const struct volume_group *vg,
struct pv_list *find_pv_in_vg_by_uuid(const struct volume_group *vg,
const struct id *id)
{
- return _find_pv_in_vg_by_uuid(vg, id);
+ struct pv_list *pvl;
+
+ dm_list_iterate_items(pvl, &vg->pvs)
+ if (id_equal(&pvl->pv->id, id))
+ return pvl;
+
+ return NULL;
}
struct lv_list *find_lv_in_vg(const struct volume_group *vg,
@@ -1825,13 +1804,6 @@ struct physical_volume *find_pv(struct volume_group *vg, struct device *dev)
struct physical_volume *find_pv_by_name(struct cmd_context *cmd,
const char *pv_name)
{
- return _find_pv_by_name(cmd, pv_name);
-}
-
-
-static struct physical_volume *_find_pv_by_name(struct cmd_context *cmd,
- const char *pv_name)
-{
struct physical_volume *pv;
if (!(pv = _pv_read(cmd, cmd->mem, pv_name, NULL, 1, 0))) {
11 years, 1 month
master - thin: rework lvconvert
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=562ad293fd52b8...
Commit: 562ad293fd52b8f3096b28bcac20e32aa1e8c1b0
Parent: 9cf00666b320c67cf717cbba0ab0758ca4adebd3
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 11 09:49:10 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:54 2013 +0100
thin: rework lvconvert
Usage of layer was not the best plan here - for proper devices stack
we have to keep correct reference in volume_group structure and
make the new thin pool LV appear as a new volume.
---
tools/lvconvert.c | 67 +++++++++++++++++++++++++++++-----------------------
1 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 9db1093..318ac9b 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1996,14 +1996,14 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
struct lvconvert_params *lp)
{
int r = 0;
- char *name;
const char *old_name;
- int len;
+ int len = strlen(pool_lv->name) + 16; /* _tmeta, _tdata */
struct lv_segment *seg;
- struct logical_volume *data_lv;
+ struct logical_volume *data_lv = pool_lv;
struct logical_volume *metadata_lv;
struct logical_volume *pool_metadata_lv;
struct logical_volume *external_lv = NULL;
+ char metadata_name[len], data_name[len];
if (!lv_is_visible(pool_lv)) {
log_error("Can't convert internal LV %s/%s.",
@@ -2037,20 +2037,16 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
return 0;
}
- len = strlen(pool_lv->name) + 16;
- if (!(name = dm_pool_alloc(pool_lv->vg->vgmem, len))) {
- log_error("Can't allocate new name.");
- return 0;
- }
-
- if (dm_snprintf(name, len, "%s_tmeta", pool_lv->name) < 0) {
- log_error("Failed to create layer name.");
+ if ((dm_snprintf(metadata_name, sizeof(metadata_name), "%s_tmeta",
+ pool_lv->name) < 0) ||
+ (dm_snprintf(data_name, sizeof(data_name), "%s_tdata",
+ pool_lv->name) < 0)) {
+ log_error("Failed to create lv names.");
return 0;
}
if (lp->pool_metadata_lv_name) {
- metadata_lv = find_lv(pool_lv->vg, lp->pool_metadata_lv_name);
- if (!metadata_lv) {
+ if (!(metadata_lv = find_lv(pool_lv->vg, lp->pool_metadata_lv_name))) {
log_error("Unknown metadata LV %s.", lp->pool_metadata_lv_name);
return 0;
}
@@ -2129,8 +2125,7 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
return 0;
}
- lp->poolmetadata_size =
- (uint64_t) metadata_lv->le_count * metadata_lv->vg->extent_size;
+ lp->poolmetadata_size = metadata_lv->size;
if (lp->poolmetadata_size > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE)) {
log_warn("WARNING: Maximum size used by metadata is %s, rest is unused.",
display_size(cmd, 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE));
@@ -2156,7 +2151,7 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
if (!get_stripe_params(cmd, &lp->stripes, &lp->stripe_size))
return_0;
- if (!(metadata_lv = alloc_pool_metadata(pool_lv, lp->alloc, name,
+ if (!(metadata_lv = alloc_pool_metadata(pool_lv, lp->alloc, metadata_name,
lp->pvh, lp->read_ahead,
lp->stripes, lp->stripe_size,
lp->poolmetadata_size)))
@@ -2169,28 +2164,40 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
return 0;
}
+ old_name = data_lv->name; /* Use for pool name */
/*
- * Since we wish to have underlaying dev, to match _tdata
- * rename data LV first, also checks for visible LV
+ * Since we wish to have underlaying devs to match _tdata
+ * rename data LV to match pool LV subtree first,
+ * also checks for visible LV.
*/
/* FIXME: any more types prohibited here? */
- /* FIXME: revert renamed LVs in fail path? */
+ if (!lv_rename_update(cmd, data_lv, data_name, 0))
+ return_0;
- /* FIXME: common code with metadata/thin_manip.c extend_pool() */
- /* Create layer _tdata */
- if (!(data_lv = insert_layer_for_lv(pool_lv->vg->cmd, pool_lv,
- pool_lv->status, "_tdata")))
+ if (!(pool_lv = lv_create_empty(old_name, NULL,
+ THIN_POOL | VISIBLE_LV | LVM_READ | LVM_WRITE,
+ ALLOC_INHERIT, data_lv->vg))) {
+ log_error("Creation of pool LV failed.");
+ return 0;
+ }
+
+ /* Allocate a new linear segment */
+ if (!(seg = alloc_lv_segment(lp->segtype, pool_lv, 0, data_lv->le_count,
+ pool_lv->status, 0, NULL, NULL, 1, data_lv->le_count,
+ 0, 0, 0, NULL)))
return_0;
- seg = first_seg(pool_lv);
- seg->segtype = lp->segtype;
- seg->lv->status |= THIN_POOL;
+ /* Add the new segment to the layer LV */
+ dm_list_add(&pool_lv->segments, &seg->list);
+ pool_lv->le_count = data_lv->le_count;
+ pool_lv->size = data_lv->size;
- /* Drop reference as attach_pool_data_lv() takes it again */
- remove_seg_from_segs_using_this_lv(data_lv, seg);
if (!attach_pool_data_lv(seg, data_lv))
return_0;
+ /* FIXME: revert renamed LVs in fail path? */
+ /* FIXME: any common code with metadata/thin_manip.c extend_pool() ? */
+
seg->low_water_mark = 0;
seg->transaction_id = 0;
@@ -2201,8 +2208,8 @@ mda_write:
/* Rename deactivated metadata LV to have _tmeta suffix */
/* Implicit checks if metadata_lv is visible */
- if (strcmp(metadata_lv->name, name) &&
- !lv_rename_update(cmd, metadata_lv, name, 0))
+ if (strcmp(metadata_lv->name, metadata_name) &&
+ !lv_rename_update(cmd, metadata_lv, metadata_name, 0))
return_0;
if (!attach_pool_metadata_lv(seg, metadata_lv))
11 years, 1 month
master - thin: cannot use snapshot merge with thinpool
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=9cf00666b320c6...
Commit: 9cf00666b320c67cf717cbba0ab0758ca4adebd3
Parent: 0191d99906a0ae017b827752232bb7461ccf8f09
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 11 10:44:05 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:54 2013 +0100
thin: cannot use snapshot merge with thinpool
---
tools/lvconvert.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 6a64c2b..9db1093 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -191,9 +191,10 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
if ((arg_count(cmd, snapshot_ARG) || arg_count(cmd, merge_ARG)) &&
(arg_count(cmd, mirrorlog_ARG) || arg_count(cmd, mirrors_ARG) ||
- arg_count(cmd, repair_ARG))) {
+ arg_count(cmd, repair_ARG) || arg_count(cmd, thinpool_ARG))) {
log_error("--snapshot or --merge argument cannot be mixed "
- "with --mirrors, --repair or --mirrorlog");
+ "with --mirrors, --mirrorlog, --repair "
+ "or --thinpool.");
return 0;
}
11 years, 1 month
master - thin: assign through structure
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=0191d99906a0ae...
Commit: 0191d99906a0ae017b827752232bb7461ccf8f09
Parent: f572bf987e15429392b5ed4d2f0f01d53a95563b
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Mar 8 14:12:56 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:54 2013 +0100
thin: assign through structure
Just simplify code.
---
tools/lvconvert.c | 32 ++++++++++++++++----------------
1 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 1ab9971..6a64c2b 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1900,32 +1900,32 @@ static int _lvconvert_thinpool_external(struct cmd_context *cmd,
{
struct logical_volume *torigin_lv;
struct volume_group *vg = pool_lv->vg;
- struct lvcreate_params lvc = { 0 };
+ struct lvcreate_params lvc = {
+ .activate = CHANGE_AE,
+ .alloc = ALLOC_INHERIT,
+ .lv_name = lp->origin_lv_name,
+ .major = -1,
+ .minor = -1,
+ .permission = LVM_READ,
+ .pool = pool_lv->name,
+ .pvh = &vg->pvs,
+ .read_ahead = DM_READ_AHEAD_AUTO,
+ .stripes = 1,
+ .vg_name = vg->name,
+ .voriginextents = external_lv->le_count,
+ .voriginsize = external_lv->size,
+ };
dm_list_init(&lvc.tags);
if (!(lvc.segtype = get_segtype_from_string(cmd, "thin")))
return_0;
- lvc.activate = CHANGE_AE;
- lvc.alloc = ALLOC_INHERIT;
- lvc.lv_name = lp->origin_lv_name;
- lvc.major = -1;
- lvc.minor = -1;
- lvc.permission = LVM_READ;
- lvc.pool = pool_lv->name;
- lvc.pvh = &vg->pvs;
- lvc.read_ahead = DM_READ_AHEAD_AUTO;
- lvc.stripes = 1;
- lvc.vg_name = vg->name;
- lvc.voriginextents = external_lv->le_count;
- lvc.voriginsize = external_lv->size;
-
/* New thin LV needs to be created (all messages sent to pool) */
if (!(torigin_lv = lv_create_single(vg, &lvc)))
return_0;
- /* Activate again via -torigin, so this active LV is not needed */
+ /* Deactivate prepared Thin LV */
if (!deactivate_lv(cmd, torigin_lv)) {
log_error("Aborting. Unable to deactivate new LV. "
"Manual intervention required.");
11 years, 1 month
master - thin: read paramaters in front
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f572bf987e1542...
Commit: f572bf987e15429392b5ed4d2f0f01d53a95563b
Parent: 82eee72019e7311341fcd4e36bf92a8264f353cd
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 11 12:40:05 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:54 2013 +0100
thin: read paramaters in front
Fill paramaters into lvconvert_params -
so we could use it independently on args()
---
tools/lvconvert.c | 21 +++++++++++++++------
1 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 932a4f6..1ab9971 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -18,9 +18,12 @@
#include "metadata.h"
struct lvconvert_params {
+ int force;
int snapshot;
int merge;
int merge_mirror;
+ int thin;
+ int yes;
int zero;
const char *origin;
@@ -97,12 +100,12 @@ static int _lvconvert_name_params(struct lvconvert_params *lp,
if (lp->pool_data_lv_name) {
if (*pargc) {
- if (!arg_count(cmd, thin_ARG)) {
+ if (!lp->thin) {
log_error("More then one logical volume name specified.");
return 0;
}
} else {
- if (arg_count(cmd, thin_ARG)) {
+ if (lp->thin) {
log_error("External thin volume name is missing.");
return 0;
}
@@ -219,6 +222,9 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
return 0;
}
+ if (arg_count(cmd, thin_ARG))
+ lp->thin = 1;
+
if (arg_count(cmd, thinpool_ARG)) {
if (arg_count(cmd, merge_ARG)) {
log_error("--thinpool and --merge are mutually exlusive.");
@@ -241,7 +247,7 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
return 0;
}
lp->discards = (thin_discards_t) arg_uint_value(cmd, discards_ARG, THIN_DISCARDS_PASSDOWN);
- } else if (arg_count(cmd, thin_ARG)) {
+ } else if (lp->thin) {
log_error("--thin is only valid with --thinpool.");
return 0;
} else if (arg_count(cmd, discards_ARG)) {
@@ -488,6 +494,9 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
return_0;
}
+ lp->force = arg_count(cmd, force_ARG);
+ lp->yes = arg_count(cmd, yes_ARG);
+
if (activation() && lp->segtype && lp->segtype->ops->target_present &&
!lp->segtype->ops->target_present(cmd, NULL, &lp->target_attr)) {
log_error("%s: Required device-mapper target(s) not "
@@ -2001,7 +2010,7 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
return 0;
}
- if (arg_count(cmd, thin_ARG)) {
+ if (lp->thin) {
external_lv = pool_lv;
if (!(pool_lv = find_lv(external_lv->vg, lp->pool_data_lv_name))) {
log_error("Can't find pool LV %s/%s.",
@@ -2072,7 +2081,7 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
log_error("Aborting. Failed to deactivate thin metadata lv.");
return 0;
}
- if (!arg_count(cmd, yes_ARG) &&
+ if (!lp->yes &&
yes_no_prompt("Do you want to swap metadata of %s/%s pool with "
"volume %s/%s? [y/n]: ",
pool_lv->vg->name, pool_lv->name,
@@ -2093,7 +2102,7 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
if (!arg_count(cmd, chunksize_ARG))
lp->chunk_size = seg->chunk_size;
else if ((lp->chunk_size != seg->chunk_size) &&
- !arg_count(cmd, force_ARG) &&
+ !lp->force &&
yes_no_prompt("Do you really want to change chunk size %s to %s for %s/%s "
"pool volume? [y/n]: ", display_size(cmd, seg->chunk_size),
display_size(cmd, lp->chunk_size),
11 years, 1 month
master - thin: lvconvert read params sooner
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=82eee72019e731...
Commit: 82eee72019e7311341fcd4e36bf92a8264f353cd
Parent: b36a776a7fed84fa6228ffa287b4c9ccdf355ddf
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 11 10:44:49 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:54 2013 +0100
thin: lvconvert read params sooner
Move code for reading stripesize and readahead to the
_read_params function.
---
tools/lvconvert.c | 24 +++++++++++++-----------
1 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 88ad719..932a4f6 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -390,9 +390,22 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
log_error("--poolmetadatasize is invalid with --poolmetadata.");
return 0;
}
+ if (arg_count(cmd, stripesize_ARG) || arg_count(cmd, stripes_long_ARG)) {
+ log_error("Can't use --stripes and --stripesize with --poolmetadata.");
+ return 0;
+ }
+
+ if (arg_count(cmd, readahead_ARG)) {
+ log_error("Can't use --readahead with --poolmetadata.");
+ return 0;
+ }
lp->pool_metadata_lv_name = arg_str_value(cmd, poolmetadata_ARG, "");
}
+ /* Hmm _read_activation_params */
+ lp->read_ahead = arg_uint_value(cmd, readahead_ARG,
+ cmd->default_settings.read_ahead);
+
/* If --thinpool contains VG name, extract it. */
if ((tmp_str = strchr(lp->pool_data_lv_name, (int) '/'))) {
if (!(lp->vg_name = extract_vgname(cmd, lp->pool_data_lv_name)))
@@ -2026,14 +2039,6 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
}
if (lp->pool_metadata_lv_name) {
- if (arg_count(cmd, stripesize_ARG) || arg_count(cmd, stripes_long_ARG)) {
- log_error("Can't use --stripes and --stripesize with --poolmetadata.");
- return 0;
- }
- if (arg_count(cmd, readahead_ARG)) {
- log_error("Can't use --readahead with --poolmetadata.");
- return 0;
- }
metadata_lv = find_lv(pool_lv->vg, lp->pool_metadata_lv_name);
if (!metadata_lv) {
log_error("Unknown metadata LV %s.", lp->pool_metadata_lv_name);
@@ -2140,9 +2145,6 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
if (!get_stripe_params(cmd, &lp->stripes, &lp->stripe_size))
return_0;
- /* Hmm _read_activation_params */
- lp->read_ahead = arg_uint_value(cmd, readahead_ARG,
- cmd->default_settings.read_ahead);
if (!(metadata_lv = alloc_pool_metadata(pool_lv, lp->alloc, name,
lp->pvh, lp->read_ahead,
11 years, 1 month
master - thin: move update_pool_params
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b36a776a7fed84...
Commit: b36a776a7fed84fa6228ffa287b4c9ccdf355ddf
Parent: f06dd8725a85d344820eda91835c58f489097563
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 11 12:37:09 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:54 2013 +0100
thin: move update_pool_params
Now we may recongnize preset arguments, move
the code for updating thin pool related values
into /lib portion of the code.
---
WHATS_NEW | 1 +
lib/metadata/metadata-exported.h | 4 ++
lib/metadata/thin_manip.c | 88 ++++++++++++++++++++++++++++++++++++++
tools/toollib.c | 87 -------------------------------------
tools/toollib.h | 5 +--
5 files changed, 94 insertions(+), 91 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 082b414..68a7d03 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.99 -
===================================
+ Move update_pool_params() from /tools to /lib for better reuse.
Give precedence to EMC power2 devices with duplicate PVIDs.
Add --validate option to lvm dumpconfig to validate current config on demand.
Add --ignoreadvanced and --ignoreunsupported switch to lvm dumpconfig.
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 5ed8f3e..c2728d5 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -576,6 +576,10 @@ uint64_t extents_from_size(struct cmd_context *cmd, uint64_t size,
int pool_is_active(const struct logical_volume *pool_lv);
int update_pool_lv(struct logical_volume *lv, int activate);
+int update_pool_params(struct cmd_context *cmd, unsigned attr, int passed_args,
+ uint32_t data_extents, uint32_t extent_size,
+ uint32_t *chunk_size, thin_discards_t *discards,
+ uint64_t *pool_metadata_size);
int get_pool_discards(const char *str, thin_discards_t *discards);
const char *get_pool_discards_name(thin_discards_t discards);
diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c
index c994a2e..10c8f43 100644
--- a/lib/metadata/thin_manip.c
+++ b/lib/metadata/thin_manip.c
@@ -20,6 +20,7 @@
#include "lv_alloc.h"
#include "archiver.h"
#include "defaults.h"
+#include "display.h"
int attach_pool_metadata_lv(struct lv_segment *pool_seg, struct logical_volume *metadata_lv)
{
@@ -523,6 +524,93 @@ int update_pool_lv(struct logical_volume *lv, int activate)
return 1;
}
+int update_pool_params(struct cmd_context *cmd, unsigned attr, int passed_args,
+ uint32_t data_extents, uint32_t extent_size,
+ uint32_t *chunk_size, thin_discards_t *discards,
+ uint64_t *pool_metadata_size)
+{
+ size_t estimate_chunk_size;
+
+ if (!(attr & THIN_FEATURE_BLOCK_SIZE) &&
+ (*chunk_size & (*chunk_size - 1))) {
+ log_error("Chunk size must be a power of 2 for this thin target version.");
+ return 0;
+ } else if (*chunk_size & (DM_THIN_MIN_DATA_BLOCK_SIZE - 1)) {
+ log_error("Chunk size must be multiple of %s.",
+ display_size(cmd, DM_THIN_MIN_DATA_BLOCK_SIZE));
+ return 0;
+ }
+
+ if (!*pool_metadata_size) {
+ /* Defaults to nr_pool_blocks * 64b converted to size in sectors */
+ *pool_metadata_size = (uint64_t) data_extents * extent_size /
+ (*chunk_size * (SECTOR_SIZE / UINT64_C(64)));
+ /* Check if we could eventually use bigger chunk size */
+ if (!(passed_args & PASS_ARG_CHUNK_SIZE)) {
+ while ((*pool_metadata_size >
+ (DEFAULT_THIN_POOL_OPTIMAL_SIZE / SECTOR_SIZE)) &&
+ (*chunk_size < DM_THIN_MAX_DATA_BLOCK_SIZE)) {
+ *chunk_size <<= 1;
+ *pool_metadata_size >>= 1;
+ }
+ log_verbose("Setting chunk size to %s.",
+ display_size(cmd, *chunk_size));
+ } else if (*pool_metadata_size > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE)) {
+ /* Suggest bigger chunk size */
+ estimate_chunk_size = (uint64_t) data_extents * extent_size /
+ (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE *
+ (SECTOR_SIZE / UINT64_C(64)));
+ log_warn("WARNING: Chunk size is too small for pool, suggested minimum is %s.",
+ display_size(cmd, UINT64_C(1) << (ffs(estimate_chunk_size) + 1)));
+ }
+
+ /* Round up to extent size */
+ if (*pool_metadata_size % extent_size)
+ *pool_metadata_size += extent_size - *pool_metadata_size % extent_size;
+ } else {
+ estimate_chunk_size = (uint64_t) data_extents * extent_size /
+ (*pool_metadata_size * (SECTOR_SIZE / UINT64_C(64)));
+ /* Check to eventually use bigger chunk size */
+ if (!(passed_args & PASS_ARG_CHUNK_SIZE)) {
+ *chunk_size = estimate_chunk_size;
+
+ if (*chunk_size < DM_THIN_MIN_DATA_BLOCK_SIZE)
+ *chunk_size = DM_THIN_MIN_DATA_BLOCK_SIZE;
+ else if (*chunk_size > DM_THIN_MAX_DATA_BLOCK_SIZE)
+ *chunk_size = DM_THIN_MAX_DATA_BLOCK_SIZE;
+
+ log_verbose("Setting chunk size %s.",
+ display_size(cmd, *chunk_size));
+ } else if (*chunk_size < estimate_chunk_size) {
+ /* Suggest bigger chunk size */
+ log_warn("WARNING: Chunk size is smaller then suggested minimum size %s.",
+ display_size(cmd, estimate_chunk_size));
+ }
+ }
+
+ if ((uint64_t) *chunk_size > (uint64_t) data_extents * extent_size) {
+ log_error("Chunk size is bigger then pool data size.");
+ return 0;
+ }
+
+ if (*pool_metadata_size > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE)) {
+ if (passed_args & PASS_ARG_POOL_METADATA_SIZE)
+ log_warn("WARNING: Maximum supported pool metadata size is %s.",
+ display_size(cmd, 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE));
+ *pool_metadata_size = 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE;
+ } else if (*pool_metadata_size < (2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE)) {
+ if (passed_args & PASS_ARG_POOL_METADATA_SIZE)
+ log_warn("WARNING: Minimum supported pool metadata size is %s.",
+ display_size(cmd, 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE));
+ *pool_metadata_size = 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE;
+ }
+
+ log_verbose("Setting pool metadata size to %s.",
+ display_size(cmd, *pool_metadata_size));
+
+ return 1;
+}
+
int get_pool_discards(const char *str, thin_discards_t *discards)
{
if (!strcasecmp(str, "passdown"))
diff --git a/tools/toollib.c b/tools/toollib.c
index 10ada7c..f00988a 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1583,93 +1583,6 @@ int get_pool_params(struct cmd_context *cmd, int *passed_args,
return 1;
}
-int update_pool_params(struct cmd_context *cmd, unsigned attr, int passed_args,
- uint32_t data_extents, uint32_t extent_size,
- uint32_t *chunk_size, thin_discards_t *discards,
- uint64_t *pool_metadata_size)
-{
- size_t estimate_chunk_size;
-
- if (!(attr & THIN_FEATURE_BLOCK_SIZE) &&
- (*chunk_size & (*chunk_size - 1))) {
- log_error("Chunk size must be a power of 2 for this thin target version.");
- return 0;
- } else if (*chunk_size & (DM_THIN_MIN_DATA_BLOCK_SIZE - 1)) {
- log_error("Chunk size must be multiple of %s.",
- display_size(cmd, DM_THIN_MIN_DATA_BLOCK_SIZE));
- return 0;
- }
-
- if (!*pool_metadata_size) {
- /* Defaults to nr_pool_blocks * 64b converted to size in sectors */
- *pool_metadata_size = (uint64_t) data_extents * extent_size /
- (*chunk_size * (SECTOR_SIZE / UINT64_C(64)));
- /* Check if we could eventually use bigger chunk size */
- if (!arg_count(cmd, chunksize_ARG)) {
- while ((*pool_metadata_size >
- (DEFAULT_THIN_POOL_OPTIMAL_SIZE / SECTOR_SIZE)) &&
- (*chunk_size < DM_THIN_MAX_DATA_BLOCK_SIZE)) {
- *chunk_size <<= 1;
- *pool_metadata_size >>= 1;
- }
- log_verbose("Setting chunk size to %s.",
- display_size(cmd, *chunk_size));
- } else if (*pool_metadata_size > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE)) {
- /* Suggest bigger chunk size */
- estimate_chunk_size = (uint64_t) data_extents * extent_size /
- (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE *
- (SECTOR_SIZE / UINT64_C(64)));
- log_warn("WARNING: Chunk size is too small for pool, suggested minimum is %s.",
- display_size(cmd, UINT64_C(1) << (ffs(estimate_chunk_size) + 1)));
- }
-
- /* Round up to extent size */
- if (*pool_metadata_size % extent_size)
- *pool_metadata_size += extent_size - *pool_metadata_size % extent_size;
- } else {
- estimate_chunk_size = (uint64_t) data_extents * extent_size /
- (*pool_metadata_size * (SECTOR_SIZE / UINT64_C(64)));
- /* Check to eventually use bigger chunk size */
- if (!arg_count(cmd, chunksize_ARG)) {
- *chunk_size = estimate_chunk_size;
-
- if (*chunk_size < DM_THIN_MIN_DATA_BLOCK_SIZE)
- *chunk_size = DM_THIN_MIN_DATA_BLOCK_SIZE;
- else if (*chunk_size > DM_THIN_MAX_DATA_BLOCK_SIZE)
- *chunk_size = DM_THIN_MAX_DATA_BLOCK_SIZE;
-
- log_verbose("Setting chunk size %s.",
- display_size(cmd, *chunk_size));
- } else if (*chunk_size < estimate_chunk_size) {
- /* Suggest bigger chunk size */
- log_warn("WARNING: Chunk size is smaller then suggested minimum size %s.",
- display_size(cmd, estimate_chunk_size));
- }
- }
-
- if ((uint64_t) *chunk_size > (uint64_t) data_extents * extent_size) {
- log_error("Chunk size is bigger then pool data size.");
- return 0;
- }
-
- if (*pool_metadata_size > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE)) {
- if (arg_count(cmd, poolmetadatasize_ARG))
- log_warn("WARNING: Maximum supported pool metadata size is %s.",
- display_size(cmd, 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE));
- *pool_metadata_size = 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE;
- } else if (*pool_metadata_size < (2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE)) {
- if (arg_count(cmd, poolmetadatasize_ARG))
- log_warn("WARNING: Minimum supported pool metadata size is %s.",
- display_size(cmd, 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE));
- *pool_metadata_size = 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE;
- }
-
- log_verbose("Setting pool metadata size to %s.",
- display_size(cmd, *pool_metadata_size));
-
- return 1;
-}
-
struct logical_volume *alloc_pool_metadata(struct logical_volume *pool_lv,
alloc_policy_t alloc,
const char *name,
diff --git a/tools/toollib.h b/tools/toollib.h
index 9a4743d..2ca7951 100644
--- a/tools/toollib.h
+++ b/tools/toollib.h
@@ -117,10 +117,7 @@ int get_pool_params(struct cmd_context *cmd, int *passed_args,
thin_discards_t *discards,
uint64_t *pool_metadata_size,
int *zero);
-int update_pool_params(struct cmd_context *cmd, unsigned attr, int passed_args,
- uint32_t data_extents, uint32_t extent_size,
- uint32_t *chunk_size, thin_discards_t *discards,
- uint64_t *pool_metadata_size);
+
struct logical_volume *alloc_pool_metadata(struct logical_volume *pool_lv,
alloc_policy_t alloc, const char *name,
struct dm_list *pvh, uint32_t read_ahead,
11 years, 1 month
master - thin: mark passed args
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f06dd8725a85d3...
Commit: f06dd8725a85d344820eda91835c58f489097563
Parent: b9fe52e811eba446813292e230502ac41040cdae
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Mar 6 11:58:09 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:54 2013 +0100
thin: mark passed args
Keep the flag whether given thin pool argument has been given on command
line or it's been 'estimated'
Call of update_pool_params() must not change cmdline given args and
needs to know this info.
Since there is a need to move this update function into /lib, we cannot
use arg_count().
FIXME: we need some generic mechanism here.
---
lib/metadata/metadata-exported.h | 8 ++++++++
tools/lvconvert.c | 7 ++++---
tools/lvcreate.c | 5 +++--
tools/toollib.c | 17 ++++++++++++-----
tools/toollib.h | 5 +++--
5 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 0ce5ad5..5ed8f3e 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -610,6 +610,14 @@ struct lvcreate_params {
const char *vg_name; /* all */
const char *lv_name; /* all */
+ /* Keep args given by the user on command line */
+ /* FIXME: create some more universal solution here */
+#define PASS_ARG_CHUNK_SIZE 0x01
+#define PASS_ARG_DISCARDS 0x02
+#define PASS_ARG_POOL_METADATA_SIZE 0x04
+#define PASS_ARG_ZERO 0x08
+ int passed_args;
+
uint32_t stripes; /* striped */
uint32_t stripe_size; /* striped */
uint32_t chunk_size; /* snapshot */
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index fcfcddb..88ad719 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -56,6 +56,7 @@ struct lvconvert_params {
struct logical_volume *lv_to_poll;
+ int passed_args;
uint64_t poolmetadata_size;
const char *origin_lv_name;
const char *pool_data_lv_name;
@@ -377,7 +378,7 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
return 0;
}
- if (!get_pool_params(cmd,
+ if (!get_pool_params(cmd, &lp->passed_args,
&lp->chunk_size,
&lp->discards,
&lp->poolmetadata_size,
@@ -2125,13 +2126,13 @@ static int _lvconvert_thinpool(struct cmd_context *cmd,
display_size(cmd, 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE));
return 0;
}
- if (!update_pool_params(cmd, lp->target_attr,
+ if (!update_pool_params(cmd, lp->target_attr, lp->passed_args,
pool_lv->le_count, pool_lv->vg->extent_size,
&lp->chunk_size, &lp->discards,
&lp->poolmetadata_size))
return_0;
} else {
- if (!update_pool_params(cmd, lp->target_attr,
+ if (!update_pool_params(cmd, lp->target_attr, lp->passed_args,
pool_lv->le_count, pool_lv->vg->extent_size,
&lp->chunk_size, &lp->discards,
&lp->poolmetadata_size))
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 4618321..aa75636 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -307,7 +307,7 @@ static int _update_extents_params(struct volume_group *vg,
}
if (lp->create_thin_pool) {
- if (!update_pool_params(vg->cmd, lp->target_attr,
+ if (!update_pool_params(vg->cmd, lp->target_attr, lp->passed_args,
lp->extents, vg->extent_size,
&lp->chunk_size, &lp->discards,
&lp->poolmetadatasize))
@@ -795,7 +795,8 @@ static int _lvcreate_params(struct lvcreate_params *lp,
!_read_size_params(lp, lcp, cmd) ||
!get_stripe_params(cmd, &lp->stripes, &lp->stripe_size) ||
(lp->create_thin_pool &&
- !get_pool_params(cmd, &lp->chunk_size, &lp->discards,
+ !get_pool_params(cmd, &lp->passed_args,
+ &lp->chunk_size, &lp->discards,
&lp->poolmetadatasize, &lp->zero)) ||
!_read_mirror_params(lp, cmd) ||
!_read_raid_params(lp, cmd))
diff --git a/tools/toollib.c b/tools/toollib.c
index 6b00155..10ada7c 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1523,7 +1523,7 @@ int get_activation_monitoring_mode(struct cmd_context *cmd,
return 1;
}
-int get_pool_params(struct cmd_context *cmd,
+int get_pool_params(struct cmd_context *cmd, int *passed_args,
uint32_t *chunk_size,
thin_discards_t *discards,
uint64_t *pool_metadata_size,
@@ -1531,13 +1531,16 @@ int get_pool_params(struct cmd_context *cmd,
{
const char *dstr;
+ *passed_args = 0;
if (arg_count(cmd, zero_ARG)) {
+ *passed_args |= PASS_ARG_ZERO;
*zero = strcmp(arg_str_value(cmd, zero_ARG, "y"), "n");
log_very_verbose("Setting pool zeroing: %u", *zero);
} else
*zero = find_config_tree_bool(cmd, allocation_thin_pool_zero_CFG);
if (arg_count(cmd, discards_ARG)) {
+ *passed_args |= PASS_ARG_DISCARDS;
*discards = (thin_discards_t) arg_uint_value(cmd, discards_ARG, 0);
log_very_verbose("Setting pool discards: %s",
get_pool_discards_name(*discards));
@@ -1552,6 +1555,7 @@ int get_pool_params(struct cmd_context *cmd,
log_error("Negative chunk size is invalid.");
return 0;
}
+ *passed_args |= PASS_ARG_CHUNK_SIZE;
*chunk_size = arg_uint_value(cmd, chunksize_ARG,
DM_THIN_MIN_DATA_BLOCK_SIZE);
log_very_verbose("Setting pool chunk size: %s",
@@ -1567,16 +1571,19 @@ int get_pool_params(struct cmd_context *cmd,
return 0;
}
- if (arg_sign_value(cmd, poolmetadatasize_ARG, SIGN_NONE) == SIGN_MINUS) {
- log_error("Negative pool metadata size is invalid.");
- return 0;
+ if (arg_count(cmd, poolmetadatasize_ARG)) {
+ if (arg_sign_value(cmd, poolmetadatasize_ARG, SIGN_NONE) == SIGN_MINUS) {
+ log_error("Negative pool metadata size is invalid.");
+ return 0;
+ }
+ *passed_args |= PASS_ARG_POOL_METADATA_SIZE;
}
*pool_metadata_size = arg_uint64_value(cmd, poolmetadatasize_ARG, UINT64_C(0));
return 1;
}
-int update_pool_params(struct cmd_context *cmd, unsigned attr,
+int update_pool_params(struct cmd_context *cmd, unsigned attr, int passed_args,
uint32_t data_extents, uint32_t extent_size,
uint32_t *chunk_size, thin_discards_t *discards,
uint64_t *pool_metadata_size)
diff --git a/tools/toollib.h b/tools/toollib.h
index 80c01fd..9a4743d 100644
--- a/tools/toollib.h
+++ b/tools/toollib.h
@@ -111,12 +111,13 @@ int pvcreate_params_validate(struct cmd_context *cmd,
int get_activation_monitoring_mode(struct cmd_context *cmd,
int *monitoring_mode);
-int get_pool_params(struct cmd_context *cmd,
+
+int get_pool_params(struct cmd_context *cmd, int *passed_args,
uint32_t *chunk_size,
thin_discards_t *discards,
uint64_t *pool_metadata_size,
int *zero);
-int update_pool_params(struct cmd_context *cmd, unsigned attr,
+int update_pool_params(struct cmd_context *cmd, unsigned attr, int passed_args,
uint32_t data_extents, uint32_t extent_size,
uint32_t *chunk_size, thin_discards_t *discards,
uint64_t *pool_metadata_size);
11 years, 1 month
master - cleanup: move comment
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b9fe52e811eba4...
Commit: b9fe52e811eba446813292e230502ac41040cdae
Parent: 293a06c39a45bcdcaabb2fa95e46f39466ef627f
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sun Feb 24 19:42:40 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:50 2013 +0100
cleanup: move comment
---
lib/activate/dev_manager.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index b8ee2f3..906f53a 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -492,7 +492,6 @@ static const struct dm_info *_cached_info(struct dm_pool *mem,
return NULL;
}
- /* An activating merging origin won't have a node in the tree yet */
if (!(dnode = dm_tree_find_node_by_uuid(dtree, dlid)))
return NULL;
@@ -2196,6 +2195,7 @@ static int _add_new_lv_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
* - open_count is always retrieved (as of dm-ioctl 4.7.0)
* so just use the tree's existing nodes' info
*/
+ /* An activating merging origin won't have a node in the tree yet */
if (((dinfo = _cached_info(dm->mem, dtree, lv, NULL)) &&
dinfo->open_count) ||
((dinfo = _cached_info(dm->mem, dtree,
11 years, 1 month
master - cleanup: indent
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=293a06c39a45bc...
Commit: 293a06c39a45bcdcaabb2fa95e46f39466ef627f
Parent: 521a0a3323507e1d07568d3047283975e66ca193
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sun Feb 24 19:37:01 2013 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Mar 13 15:13:42 2013 +0100
cleanup: indent
---
lib/activate/dev_manager.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index 8aa49fc..b8ee2f3 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -1307,7 +1307,7 @@ static uint16_t _get_udev_flags(struct dev_manager *dm, struct logical_volume *l
}
static int _add_dev_to_dtree(struct dev_manager *dm, struct dm_tree *dtree,
- struct logical_volume *lv, const char *layer)
+ struct logical_volume *lv, const char *layer)
{
char *dlid, *name;
struct dm_info info, info2;
11 years, 1 month