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

o Added lvs_in_vgs_opened

This commit is contained in:
Joe Thornber 2001-11-07 15:02:07 +00:00
parent 801495c0f7
commit 2ba80b436f
8 changed files with 81 additions and 13 deletions

View File

@ -15,7 +15,7 @@ static void _build_lv_name(char *buffer, size_t s, struct logical_volume *lv)
snprintf(buffer, s, "%s_%s", lv->vg->name, lv->name);
}
struct dm_task *_setup_task(struct logical_volume *lv, int task)
static struct dm_task *_setup_task(struct logical_volume *lv, int task)
{
char name[128];
struct dm_task *dmt;
@ -31,9 +31,8 @@ struct dm_task *_setup_task(struct logical_volume *lv, int task)
return dmt;
}
int lv_active(struct logical_volume *lv, int *result)
static struct dm_task *_info(struct logical_volume *lv)
{
int r = 0;
struct dm_task *dmt;
if (!(dmt = _setup_task(lv, DM_DEVICE_INFO))) {
@ -42,6 +41,23 @@ int lv_active(struct logical_volume *lv, int *result)
}
if (!dm_task_run(dmt)) {
stack;
goto bad;
}
return dmt;
bad:
dm_task_destroy(dmt);
return NULL;
}
int lv_active(struct logical_volume *lv, int *result)
{
int r = 0;
struct dm_task *dmt;
if (!(dmt = _info(lv))) {
stack;
goto out;
}
@ -58,6 +74,28 @@ int lv_active(struct logical_volume *lv, int *result)
return r;
}
int lv_open_count(struct logical_volume *lv, int *result)
{
int r = 0;
struct dm_task *dmt;
if (!(dmt = _info(lv))) {
stack;
goto out;
}
if (!dm_task_open_count(dmt, result)) {
stack;
goto out;
}
r = 1;
out:
dm_task_destroy(dmt);
return r;
}
/*
* Creates a target for the next contiguous run of
* extents.
@ -220,7 +258,7 @@ int deactivate_lvs_in_vg(struct volume_group *vg)
list_iterate(lvh, &vg->lvs) {
lv = &(list_item(lvh, struct lv_list)->lv);
if (!lv_active(lv, &exists) || exists)
if (!lv_active(lv, &exists) || !exists)
continue;
count += lv_activate(lv);
@ -248,3 +286,24 @@ int lvs_in_vg_activated(struct volume_group *vg)
return count;
}
int lvs_in_vg_opened(struct volume_group *vg)
{
struct list *lvh;
struct logical_volume *lv;
int open, count = 0;
list_iterate(lvh, &vg->lvs) {
lv = &(list_item(lvh, struct lv_list)->lv);
if (!lv_open_count(lv, &open)) {
stack;
continue; /* FIXME: what is the right thing here ? */
}
count += open ? 1 : 0;
}
return count;
}

View File

@ -10,15 +10,18 @@
/* FIXME Snapshot handling? */
int lv_active(struct logical_volume *lv, int *result);
int lv_open_count(struct logical_volume *lv, int *result);
int lv_activate(struct logical_volume *lv);
int lv_reactivate(struct logical_volume *lv);
int lv_deactivate(struct logical_volume *lv);
/*
* Return number of LVs in the VG that are
* active
* active.
*/
int lvs_in_vg_activated(struct volume_group *vg);
int lvs_in_vg_opened(struct volume_group *vg);
/*
* Test for (lv->status & LVM_WRITE)

View File

@ -355,6 +355,12 @@ int import_extents(struct pool *mem, struct volume_group *vg, struct list *pvs)
lv = lvs[lv_num];
le = e[i].le_num;
if (le >= lv->le_count) {
log_err("logical extent number "
"out of bounds");
return 0;
}
lv->map[le].pv = pv;
lv->map[le].pe = i;
}

View File

@ -65,7 +65,7 @@ void print_log(int level, const char *file, int line, const char *format, ...)
#define log_err(x...) plog(_LOG_ERR, x)
#define log_fatal(x...) plog(_LOG_FATAL, x)
#define stack log_debug( "s" )
#define stack log_debug("stack")
#define log_error(fmt, args...) log_err(fmt , ## args)
#define log_print(fmt, args...) log_warn(fmt , ## args)

View File

@ -289,7 +289,7 @@ int lv_extend(struct io_space *ios,
new_lv->map = new_map;
new_lv->le_count += extents;
if (!_allocate(lv->vg, lv, acceptable_pvs, lv->le_count)) {
if (!_allocate(new_lv->vg, new_lv, acceptable_pvs, new_lv->le_count)) {
stack;
goto bad;
}

View File

@ -133,7 +133,8 @@ struct volume_group *vg_create(struct io_space *ios, const char *vg_name,
}
if (!id_create(&vg->id)) {
log_err("Couldn't create uuid for volume group '%s'.", vg_name);
log_err("Couldn't create uuid for volume group '%s'.",
vg_name);
goto bad;
}

View File

@ -23,7 +23,6 @@
int lvcreate(int argc, char **argv)
{
int zero;
int size_rest = 0;
uint32_t read_ahead = 0;
int stripes = 1;
int stripesize = 0;

View File

@ -94,8 +94,8 @@ void vgchange_available(struct volume_group *vg)
}
/* FIXME: Force argument to deactivate them? */
if (!available && (lv_open = lvs_in_vg_activated(vg))) {
log_error("Can't deactivate volume group '%s' with %d active "
if (!available && (lv_open = lvs_in_vg_opened(vg))) {
log_error("Can't deactivate volume group '%s' with %d open "
"logical volume(s)", vg->name, lv_open);
return;
}