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

Don't attempt to restart pvmoves when deactivating LVs in vgchange.

Restart lvconverts in vgchange by sharing lv_spawn_background_polling.
This commit is contained in:
Alasdair Kergon 2009-09-29 20:22:35 +00:00
parent 724de2791e
commit 93bbc31c83
5 changed files with 28 additions and 20 deletions

View File

@ -1,5 +1,7 @@
Version 2.02.54 - Version 2.02.54 -
===================================== =====================================
Don't attempt to restart pvmoves when deactivating LVs in vgchange.
Restart lvconverts in vgchange by sharing lv_spawn_background_polling.
Generalise polldaemon code by changing mirror-specific variable names. Generalise polldaemon code by changing mirror-specific variable names.
Don't attempt to deactivate an LV if any of its snapshots are in use. Don't attempt to deactivate an LV if any of its snapshots are in use.
Return fail if lv_deactivate fails to remove device from kernel. Return fail if lv_deactivate fails to remove device from kernel.

View File

@ -105,7 +105,6 @@ static int lvchange_availability(struct cmd_context *cmd,
struct logical_volume *lv) struct logical_volume *lv)
{ {
int activate; int activate;
const char *pvname;
activate = arg_uint_value(cmd, available_ARG, 0); activate = arg_uint_value(cmd, available_ARG, 0);
@ -136,18 +135,7 @@ static int lvchange_availability(struct cmd_context *cmd,
return_0; return_0;
} }
if ((lv->status & LOCKED) && lv_spawn_background_polling(cmd, lv);
(pvname = get_pvmove_pvname_from_lv(lv))) {
log_verbose("Spawning background pvmove process for %s",
pvname);
pvmove_poll(cmd, pvname, 1);
}
if (lv->status & CONVERTING) {
log_verbose("Spawning background lvconvert process for %s",
lv->name);
lvconvert_poll(cmd, lv, 1);
}
} }
return 1; return 1;

View File

@ -1247,3 +1247,22 @@ int vg_refresh_visible(struct cmd_context *cmd, struct volume_group *vg)
return r; return r;
} }
void lv_spawn_background_polling(struct cmd_context *cmd,
struct logical_volume *lv)
{
const char *pvname;
if ((lv->status & LOCKED) &&
(pvname = get_pvmove_pvname_from_lv(lv))) {
log_verbose("Spawning background pvmove process for %s",
pvname);
pvmove_poll(cmd, pvname, 1);
}
if (lv->status & CONVERTING) {
log_verbose("Spawning background lvconvert process for %s",
lv->name);
lvconvert_poll(cmd, lv, 1);
}
}

View File

@ -105,4 +105,7 @@ int fill_vg_create_params(struct cmd_context *cmd,
int lv_refresh(struct cmd_context *cmd, struct logical_volume *lv); int lv_refresh(struct cmd_context *cmd, struct logical_volume *lv);
int vg_refresh_visible(struct cmd_context *cmd, struct volume_group *vg); int vg_refresh_visible(struct cmd_context *cmd, struct volume_group *vg);
void lv_spawn_background_polling(struct cmd_context *cmd,
struct logical_volume *lv);
#endif #endif

View File

@ -91,13 +91,9 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
} else if (!activate_lv(cmd, lv)) } else if (!activate_lv(cmd, lv))
continue; continue;
if ((lv->status & PVMOVE) && if (activate != CHANGE_AN && activate != CHANGE_ALN &&
(pvname = get_pvmove_pvname_from_lv_mirr(lv))) { (lv->status & (PVMOVE|CONVERTING)))
log_verbose("Spawning background process for %s %s", lv_spawn_background_polling(cmd, lv);
lv->name, pvname);
pvmove_poll(cmd, pvname, 1);
continue;
}
count++; count++;
} }