1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-03 05:18:29 +03:00

Refactor pvcreate - split pvcreate_validate_params into recovery/non-recovery.

Split pvcreate_validate_params into recovery and non-recovery parameters.
This is necessary so we can call the non-recovery validate function from
vgextend / vgcreate.  Note in the pvcreate tool case, we must call the
recovery validation function first (see treatment of pe_start and --zero),
and that we add a call to fill_default_pvcreate_params before the validation
functions.
This commit is contained in:
Dave Wysochanski 2009-10-05 20:03:25 +00:00
parent c24a4ff2cc
commit 36a1d8166c
2 changed files with 38 additions and 26 deletions

View File

@ -1275,7 +1275,7 @@ static int pvcreate_check(struct cmd_context *cmd, const char *name,
void fill_default_pvcreate_params(struct pvcreate_params *pp)
{
memset(pp, 0, sizeof(*pp));
pp->zero = 0;
pp->zero = 1;
pp->size = 0;
pp->data_alignment = UINT64_C(0);
pp->data_alignment_offset = UINT64_C(0);

View File

@ -1,6 +1,6 @@
/*
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
* Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
* Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
*
* This file is part of LVM2.
*
@ -17,15 +17,13 @@
#include "metadata-exported.h"
/*
* Intial sanity checking of command-line arguments and fill in 'pp' fields.
*
* Input arguments:
* cmd, argc, argv
* Intial sanity checking of recovery-related command-line arguments.
* These args are: --restorefile, --uuid, and --physicalvolumesize
*
* Output arguments:
* pp: structure allocated by caller, fields written / validated here
*/
static int pvcreate_validate_params(struct cmd_context *cmd,
static int pvcreate_validate_restore_params(struct cmd_context *cmd,
int argc, char **argv,
struct pvcreate_params *pp)
{
@ -33,13 +31,6 @@ static int pvcreate_validate_params(struct cmd_context *cmd,
void *existing_pv;
struct volume_group *vg;
memset(pp, 0, sizeof(*pp));
if (!argc) {
log_error("Please enter a physical volume path");
return 0;
}
if (arg_count(cmd, restorefile_ARG) && !arg_count(cmd, uuidstr_ARG)) {
log_error("--uuid is required with --restorefile");
return 0;
@ -76,6 +67,32 @@ static int pvcreate_validate_params(struct cmd_context *cmd,
vg_release(vg);
}
if (arg_sign_value(cmd, physicalvolumesize_ARG, 0) == SIGN_MINUS) {
log_error("Physical volume size may not be negative");
return 0;
}
pp->size = arg_uint64_value(cmd, physicalvolumesize_ARG, UINT64_C(0));
if (arg_count(cmd, restorefile_ARG) || arg_count(cmd, uuidstr_ARG))
pp->zero = 0;
return 1;
}
/*
* Intial sanity checking of non-recovery related command-line arguments.
*
* Output arguments:
* pp: structure allocated by caller, fields written / validated here
*/
static int pvcreate_validate_params(struct cmd_context *cmd,
int argc, char **argv,
struct pvcreate_params *pp)
{
if (!argc) {
log_error("Please enter a physical volume path");
return 0;
}
if (arg_count(cmd, yes_ARG) && !arg_count(cmd, force_ARG)) {
log_error("Option y can only be given with option f");
return 0;
@ -111,16 +128,6 @@ static int pvcreate_validate_params(struct cmd_context *cmd,
if (arg_count(cmd, zero_ARG))
pp->zero = strcmp(arg_str_value(cmd, zero_ARG, "y"), "n");
else if (arg_count(cmd, restorefile_ARG) || arg_count(cmd, uuidstr_ARG))
pp->zero = 0;
else
pp->zero = 1;
if (arg_sign_value(cmd, physicalvolumesize_ARG, 0) == SIGN_MINUS) {
log_error("Physical volume size may not be negative");
return 0;
}
pp->size = arg_uint64_value(cmd, physicalvolumesize_ARG, UINT64_C(0));
if (arg_sign_value(cmd, dataalignment_ARG, 0) == SIGN_MINUS) {
log_error("Physical volume data alignment may not be negative");
@ -185,6 +192,11 @@ int pvcreate(struct cmd_context *cmd, int argc, char **argv)
int ret = ECMD_PROCESSED;
struct pvcreate_params pp;
fill_default_pvcreate_params(&pp);
if (!pvcreate_validate_restore_params(cmd, argc, argv, &pp)) {
return EINVALID_CMD_LINE;
}
if (!pvcreate_validate_params(cmd, argc, argv, &pp)) {
return EINVALID_CMD_LINE;
}