mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Second path on "pvcreate -s"
This commit is contained in:
parent
052360e901
commit
e1d93eb457
@ -394,12 +394,17 @@ static struct list *_get_vgs(struct format_instance *fi)
|
||||
static int _pv_setup(struct format_instance *fi, struct physical_volume *pv,
|
||||
struct volume_group *vg)
|
||||
{
|
||||
if (pv->size == MAX_PV_SIZE) pv->size--;
|
||||
/* setup operations for the PV structure */
|
||||
|
||||
if (pv->size > MAX_PV_SIZE) pv->size--;
|
||||
if (pv->size > MAX_PV_SIZE) {
|
||||
log_error("physical volumes cannot be bigger than 2TB");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* setup operations which need members derived from the VG */
|
||||
if (!vg) return 1;
|
||||
|
||||
/*
|
||||
* This works out pe_start and pe_count.
|
||||
*/
|
||||
|
@ -45,14 +45,6 @@ int _add_pv_to_vg(struct format_instance *fi, struct volume_group *vg,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Units of 512-byte sectors */
|
||||
/*
|
||||
if (!dev_get_size(pv->dev, &pv->size)) {
|
||||
stack;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
/* Units of 512-byte sectors */
|
||||
pv->pe_size = vg->extent_size;
|
||||
|
||||
@ -238,6 +230,12 @@ struct physical_volume *pv_create(struct format_instance *fi,
|
||||
pv->pe_start = 0;
|
||||
pv->pe_count = 0;
|
||||
pv->pe_allocated = 0;
|
||||
|
||||
if (!fi->ops->pv_setup(fi, pv, NULL)) {
|
||||
log_error("Format-specific setup of physical volume '%s' "
|
||||
"failed.", name);
|
||||
goto bad;
|
||||
}
|
||||
return pv;
|
||||
|
||||
bad:
|
||||
|
@ -259,6 +259,7 @@ int size_arg(struct arg *a)
|
||||
v *= 1024;
|
||||
}
|
||||
a->i_value = (uint32_t) v;
|
||||
a->i64_value = (uint64_t) v;
|
||||
|
||||
return 1;
|
||||
|
||||
|
@ -92,7 +92,7 @@ static void pvcreate_single(struct cmd_context *cmd, const char *pv_name)
|
||||
if (!pvcreate_check(cmd, pv_name))
|
||||
return;
|
||||
|
||||
size = arg_int_value(cmd, physicalvolumesize_ARG, 0) * 2;
|
||||
size = arg_int64_value(cmd, physicalvolumesize_ARG, 0) * 2;
|
||||
if (!(pv = pv_create(cmd->fid, pv_name, idp, size))) {
|
||||
log_err("Failed to setup physical volume \"%s\"", pv_name);
|
||||
return;
|
||||
|
@ -73,6 +73,7 @@ struct arg {
|
||||
int count;
|
||||
char *value;
|
||||
uint32_t i_value;
|
||||
uint64_t i64_value;
|
||||
sign_t sign;
|
||||
};
|
||||
|
||||
@ -122,6 +123,12 @@ static inline uint32_t arg_int_value(struct cmd_context *cmd, int a,
|
||||
return arg_count(cmd, a) ? cmd->args[a].i_value : def;
|
||||
}
|
||||
|
||||
static inline uint64_t arg_int64_value(struct cmd_context *cmd, int a,
|
||||
uint64_t def)
|
||||
{
|
||||
return arg_count(cmd, a) ? cmd->args[a].i64_value : def;
|
||||
}
|
||||
|
||||
static inline sign_t arg_sign_value(struct cmd_context *cmd, int a, sign_t def)
|
||||
{
|
||||
return arg_count(cmd, a) ? cmd->args[a].sign : def;
|
||||
|
Loading…
Reference in New Issue
Block a user