mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
lvconvert: uncache handles missing PV
Allow to process with --uncache when some PVs are missing in VG. So it's now possible to --uncache cached LV if the cache-pool has missing PV.
This commit is contained in:
parent
29d1533a49
commit
569ba79abf
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.146 -
|
Version 2.02.146 -
|
||||||
=================================
|
=================================
|
||||||
|
Support --uncache with missing PVs.
|
||||||
Tidy report field names, headings and widths.
|
Tidy report field names, headings and widths.
|
||||||
Add vgscan --notifydbus to send a dbus notification.
|
Add vgscan --notifydbus to send a dbus notification.
|
||||||
Add dbus notification from commands after a PV/VG/LV changes state.
|
Add dbus notification from commands after a PV/VG/LV changes state.
|
||||||
|
@ -1997,6 +1997,9 @@ static int _lvconvert_uncache(struct cmd_context *cmd,
|
|||||||
struct logical_volume *lv,
|
struct logical_volume *lv,
|
||||||
struct lvconvert_params *lp)
|
struct lvconvert_params *lp)
|
||||||
{
|
{
|
||||||
|
struct lv_segment *seg;
|
||||||
|
struct logical_volume *remove_lv;
|
||||||
|
|
||||||
if (lv_is_thin_pool(lv))
|
if (lv_is_thin_pool(lv))
|
||||||
lv = seg_lv(first_seg(lv), 0); /* cached _tdata ? */
|
lv = seg_lv(first_seg(lv), 0); /* cached _tdata ? */
|
||||||
|
|
||||||
@ -2006,10 +2009,49 @@ static int _lvconvert_uncache(struct cmd_context *cmd,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lv_remove_single(cmd, first_seg(lv)->pool_lv, (force_t) lp->force, 0))
|
seg = first_seg(lv);
|
||||||
|
|
||||||
|
if (lv_is_partial(seg_lv(seg, 0))) {
|
||||||
|
log_warn("WARNING: Cache origin logical volume %s is missing.",
|
||||||
|
display_lvname(seg_lv(seg, 0)));
|
||||||
|
remove_lv = lv; /* When origin is missing, drop everything */
|
||||||
|
} else
|
||||||
|
remove_lv = seg->pool_lv;
|
||||||
|
|
||||||
|
if (lv_is_partial(seg_lv(first_seg(seg->pool_lv), 0)))
|
||||||
|
log_warn("WARNING: Cache pool data logical volume %s is missing.",
|
||||||
|
display_lvname(seg_lv(first_seg(seg->pool_lv), 0)));
|
||||||
|
|
||||||
|
if (lv_is_partial(first_seg(seg->pool_lv)->metadata_lv))
|
||||||
|
log_warn("WARNING: Cache pool metadata logical volume %s is missing.",
|
||||||
|
display_lvname(first_seg(seg->pool_lv)->metadata_lv));
|
||||||
|
|
||||||
|
/* TODO: Check for failed cache as well to get prompting? */
|
||||||
|
if (lv_is_partial(lv)) {
|
||||||
|
if (strcmp("writethrough", get_cache_mode_name(first_seg(seg->pool_lv)))) {
|
||||||
|
if (!lp->force) {
|
||||||
|
log_error("Conversion aborted.");
|
||||||
|
log_error("Cannot uncache writethrough cache volume %s without --force.",
|
||||||
|
display_lvname(lv));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
log_warn("WARNING: Uncaching of partially missing writethrough cache volume %s might destroy your data.",
|
||||||
|
display_lvname(first_seg(seg->pool_lv)->metadata_lv));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lp->yes &&
|
||||||
|
yes_no_prompt("Do you really want to uncache %s? with missing LVs [y/n]: ",
|
||||||
|
display_lvname(lv)) == 'n') {
|
||||||
|
log_error("Conversion aborted.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lvremove_single(cmd, remove_lv, NULL))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
log_print_unless_silent("Logical volume %s is not cached.", display_lvname(lv));
|
if (remove_lv != lv)
|
||||||
|
log_print_unless_silent("Logical volume %s is not cached.", display_lvname(lv));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -3421,7 +3463,7 @@ static int lvconvert_single(struct cmd_context *cmd, struct lvconvert_params *lp
|
|||||||
int saved_ignore_suspended_devices = ignore_suspended_devices();
|
int saved_ignore_suspended_devices = ignore_suspended_devices();
|
||||||
uint32_t lockd_state = 0;
|
uint32_t lockd_state = 0;
|
||||||
|
|
||||||
if (lp->repair) {
|
if (lp->repair || lp->uncache) {
|
||||||
init_ignore_suspended_devices(1);
|
init_ignore_suspended_devices(1);
|
||||||
cmd->handles_missing_pvs = 1;
|
cmd->handles_missing_pvs = 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user