summaryrefslogtreecommitdiffstats
path: root/tools/lvcreate.c
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2012-03-02 20:18:25 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2012-03-02 20:18:25 +0000
commit79c42c6600abb4b766d93fb9b95d553d059db011 (patch)
tree561ab414f9d0dc8f65f9c9ffde30b614066bbf09 /tools/lvcreate.c
parentd742cdf32713726d3c170c59846073d951a76a6f (diff)
downloadlvm2-79c42c6600abb4b766d93fb9b95d553d059db011.tar.gz
lvm2-79c42c6600abb4b766d93fb9b95d553d059db011.tar.xz
lvm2-79c42c6600abb4b766d93fb9b95d553d059db011.zip
Merge metadata size checking
Move the code for poolmetadatasize operation into one place. Report override for minimum and maximum size. Drop _read_thin_params function its error reporting is handled elsewhere.
Diffstat (limited to 'tools/lvcreate.c')
-rw-r--r--tools/lvcreate.c62
1 files changed, 24 insertions, 38 deletions
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index d5df59eb..4d3ccfe7 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -293,15 +293,29 @@ static int _update_extents_params(struct volume_group *vg,
break;
}
- if (lp->create_thin_pool && !arg_count(vg->cmd, poolmetadatasize_ARG))
- /* Defaults to nr_pool_blocks * 64b */
- lp->poolmetadatasize = (uint64_t) lp->extents * vg->extent_size /
- (uint64_t) (lp->chunk_size * (SECTOR_SIZE / UINT64_C(64)));
-
- if (lp->poolmetadatasize &&
- !(lp->poolmetadataextents = extents_from_size(vg->cmd, lp->poolmetadatasize,
- vg->extent_size)))
- return_0;
+ if (lp->create_thin_pool) {
+ if (!arg_count(vg->cmd, poolmetadatasize_ARG))
+ /* Defaults to nr_pool_blocks * 64b */
+ lp->poolmetadatasize = (uint64_t) lp->extents * vg->extent_size /
+ (uint64_t) (lp->chunk_size * (SECTOR_SIZE / UINT64_C(64)));
+
+ if (lp->poolmetadatasize > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE)) {
+ if (arg_count(vg->cmd, poolmetadatasize_ARG))
+ log_warn("WARNING: Maximum supported pool metadata size is 16GB.");
+ lp->poolmetadatasize = 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE;
+ } else if (lp->poolmetadatasize < (2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE)) {
+ if (arg_count(vg->cmd, poolmetadatasize_ARG))
+ log_warn("WARNING: Minimum supported pool metadata size is 2M.");
+ lp->poolmetadatasize = 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE;
+ }
+
+ log_verbose("Setting pool metadata size to %" PRIu64 " sectors.",
+ lp->poolmetadatasize);
+
+ if (!(lp->poolmetadataextents =
+ extents_from_size(vg->cmd, lp->poolmetadatasize, vg->extent_size)))
+ return_0;
+ }
return 1;
}
@@ -511,33 +525,6 @@ static int _read_raid_params(struct lvcreate_params *lp,
return 1;
}
-static int _read_thin_params(struct lvcreate_params *lp,
- struct cmd_context *cmd)
-{
- if (!seg_is_thin(lp)) {
- if (lp->poolmetadatasize) {
- log_error("Pool metadata size option is only for pool creation.");
- return 0;
- }
- return 1;
- }
-
- if (lp->create_thin_pool) {
- if (lp->poolmetadatasize > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE)) {
- log_warn("WARNING: Maximum supported pool metadata size is 16GB.");
- lp->poolmetadatasize = 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE;
- } else if (lp->poolmetadatasize < (2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE))
- lp->poolmetadatasize = 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE;
- log_verbose("Setting pool metadata size to %" PRIu64 " sectors.",
- lp->poolmetadatasize);
- } else if (lp->poolmetadatasize) {
- log_error("Pool metadata size options is only for pool creation.");
- return 0;
- }
-
- return 1;
-}
-
static int _read_activation_params(struct lvcreate_params *lp, struct cmd_context *cmd)
{
unsigned pagesize;
@@ -737,8 +724,7 @@ static int _lvcreate_params(struct lvcreate_params *lp,
!_read_size_params(lp, lcp, cmd) ||
!get_stripe_params(cmd, &lp->stripes, &lp->stripe_size) ||
!_read_mirror_params(lp, cmd) ||
- !_read_raid_params(lp, cmd) ||
- !_read_thin_params(lp, cmd))
+ !_read_raid_params(lp, cmd))
return_0;
if (lp->snapshot && lp->thin && arg_count(cmd, chunksize_ARG))