Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
List overview
Download
lvm2-commits
March 2013
----- 2024 -----
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
lvm2-commits@lists.fedorahosted.org
4 participants
40 discussions
Start a n
N
ew thread
master - cleanup: remove superfluous wrappers
by Peter Rajnoha
19 Mar '13
19 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=5b6bab2e30f9f3f8…
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))) {
1
0
0
0
master - thin: rework lvconvert
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=562ad293fd52b8f3…
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))
1
0
0
0
master - thin: cannot use snapshot merge with thinpool
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=9cf00666b320c67c…
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; }
1
0
0
0
master - thin: assign through structure
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=0191d99906a0ae01…
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.");
1
0
0
0
master - thin: read paramaters in front
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f572bf987e154293…
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),
1
0
0
0
master - thin: lvconvert read params sooner
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=82eee72019e73113…
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,
1
0
0
0
master - thin: move update_pool_params
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b36a776a7fed84fa…
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,
1
0
0
0
master - thin: mark passed args
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f06dd8725a85d344…
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);
1
0
0
0
master - cleanup: move comment
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b9fe52e811eba446…
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,
1
0
0
0
master - cleanup: indent
by Zdenek Kabelac
13 Mar '13
13 Mar '13
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=293a06c39a45bcdc…
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;
1
0
0
0
← Newer
1
2
3
4
Older →
Jump to page:
1
2
3
4
Results per page:
10
25
50
100
200