1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

iospace restructured

This commit is contained in:
Alasdair Kergon 2001-11-12 15:10:01 +00:00
parent 09bc639dbf
commit 277237805a
27 changed files with 110 additions and 198 deletions

View File

@ -92,7 +92,7 @@ static struct volume_group *_vg_read(struct format_instance *fi,
{ {
struct pool *mem = pool_create(1024 * 10); struct pool *mem = pool_create(1024 * 10);
struct list pvs; struct list pvs;
struct volume_group *vg; struct volume_group *vg = NULL;
list_init(&pvs); list_init(&pvs);
if (!mem) { if (!mem) {
@ -105,13 +105,17 @@ static struct volume_group *_vg_read(struct format_instance *fi,
if (!read_pvs_in_vg(vg_name, fi->cmd->filter, mem, &pvs)) { if (!read_pvs_in_vg(vg_name, fi->cmd->filter, mem, &pvs)) {
stack; stack;
return NULL; goto bad;
} }
if (!(vg = _build_vg(fi->cmd->mem, &pvs))) if (!(vg = _build_vg(fi->cmd->mem, &pvs))) {
stack; stack;
goto bad;
}
vg->cmd = fi->cmd; vg->cmd = fi->cmd;
bad:
pool_destroy(mem); pool_destroy(mem);
return vg; return vg;
} }

View File

@ -9,6 +9,6 @@
#include "metadata.h" #include "metadata.h"
struct filter_instance *create_lvm1_format(struct cmd_context *cmd); struct format_instance *create_lvm1_format(struct cmd_context *cmd);
#endif #endif

View File

@ -116,7 +116,7 @@ int vg_extend(struct format_instance *fi,
return 1; return 1;
} }
const char *strip_prefix(const char *vg_name, const char *dev_dir) const char *strip_dir(const char *vg_name, const char *dev_dir)
{ {
int len = strlen(dev_dir); int len = strlen(dev_dir);
if (!strncmp(vg_name, dev_dir, len)) if (!strncmp(vg_name, dev_dir, len))

View File

@ -1,95 +0,0 @@
/*
* Copyright (C) 2001 Sistina Software
*
* LVM is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* LVM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LVM; see the file COPYING. If not, write to
* the Free Software Foundation, 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
#include "tools.h"
int lvactivate(int argc, char **argv)
{
int p;
struct device *pv_dev;
char *lv_name;
char *pv_name;
struct physical_volume *pv = NULL;
struct logical_volume *lv = NULL;
if (argc < 2) {
log_error("please enter logical volume & physical volume(s)");
return EINVALID_CMD_LINE;
}
lv_name = argv[0];
argc--;
argv++;
while (argc--) {
pv_name = argv[argc];
if (!(pv_dev = dev_cache_get(pv_name))) {
log_error("device \"%s\" not found", pv_name);
return -1;
}
if (!(pv = pv_read(ios, pv_dev))) {
return -1;
}
if (pv->status & ALLOCATED_PV) {
if (!(pv->pe = pv_read_pe(pv_name, pv)))
goto pvdisplay_device_out;
if (!(lvs = pv_read_lvs(pv))) {
log_error("Failed to read LVs on %s",
pv->pv_name);
goto pvdisplay_device_out;
}
} else
log_print("no logical volume on physical volume %s",
pv_name);
for (p = 0; p < pv->pe_total; p++) {
int l = pv->pe[p].lv_num;
int le = pv->pe[p].le_num;
long pe_size_guess = lvs[l - 1].lv_size /
lvs[l - 1].lv_allocated_le;
if (l && !strcmp(lv, lvs[l - 1].lv_name))
printf("%012ld %ld linear %s %012ld\n",
pe_size_guess * le,
pe_size_guess,
pv_name, get_pe_offset(p, pv));
}
if (pv)
dbg_free(pv->pe);
dbg_free(pv);
dbg_free(lvs);
}
return 0;
pvdisplay_device_out:
if (pv)
dbg_free(pv->pe);
dbg_free(pv);
dbg_free(lvs);
return -1;
}

View File

@ -64,12 +64,12 @@ static int lvchange_single(char *lv_name)
/* FIXME Common code here - Add to a foreach? */ /* FIXME Common code here - Add to a foreach? */
/* does VG exist? */ /* does VG exist? */
if (!(vg_name = extract_vgname(ios, lv_name))) { if (!(vg_name = extract_vgname(fid, lv_name))) {
return ECMD_FAILED; return ECMD_FAILED;
} }
log_verbose("Finding volume group %s", vg_name); log_verbose("Finding volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -153,7 +153,7 @@ static int lvchange_permission(struct logical_volume *lv)
} }
log_very_verbose("Updating logical volume %s on disk(s)", lv->name); log_very_verbose("Updating logical volume %s on disk(s)", lv->name);
if (!ios->vg_write(ios, lv->vg)) if (!fid->ops->vg_write(fid, lv->vg))
return 0; return 0;
log_very_verbose("Updating permissions for %s in kernel", lv->name); log_very_verbose("Updating permissions for %s in kernel", lv->name);
@ -189,7 +189,7 @@ static int lvchange_availability(struct logical_volume *lv)
} }
log_very_verbose("Updating logical volume %s on disk(s)", lv->name); log_very_verbose("Updating logical volume %s on disk(s)", lv->name);
if (!ios->vg_write(ios, lv->vg)) if (!fid->ops->vg_write(fid, lv->vg))
return 0; return 0;
log_very_verbose("Updating %s in kernel", lv->name); log_very_verbose("Updating %s in kernel", lv->name);
@ -243,7 +243,7 @@ static int lvchange_contiguous(struct logical_volume *lv)
log_verbose("Updating logical volume %s on disk(s)", lv->name); log_verbose("Updating logical volume %s on disk(s)", lv->name);
if (!ios->vg_write(ios, lv->vg)) if (!fid->ops->vg_write(fid, lv->vg))
return 0; return 0;
return 1; return 1;
@ -273,7 +273,7 @@ static int lvchange_readahead(struct logical_volume *lv)
log_verbose("Updating logical volume %s on disk(s)", lv->name); log_verbose("Updating logical volume %s on disk(s)", lv->name);
if (!ios->vg_write(ios, lv->vg)) if (!fid->ops->vg_write(fid, lv->vg))
return 0; return 0;
return 1; return 1;

View File

@ -87,14 +87,14 @@ int lvcreate(int argc, char **argv)
/* If VG not on command line, try -n arg and then environment */ /* If VG not on command line, try -n arg and then environment */
if (!argc) { if (!argc) {
if (!(vg_name = extract_vgname(ios, lv_name))) { if (!(vg_name = extract_vgname(fid, lv_name))) {
log_error("Please provide a volume group name"); log_error("Please provide a volume group name");
return EINVALID_CMD_LINE; return EINVALID_CMD_LINE;
} }
} else { } else {
/* Ensure lv_name doesn't contain a different VG! */ /* Ensure lv_name doesn't contain a different VG! */
if (strchr(lv_name, '/')) { if (strchr(lv_name, '/')) {
if (!(vg_name = extract_vgname(ios, lv_name))) if (!(vg_name = extract_vgname(fid, lv_name)))
return EINVALID_CMD_LINE; return EINVALID_CMD_LINE;
if (strcmp(vg_name, argv[0])) { if (strcmp(vg_name, argv[0])) {
log_error("Inconsistent volume group names " log_error("Inconsistent volume group names "
@ -112,7 +112,7 @@ int lvcreate(int argc, char **argv)
/* does VG exist? */ /* does VG exist? */
log_verbose("Finding volume group %s", vg_name); log_verbose("Finding volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -131,7 +131,7 @@ int lvcreate(int argc, char **argv)
if (argc) { if (argc) {
/* Build up list of PVs */ /* Build up list of PVs */
if (!(pvh = pool_alloc(ios->mem, sizeof (struct list)))) { if (!(pvh = pool_alloc(fid->cmd->mem, sizeof (struct list)))) {
log_error("pvh list allocation failed"); log_error("pvh list allocation failed");
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -225,7 +225,7 @@ int lvcreate(int argc, char **argv)
log_verbose("Creating logical volume %s", lv_name); log_verbose("Creating logical volume %s", lv_name);
if (!(lv = lv_create(ios, lv_name, status, stripes, stripesize, if (!(lv = lv_create(lv_name, status, stripes, stripesize,
extents, vg, pvh))) extents, vg, pvh)))
return ECMD_FAILED; return ECMD_FAILED;
@ -235,7 +235,7 @@ int lvcreate(int argc, char **argv)
} }
/* store vg on disk(s) */ /* store vg on disk(s) */
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return ECMD_FAILED; return ECMD_FAILED;
if (!lv_activate(lv)) if (!lv_activate(lv))
@ -250,7 +250,7 @@ int lvcreate(int argc, char **argv)
log_verbose("Zeroing start of logical volume %s", lv_name); log_verbose("Zeroing start of logical volume %s", lv_name);
/* FIXME get dev = dev_cache_get(lv_name, ios->filter); */ /* FIXME get dev = dev_cache_get(lv_name, fid->cmd->filter); */
/* FIXME Add fsync! */ /* FIXME Add fsync! */
if (!(dev_write(dev, 0, sizeof (buf), &buf) == sizeof (buf))) { if (!(dev_write(dev, 0, sizeof (buf), &buf) == sizeof (buf))) {
log_error("Initialisation of %s failed", dev_name(dev)); log_error("Initialisation of %s failed", dev_name(dev));

View File

@ -56,12 +56,12 @@ int lvdisplay_single(char *lv_name)
struct logical_volume *lv; struct logical_volume *lv;
/* does VG exist? */ /* does VG exist? */
if (!(vg_name = extract_vgname(ios, lv_name))) { if (!(vg_name = extract_vgname(fid, lv_name))) {
return ECMD_FAILED; return ECMD_FAILED;
} }
log_verbose("Finding volume group %s", vg_name); log_verbose("Finding volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }

View File

@ -62,7 +62,7 @@ int lvextend(int argc, char **argv)
argv++; argv++;
argc--; argc--;
if (!(vg_name = extract_vgname(ios, lv_name))) { if (!(vg_name = extract_vgname(fid, lv_name))) {
log_error("Please provide a volume group name"); log_error("Please provide a volume group name");
return EINVALID_CMD_LINE; return EINVALID_CMD_LINE;
} }
@ -72,7 +72,7 @@ int lvextend(int argc, char **argv)
/* does VG exist? */ /* does VG exist? */
log_verbose("Finding volume group %s", vg_name); log_verbose("Finding volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -100,7 +100,7 @@ int lvextend(int argc, char **argv)
if (argc) { if (argc) {
/* Build up list of PVs */ /* Build up list of PVs */
if (!(pvh = pool_alloc(ios->mem, sizeof (struct list)))) { if (!(pvh = pool_alloc(fid->cmd->mem, sizeof (struct list)))) {
log_error("pvh list allocation failed"); log_error("pvh list allocation failed");
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -162,13 +162,13 @@ int lvextend(int argc, char **argv)
display_size(extents * vg->extent_size / 2, SIZE_SHORT))); display_size(extents * vg->extent_size / 2, SIZE_SHORT)));
dbg_free(dummy); dbg_free(dummy);
lv_extend(ios, lv, extents - lv->le_count, pvh); lv_extend(lv, extents - lv->le_count, pvh);
/* where parm is always *increase* not actual */ /* where parm is always *increase* not actual */
/********* FIXME Suspend lv ***********/ /********* FIXME Suspend lv ***********/
/* store vg on disk(s) */ /* store vg on disk(s) */
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return ECMD_FAILED; return ECMD_FAILED;
/* FIXME Ensure it always displays errors? */ /* FIXME Ensure it always displays errors? */

View File

@ -59,10 +59,11 @@ static int _array_size;
static int _num_commands; static int _num_commands;
static struct command *_commands; static struct command *_commands;
/* Exported */ /* Exported LVM1 disk format */
struct io_space *ios; struct format_instance *fid;
struct cmd_context *cmd;
static struct dev_filter *_filter;
/* Whether or not to dump persistent filter state */ /* Whether or not to dump persistent filter state */
static int dump_filter; static int dump_filter;
static struct config_file *_cf; static struct config_file *_cf;
@ -561,7 +562,7 @@ static int run_command(int argc, char **argv)
/* /*
* free off any memory the command used. * free off any memory the command used.
*/ */
pool_empty(ios->mem); pool_empty(cmd->mem);
if (ret == EINVALID_CMD_LINE && !_interactive) if (ret == EINVALID_CMD_LINE && !_interactive)
usage(com->name); usage(com->name);
@ -602,11 +603,6 @@ struct config_file *active_config_file(void)
return _cf; return _cf;
} }
struct dev_filter *active_filter(void)
{
return _filter;
}
static void __init_log(struct config_file *cf) static void __init_log(struct config_file *cf)
{ {
char *open_mode = "a"; char *open_mode = "a";
@ -732,10 +728,14 @@ static int init(void)
int ret = 0; int ret = 0;
const char *e = getenv("LVM_CONFIG_FILE"); const char *e = getenv("LVM_CONFIG_FILE");
struct stat info; struct stat info;
struct pool *ios_pool;
if (!(cmd = dbg_malloc(sizeof(*cmd)))) {
log_error("Failed to allocate command context");
goto out;
}
/* FIXME: Override from config file. (Append trailing slash if reqd) */ /* FIXME: Override from config file. (Append trailing slash if reqd) */
char *prefix = "/dev/"; cmd->dev_dir = "/dev/";
if (!(_cf = create_config_file())) { if (!(_cf = create_config_file())) {
stack; stack;
@ -763,17 +763,17 @@ static int init(void)
goto out; goto out;
} }
if (!(_filter = filter_setup())) { if (!(cmd->filter = filter_setup())) {
log_error("Failed to set up internal device filters"); log_error("Failed to set up internal device filters");
goto out; goto out;
} }
if (!(ios_pool = pool_create(4 * 1024))) { if (!(cmd->mem = pool_create(4 * 1024))) {
log_error("ios pool creation failed"); log_error("Command pool creation failed");
goto out; goto out;
} }
if (!(ios = create_lvm1_format(prefix, ios_pool, _filter))) { if (!(fid = create_lvm1_format(cmd))) {
goto out; goto out;
} }
@ -796,12 +796,14 @@ static void __fin_commands(void)
static void fin(void) static void fin(void)
{ {
if (dump_filter) if (dump_filter)
persistent_filter_dump(_filter); persistent_filter_dump(cmd->filter);
ios->destroy(ios); fid->ops->destroy(fid);
_filter->destroy(_filter); cmd->filter->destroy(cmd->filter);
pool_destroy(cmd->mem);
dev_cache_exit(); dev_cache_exit();
destroy_config_file(_cf); destroy_config_file(_cf);
dbg_free(cmd);
__fin_commands(); __fin_commands();
dump_memory(); dump_memory();
fin_log(); fin_log();

View File

@ -61,7 +61,7 @@ int lvreduce(int argc, char **argv)
argv++; argv++;
argc--; argc--;
if (!(vg_name = extract_vgname(ios, lv_name))) { if (!(vg_name = extract_vgname(fid, lv_name))) {
log_error("Please provide a volume group name"); log_error("Please provide a volume group name");
return EINVALID_CMD_LINE; return EINVALID_CMD_LINE;
} }
@ -71,7 +71,7 @@ int lvreduce(int argc, char **argv)
/* does VG exist? */ /* does VG exist? */
log_verbose("Finding volume group %s", vg_name); log_verbose("Finding volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -180,7 +180,7 @@ int lvreduce(int argc, char **argv)
/********* FIXME Suspend lv ***********/ /********* FIXME Suspend lv ***********/
/* store vg on disk(s) */ /* store vg on disk(s) */
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return ECMD_FAILED; return ECMD_FAILED;
/* FIXME Ensure it always displays errors? */ /* FIXME Ensure it always displays errors? */

View File

@ -49,12 +49,12 @@ int lvremove_single(char *lv_name)
struct logical_volume *lv; struct logical_volume *lv;
/* does VG exist? */ /* does VG exist? */
if (!(vg_name = extract_vgname(ios, lv_name))) { if (!(vg_name = extract_vgname(fid, lv_name))) {
return ECMD_FAILED; return ECMD_FAILED;
} }
log_verbose("Finding volume group %s", vg_name); log_verbose("Finding volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -110,7 +110,7 @@ int lvremove_single(char *lv_name)
**********/ **********/
/* store it on disks */ /* store it on disks */
if (ios->vg_write(ios, vg)) if (fid->ops->vg_write(fid, vg))
return ECMD_FAILED; return ECMD_FAILED;
/******** FIXME /******** FIXME

View File

@ -72,7 +72,7 @@ static int lvscan_single(const char *vg_name)
struct list *lvh; struct list *lvh;
log_verbose("Checking for volume group %s", vg_name); log_verbose("Checking for volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s not found", vg_name); log_error("Volume group %s not found", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -112,7 +112,7 @@ static int lvscan_single(const char *vg_name)
display_size(lv->size / 2, SIZE_SHORT); display_size(lv->size / 2, SIZE_SHORT);
log_print("%s%s '%s%s/%s' [%s]%s%s", active_str, snapshot_str, log_print("%s%s '%s%s/%s' [%s]%s%s", active_str, snapshot_str,
ios->prefix, vg->name, lv->name, dummy, fid->cmd->dev_dir, vg->name, lv->name, dummy,
(lv->status & ALLOC_STRICT) ? " strict" : "", (lv->status & ALLOC_STRICT) ? " strict" : "",
(lv->status & ALLOC_CONTIGUOUS) ? " contiguous" : ""); (lv->status & ALLOC_CONTIGUOUS) ? " contiguous" : "");

View File

@ -52,7 +52,7 @@ int pvchange(int argc, char **argv)
log_verbose("Using physical volume(s) on command line"); log_verbose("Using physical volume(s) on command line");
for (; opt < argc; opt++) { for (; opt < argc; opt++) {
pv_name = argv[opt]; pv_name = argv[opt];
if (!(pv = ios->pv_read(ios, pv_name))) { if (!(pv = fid->ops->pv_read(fid, pv_name))) {
log_error("Failed to read physical volume %s", log_error("Failed to read physical volume %s",
pv_name); pv_name);
continue; continue;
@ -62,7 +62,7 @@ int pvchange(int argc, char **argv)
} }
} else { } else {
log_verbose("Scanning for physical volume names"); log_verbose("Scanning for physical volume names");
if (!(pvs = ios->get_pvs(ios))) { if (!(pvs = fid->ops->get_pvs(fid))) {
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -98,7 +98,7 @@ int pvchange_single(struct physical_volume *pv)
if (*pv->vg_name) { if (*pv->vg_name) {
log_verbose("Finding volume group of physical volume %s", log_verbose("Finding volume group of physical volume %s",
pv_name); pv_name);
if (!(vg = ios->vg_read(ios, pv->vg_name))) { if (!(vg = fid->ops->vg_read(fid, pv->vg_name))) {
log_error("Unable to find volume group of %s", pv_name); log_error("Unable to find volume group of %s", pv_name);
return 0; return 0;
} }
@ -137,13 +137,13 @@ int pvchange_single(struct physical_volume *pv)
log_verbose("Updating physical volume %s", pv_name); log_verbose("Updating physical volume %s", pv_name);
if (*pv->vg_name) { if (*pv->vg_name) {
if (!(ios->vg_write(ios,vg))) { if (!(fid->ops->vg_write(fid,vg))) {
log_error("Failed to store physical volume %s in " log_error("Failed to store physical volume %s in "
"volume group %s", pv_name, vg->name); "volume group %s", pv_name, vg->name);
return 0; return 0;
} }
} else { } else {
if (!(ios->pv_write(ios, pv))) { if (!(fid->ops->pv_write(fid, pv))) {
log_error("Failed to store physical volume %s", log_error("Failed to store physical volume %s",
pv_name); pv_name);
return 0; return 0;

View File

@ -36,7 +36,7 @@ static int pvcreate_check(const char *name)
return 0; return 0;
/* is there a pv here already */ /* is there a pv here already */
if (!(pv = ios->pv_read(ios, name))) if (!(pv = fid->ops->pv_read(fid, name)))
return 1; return 1;
/* orphan ? */ /* orphan ? */
@ -86,7 +86,7 @@ static void pvcreate_single(const char *pv_name)
if (!pvcreate_check(pv_name)) if (!pvcreate_check(pv_name))
return; return;
if (!(pv = pv_create(ios, pv_name))) { if (!(pv = pv_create(fid, pv_name))) {
log_err("Failed to setup physical volume %s", pv_name); log_err("Failed to setup physical volume %s", pv_name);
return; return;
} }
@ -95,7 +95,7 @@ static void pvcreate_single(const char *pv_name)
pv_name, pv->size); pv_name, pv->size);
log_verbose("Writing physical volume data to disk %s", pv_name); log_verbose("Writing physical volume data to disk %s", pv_name);
if (!(ios->pv_write(ios, pv))) { if (!(fid->ops->pv_write(fid, pv))) {
log_error("Failed to write physical volume %s", pv_name); log_error("Failed to write physical volume %s", pv_name);
return; return;
} }
@ -119,7 +119,7 @@ int pvcreate(int argc, char **argv)
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
pvcreate_single(argv[i]); pvcreate_single(argv[i]);
pool_empty(ios->mem); pool_empty(fid->cmd->mem);
} }
return 0; return 0;

View File

@ -38,7 +38,7 @@ int pvdisplay(int argc, char **argv)
log_very_verbose("Using physical volume(s) on command line"); log_very_verbose("Using physical volume(s) on command line");
for (; opt < argc; opt++) { for (; opt < argc; opt++) {
if (!(pv = ios->pv_read(ios, argv[opt]))) { if (!(pv = fid->ops->pv_read(fid, argv[opt]))) {
log_error("Failed to read physical volume %s", log_error("Failed to read physical volume %s",
argv[opt]); argv[opt]);
continue; continue;
@ -47,7 +47,7 @@ int pvdisplay(int argc, char **argv)
} }
} else { } else {
log_verbose("Scanning for physical volume names"); log_verbose("Scanning for physical volume names");
if (!(pvs = ios->get_pvs(ios))) if (!(pvs = fid->ops->get_pvs(fid)))
return ECMD_FAILED; return ECMD_FAILED;
list_iterate(pvh, pvs) list_iterate(pvh, pvs)

View File

@ -54,10 +54,10 @@ int pvscan(int argc, char **argv)
"of exported volume group(s)" : "in no volume group"); "of exported volume group(s)" : "in no volume group");
log_verbose("Wiping cache of LVM-capable devices"); log_verbose("Wiping cache of LVM-capable devices");
persistent_filter_wipe(ios->filter); persistent_filter_wipe(fid->cmd->filter);
log_verbose("Walking through all physical volumes"); log_verbose("Walking through all physical volumes");
if (!(pvs = ios->get_pvs(ios))) if (!(pvs = fid->ops->get_pvs(fid)))
return ECMD_FAILED; return ECMD_FAILED;
/* eliminate exported/new if required */ /* eliminate exported/new if required */

View File

@ -104,7 +104,7 @@ int process_each_vg(int argc, char **argv,
ret_max = ret; ret_max = ret;
} else { } else {
log_verbose("Finding all volume group(s)"); log_verbose("Finding all volume group(s)");
if (!(vgs_list = ios->get_vgs(ios))) { if (!(vgs_list = fid->ops->get_vgs(fid))) {
log_error("No volume groups found"); log_error("No volume groups found");
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -165,16 +165,17 @@ int is_valid_chars(char *n)
return 1; return 1;
} }
char *extract_vgname(struct io_space *ios, char *lv_name) char *extract_vgname(struct format_instance *fi, char *lv_name)
{ {
char *vg_name = lv_name; char *vg_name = lv_name;
char *st; char *st;
char *dev_dir = fi->cmd->dev_dir;
/* Path supplied? */ /* Path supplied? */
if (vg_name && strchr(vg_name, '/')) { if (vg_name && strchr(vg_name, '/')) {
/* Strip prefix (optional) */ /* Strip prefix (optional) */
if (!strncmp(vg_name, ios->prefix, strlen(ios->prefix))) if (!strncmp(vg_name, dev_dir, strlen(dev_dir)))
vg_name += strlen(ios->prefix); vg_name += strlen(dev_dir);
/* Require exactly one slash */ /* Require exactly one slash */
/* FIXME But allow for consecutive slashes */ /* FIXME But allow for consecutive slashes */
@ -183,7 +184,7 @@ char *extract_vgname(struct io_space *ios, char *lv_name)
return 0; return 0;
} }
vg_name = pool_strdup(ios->mem, vg_name); vg_name = pool_strdup(fid->cmd->mem, vg_name);
if (!vg_name) { if (!vg_name) {
log_error("Allocation of vg_name failed"); log_error("Allocation of vg_name failed");
return 0; return 0;
@ -193,7 +194,7 @@ char *extract_vgname(struct io_space *ios, char *lv_name)
return vg_name; return vg_name;
} }
if (!(vg_name = default_vgname(ios))) { if (!(vg_name = default_vgname(fid))) {
if (lv_name) if (lv_name)
log_error("Path required for Logical Volume %s", lv_name); log_error("Path required for Logical Volume %s", lv_name);
return 0; return 0;
@ -202,9 +203,10 @@ char *extract_vgname(struct io_space *ios, char *lv_name)
return vg_name; return vg_name;
} }
char *default_vgname(struct io_space *ios) char *default_vgname(struct format_instance *fi)
{ {
char *vg_path; char *vg_path;
char *dev_dir = fi->cmd->dev_dir;
/* Take default VG from environment? */ /* Take default VG from environment? */
vg_path = getenv("LVM_VG_NAME"); vg_path = getenv("LVM_VG_NAME");
@ -212,8 +214,8 @@ char *default_vgname(struct io_space *ios)
return 0; return 0;
/* Strip prefix (optional) */ /* Strip prefix (optional) */
if (!strncmp(vg_path, ios->prefix, strlen(ios->prefix))) if (!strncmp(vg_path, dev_dir, strlen(dev_dir)))
vg_path += strlen(ios->prefix); vg_path += strlen(dev_dir);
if (strchr(vg_path, '/')) { if (strchr(vg_path, '/')) {
log_error("Environment Volume Group in LVM_VG_NAME invalid: %s", log_error("Environment Volume Group in LVM_VG_NAME invalid: %s",
@ -221,6 +223,6 @@ char *default_vgname(struct io_space *ios)
return 0; return 0;
} }
return pool_strdup(ios->mem, vg_path); return pool_strdup(fid->cmd->mem, vg_path);
} }

View File

@ -34,7 +34,7 @@ int process_each_pv(int argc, char **argv, struct volume_group *vg,
int is_valid_chars(char *n); int is_valid_chars(char *n);
char *default_vgname(struct io_space *ios); char *default_vgname(struct format_instance *fi);
char *extract_vgname(struct io_space *ios, char *lv_name); char *extract_vgname(struct format_instance *fi, char *lv_name);
#endif #endif

View File

@ -123,8 +123,7 @@ static inline int arg_count_increment(int a)
} }
struct config_file *active_config_file(void); struct config_file *active_config_file(void);
struct dev_filter *active_filter(void);
extern struct io_space *ios; extern struct format_instance *fid;
#endif #endif

View File

@ -51,7 +51,7 @@ static int vgchange_single(const char *vg_name)
{ {
struct volume_group *vg; struct volume_group *vg;
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Unable to find volume group %s", vg_name); log_error("Unable to find volume group %s", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -112,7 +112,7 @@ void vgchange_available(struct volume_group *vg)
&= ~ACTIVE; &= ~ACTIVE;
} }
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return; return;
if (available && (lv_open = activate_lvs_in_vg(vg))) if (available && (lv_open = activate_lvs_in_vg(vg)))
@ -148,7 +148,7 @@ void vgchange_allocation(struct volume_group *vg)
else else
vg->status &= ~EXTENDABLE_VG; vg->status &= ~EXTENDABLE_VG;
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return; return;
log_print("Volume group %s successfully changed", vg->name); log_print("Volume group %s successfully changed", vg->name);
@ -202,7 +202,7 @@ void vgchange_logicalvolume(struct volume_group *vg)
vg->max_lv = max_lv; vg->max_lv = max_lv;
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return; return;
log_print("Volume group %s successfully changed", vg->name); log_print("Volume group %s successfully changed", vg->name);

View File

@ -33,7 +33,7 @@ static int vgck_single(const char *vg_name)
log_verbose("Checking volume group %s", vg_name); log_verbose("Checking volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s not found", vg_name); log_error("Volume group %s not found", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }

View File

@ -62,8 +62,8 @@ int vgcreate(int argc, char **argv)
} }
/* Strip prefix if present */ /* Strip prefix if present */
if (!strncmp(vg_name, ios->prefix, strlen(ios->prefix))) if (!strncmp(vg_name, fid->cmd->dev_dir, strlen(fid->cmd->dev_dir)))
vg_name += strlen(ios->prefix); vg_name += strlen(fid->cmd->dev_dir);
if (!is_valid_chars(vg_name)) { if (!is_valid_chars(vg_name)) {
log_error("New volume group name '%s' has invalid characters", log_error("New volume group name '%s' has invalid characters",
@ -72,7 +72,7 @@ int vgcreate(int argc, char **argv)
} }
/* create the new vg */ /* create the new vg */
if (!(vg = vg_create(ios, vg_name, extent_size, max_pv, max_lv, if (!(vg = vg_create(fid, vg_name, extent_size, max_pv, max_lv,
argc - 1, argv + 1))) argc - 1, argv + 1)))
return ECMD_FAILED; return ECMD_FAILED;
@ -85,7 +85,7 @@ int vgcreate(int argc, char **argv)
vg->max_pv); vg->max_pv);
/* store vg on disk(s) */ /* store vg on disk(s) */
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return ECMD_FAILED; return ECMD_FAILED;
/* FIXME Create /dev/vg */ /* FIXME Create /dev/vg */

View File

@ -41,7 +41,7 @@ int vgextend(int argc, char **argv)
argv++; argv++;
log_verbose("Checking for volume group '%s'", vg_name); log_verbose("Checking for volume group '%s'", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group '%s' not found.", vg_name); log_error("Volume group '%s' not found.", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -64,7 +64,7 @@ int vgextend(int argc, char **argv)
**********/ **********/
/* extend vg */ /* extend vg */
if (!vg_extend(ios, vg, argc, argv)) if (!vg_extend(fid, vg, argc, argv))
return ECMD_FAILED; return ECMD_FAILED;
/* ret > 0 */ /* ret > 0 */
@ -72,7 +72,7 @@ int vgextend(int argc, char **argv)
"physical volumes", vg_name, argc); "physical volumes", vg_name, argc);
/* store vg on disk(s) */ /* store vg on disk(s) */
if (!ios->vg_write(ios, vg)) if (!fid->ops->vg_write(fid, vg))
return ECMD_FAILED; return ECMD_FAILED;
/********* FIXME /********* FIXME

View File

@ -49,7 +49,7 @@ int vgreduce(int argc, char **argv)
argc--; argc--;
log_verbose("Finding volume group %s", vg_name); log_verbose("Finding volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -114,13 +114,13 @@ static int vgreduce_single(struct volume_group *vg, struct physical_volume *pv)
*pv->vg_name = '\0'; *pv->vg_name = '\0';
vg->pv_count--; vg->pv_count--;
if (!(ios->vg_write(ios, vg))) { if (!(fid->ops->vg_write(fid, vg))) {
log_error("Removal of physical volume %s from %s failed", log_error("Removal of physical volume %s from %s failed",
name, vg->name); name, vg->name);
return ECMD_FAILED; return ECMD_FAILED;
} }
if (!ios->pv_write(ios, pv)) { if (!fid->ops->pv_write(fid, pv)) {
log_error("Failed to clear metadata from physical volume %s " log_error("Failed to clear metadata from physical volume %s "
"after removal from %s", name, vg->name); "after removal from %s", name, vg->name);
return ECMD_FAILED; return ECMD_FAILED;

View File

@ -35,7 +35,7 @@ static int vgremove_single(const char *vg_name)
int ret = 0; int ret = 0;
log_verbose("Checking for volume group %s", vg_name); log_verbose("Checking for volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s doesn't exist", vg_name); log_error("Volume group %s doesn't exist", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -64,7 +64,7 @@ static int vgremove_single(const char *vg_name)
log_verbose("Removing physical volume %s from volume group %s", log_verbose("Removing physical volume %s from volume group %s",
dev_name(pv->dev), vg_name); dev_name(pv->dev), vg_name);
*pv->vg_name = '\0'; *pv->vg_name = '\0';
if (!(ios->pv_write(ios, pv))) { if (!(fid->ops->pv_write(fid, pv))) {
log_error("Failed to remove physical volume %s from " log_error("Failed to remove physical volume %s from "
"volume group %s", dev_name(pv->dev), "volume group %s", dev_name(pv->dev),
vg_name); vg_name);

View File

@ -40,7 +40,7 @@ int vgrename(int argc, char **argv)
vg_name_old = argv[0]; vg_name_old = argv[0];
vg_name_new = argv[1]; vg_name_new = argv[1];
prefix = ios->prefix; prefix = fid->cmd->dev_dir;
length = strlen(prefix); length = strlen(prefix);
/* If present, strip prefix */ /* If present, strip prefix */
@ -68,7 +68,7 @@ int vgrename(int argc, char **argv)
} }
log_verbose("Checking for existing volume group %s", vg_name_old); log_verbose("Checking for existing volume group %s", vg_name_old);
if (!(vg_old = ios->vg_read(ios, vg_name_old))) { if (!(vg_old = fid->ops->vg_read(fid, vg_name_old))) {
log_error("Volume group %s doesn't exist", vg_name_old); log_error("Volume group %s doesn't exist", vg_name_old);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -82,7 +82,7 @@ int vgrename(int argc, char **argv)
} }
log_verbose("Checking for new volume group %s", vg_name_new); log_verbose("Checking for new volume group %s", vg_name_new);
if ((vg_new = ios->vg_read(ios, vg_name_new))) { if ((vg_new = fid->ops->vg_read(fid, vg_name_new))) {
log_error("New volume group %s already exists", vg_name_new); log_error("New volume group %s already exists", vg_name_new);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -114,7 +114,7 @@ int vgrename(int argc, char **argv)
/* store it on disks */ /* store it on disks */
log_verbose("Writing out updated volume group"); log_verbose("Writing out updated volume group");
if (!(ios->vg_write(ios, vg_old))) { if (!(fid->ops->vg_write(fid, vg_old))) {
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -141,7 +141,7 @@ char *lv_change_vgname(char *vg_name, char *lv_name)
** check if lv_name includes a path ** check if lv_name includes a path
if ((lv_name_ptr = strrchr(lv_name, '/'))) { if ((lv_name_ptr = strrchr(lv_name, '/'))) {
lv_name_ptr++; lv_name_ptr++;
sprintf(lv_name_buf, "%s%s/%s%c", ios->prefix, vg_name, sprintf(lv_name_buf, "%s%s/%s%c", fid->cmd->dev_dir, vg_name,
lv_name_ptr, 0);} lv_name_ptr, 0);}
else else
strncpy(lv_name_buf, lv_name, NAME_LEN - 1); return lv_name_buf;} strncpy(lv_name_buf, lv_name, NAME_LEN - 1); return lv_name_buf;}

View File

@ -30,7 +30,7 @@ int vgscan(int argc, char **argv)
} }
log_verbose("Wiping cache of LVM-capable devices"); log_verbose("Wiping cache of LVM-capable devices");
persistent_filter_wipe(ios->filter); persistent_filter_wipe(fid->cmd->filter);
log_print("Reading all physical volumes (this may take a while...)"); log_print("Reading all physical volumes (this may take a while...)");
@ -42,7 +42,7 @@ static int vgscan_single(const char *vg_name)
struct volume_group *vg; struct volume_group *vg;
log_verbose("Checking for volume group %s", vg_name); log_verbose("Checking for volume group %s", vg_name);
if (!(vg = ios->vg_read(ios, vg_name))) { if (!(vg = fid->ops->vg_read(fid, vg_name))) {
log_error("Volume group %s not found", vg_name); log_error("Volume group %s not found", vg_name);
return ECMD_FAILED; return ECMD_FAILED;
} }
@ -52,7 +52,7 @@ static int vgscan_single(const char *vg_name)
if (!(vg->status & ACTIVE)) { if (!(vg->status & ACTIVE)) {
vg->status |= ACTIVE; vg->status |= ACTIVE;
if (!(ios->vg_write(ios, vg))) { if (!(fid->ops->vg_write(fid, vg))) {
log_error("Failed to activate volume group %s", log_error("Failed to activate volume group %s",
vg_name); vg_name);
return ECMD_FAILED; return ECMD_FAILED;