1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-23 21:35:29 +03:00

o Use 'pvcreate --setphysicalvolumesize' with no short form (instead of -s)

and add severe warning if it's used to make a device seem bigger than
  it really is.  This is not an option people should be using as it
  breaks metadata integrity.
o Use uint64_t throughout (rather than unsigned long long)
o Convert a few messages that contain pathnames into the more common form:
  pathname: message
This commit is contained in:
Alasdair Kergon 2002-02-20 18:29:30 +00:00
parent 6544fb43d9
commit f6485616cd
7 changed files with 43 additions and 28 deletions

View File

@ -31,7 +31,7 @@
#define SIZE_BUF 128
char *display_size(unsigned long long size, size_len_t sl)
char *display_size(uint64_t size, size_len_t sl)
{
int s;
ulong byte = 1024 * 1024 * 1024;
@ -109,7 +109,7 @@ void pvdisplay_full(struct physical_volume *pv)
log_print("VG Name %s%s", pv->vg_name,
pv->status & EXPORTED_VG ? " (exported)" : "");
size = display_size((unsigned long long) pv->size / 2, SIZE_SHORT);
size = display_size((uint64_t) pv->size / 2, SIZE_SHORT);
if (pv->pe_size && pv->pe_count) {
size1 = display_size((pv->size - pv->pe_count * pv->pe_size)
/ 2, SIZE_SHORT);
@ -470,7 +470,7 @@ void vgdisplay_full(struct volume_group *vg)
log_print ( "Act PV %u", vg->pv_act);
*********/
s1 = display_size((unsigned long long) vg->extent_count * (vg->extent_size / 2), SIZE_SHORT);
s1 = display_size((uint64_t) vg->extent_count * (vg->extent_size / 2), SIZE_SHORT);
log_print("VG Size %s", s1);
dbg_free(s1);
@ -481,14 +481,14 @@ void vgdisplay_full(struct volume_group *vg)
log_print("Total PE %u", vg->extent_count);
s1 =
display_size(((unsigned long long)
display_size(((uint64_t)
vg->extent_count - vg->free_count) *
(vg->extent_size / 2), SIZE_SHORT);
log_print("Alloc PE / Size %u / %s",
vg->extent_count - vg->free_count, s1);
dbg_free(s1);
s1 = display_size((unsigned long long) vg->free_count * (vg->extent_size / 2), SIZE_SHORT);
s1 = display_size((uint64_t) vg->free_count * (vg->extent_size / 2), SIZE_SHORT);
log_print("Free PE / Size %u / %s", vg->free_count, s1);
dbg_free(s1);

View File

@ -28,7 +28,7 @@
typedef enum {SIZE_LONG=0, SIZE_SHORT=1} size_len_t;
/* Specify size in KB */
char *display_size(unsigned long long size, size_len_t sl);
char *display_size(uint64_t size, size_len_t sl);
char *display_uuid(char *uuidstr);
void pvdisplay_colons(struct physical_volume *pv);

View File

@ -395,15 +395,17 @@ static int _pv_setup(struct format_instance *fi, struct physical_volume *pv,
struct volume_group *vg)
{
/* setup operations for the PV structure */
if (pv->size > MAX_PV_SIZE) pv->size--;
if (pv->size > MAX_PV_SIZE)
pv->size--;
if (pv->size > MAX_PV_SIZE) {
log_error("physical volumes cannot be bigger than 2TB");
/* FIXME Limit hardcoded */
log_error("Physical volumes cannot be bigger than 2TB");
return 0;
}
/* setup operations which need members derived from the VG */
if (!vg) return 1;
/* Nothing more to do if pe_size isn't known */
if (!vg)
return 1;
/*
* This works out pe_start and pe_count.

View File

@ -203,7 +203,7 @@ struct physical_volume *pv_create(struct format_instance *fi,
memcpy(&pv->id, id, sizeof(*id));
if (!(pv->dev = dev_cache_get(name, fi->cmd->filter))) {
log_err("Couldn't find device '%s'", name);
log_error("%s: Couldn't find device.", name);
goto bad;
}
@ -215,14 +215,23 @@ struct physical_volume *pv_create(struct format_instance *fi,
*pv->vg_name = 0;
pv->status = ALLOCATABLE_PV;
if (size) {
if (size < PV_MIN_SIZE) {
log_err("Given size for '%s' is too small", name);
goto bad;
}
pv->size = size;
} else if (!dev_get_size(pv->dev, &pv->size)) {
log_err("Couldn't get size of device '%s'", name);
if (!dev_get_size(pv->dev, &pv->size)) {
log_error("%s: Couldn't get size.", name);
goto bad;
}
if (size) {
if (size > pv->size)
log_print("WARNING: %s: Overriding real size. "
"You could lose data.", name);
log_verbose("%s: Pretending size is %" PRIu64 " sectors.",
name, size);
pv->size = size;
}
if (pv->size < PV_MIN_SIZE) {
log_error("%s: Size must exceed minimum of %lu sectors.",
name, PV_MIN_SIZE);
goto bad;
}
@ -232,7 +241,7 @@ struct physical_volume *pv_create(struct format_instance *fi,
pv->pe_allocated = 0;
if (!fi->ops->pv_setup(fi, pv, NULL)) {
log_error("Format-specific setup of physical volume '%s' "
log_error("%s: Format-specific setup of physical volume "
"failed.", name);
goto bad;
}

View File

@ -10,6 +10,7 @@
*/
arg(version_ARG, '\0', "version", NULL)
arg(quiet_ARG, '\0', "quiet", NULL)
arg(physicalvolumesize_ARG, '\0', "setphysicalvolumesize", size_arg)
/* Allow some variations */
arg(resizable_ARG, '\0', "resizable", yes_no_arg)
@ -58,7 +59,6 @@ arg(physicalvolume_ARG, 'P', "physicalvolume", NULL)
arg(readahead_ARG, 'r', "readahead", int_arg)
arg(reset_ARG, 'R', "reset", NULL)
arg(physicalextentsize_ARG, 's', "physicalextentsize", size_arg)
arg(physicalvolumesize_ARG, 's', "size", size_arg)
arg(stdin_ARG, 's', "stdin", NULL)
arg(snapshot_ARG, 's', "snapshot", NULL)
arg(short_ARG, 's', "short", NULL)

View File

@ -279,7 +279,7 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
if (lv_active(lv) > 0) {
dummy =
display_size((unsigned long long)
display_size((uint64_t)
extents * (vg->extent_size / 2),
SIZE_SHORT);
log_print("WARNING: Reducing active%s logical volume "
@ -321,7 +321,7 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
/* Use full list from VG */
pvh = &vg->pvs;
}
dummy = display_size((unsigned long long)
dummy = display_size((uint64_t)
extents * (vg->extent_size / 2),
SIZE_SHORT);
log_print("Extending logical volume %s to %s", lv_name, dummy);

View File

@ -32,8 +32,11 @@ static int pvcreate_check(struct cmd_context *cmd, const char *name)
struct physical_volume *pv;
/* is the partition type set correctly ? */
if ((arg_count(cmd, force_ARG) < 1) && !is_lvm_partition(name))
if ((arg_count(cmd, force_ARG) < 1) && !is_lvm_partition(name)) {
log_error("%s: Not LVM partition type: use -f to override",
name);
return 0;
}
/* is there a pv here already */
if (!(pv = cmd->fid->ops->pv_read(cmd->fid, name)))
@ -54,7 +57,7 @@ static int pvcreate_check(struct cmd_context *cmd, const char *name)
/* prompt */
if (!arg_count(cmd, yes_ARG) &&
yes_no_prompt(_really_init, name, pv->vg_name) == 'n') {
log_print("Physical volume \"%s\" not initialized", name);
log_print("%s: physical volume not initialized", name);
return 0;
}
@ -94,14 +97,15 @@ static void pvcreate_single(struct cmd_context *cmd, const char *pv_name)
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);
log_error("Failed to setup physical volume \"%s\"", pv_name);
return;
}
log_verbose("Set up physical volume for \"%s\" with %" PRIu64
" sectors", pv_name, pv->size);
log_verbose("Writing physical volume data to disk \"%s\"", pv_name);
log_very_verbose("Writing physical volume data to disk \"%s\"",
pv_name);
if (!(cmd->fid->ops->pv_write(cmd->fid, pv))) {
log_error("Failed to write physical volume \"%s\"", pv_name);
return;