1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-10 16:58:47 +03:00

wipe_lv: interruptible wiping

Since we now block signals and wiping may take unexpectedly long
time - support breaking command while wipe is in progress.
This commit is contained in:
Zdenek Kabelac 2020-10-02 19:31:05 +02:00
parent 7396f1cfee
commit c65d3a6b8a
2 changed files with 16 additions and 0 deletions

View File

@ -1,5 +1,6 @@
Version 2.03.11 - Version 2.03.11 -
================================== ==================================
Support interruption when wipping LVs.
Support interruption for bcache waiting. Support interruption for bcache waiting.
Fix bcache when device has too many failing writes. Fix bcache when device has too many failing writes.
Fix bcache waiting for IO completion with failing disks. Fix bcache waiting for IO completion with failing disks.

View File

@ -31,6 +31,7 @@
#include "lib/mm/memlock.h" #include "lib/mm/memlock.h"
#include "lib/locking/lvmlockd.h" #include "lib/locking/lvmlockd.h"
#include "lib/label/label.h" #include "lib/label/label.h"
#include "lib/misc/lvm-signal.h"
typedef enum { typedef enum {
PREFERRED, PREFERRED,
@ -7668,12 +7669,19 @@ int wipe_lv(struct logical_volume *lv, struct wipe_params wp)
return 0; return 0;
} }
sigint_allow();
if (wp.do_wipe_signatures) { if (wp.do_wipe_signatures) {
log_verbose("Wiping known signatures on logical volume %s.", log_verbose("Wiping known signatures on logical volume %s.",
display_lvname(lv)); display_lvname(lv));
if (!wipe_known_signatures(lv->vg->cmd, dev, name, 0, if (!wipe_known_signatures(lv->vg->cmd, dev, name, 0,
TYPE_DM_SNAPSHOT_COW, TYPE_DM_SNAPSHOT_COW,
wp.yes, wp.force, NULL)) { wp.yes, wp.force, NULL)) {
sigint_restore();
if (sigint_caught()) {
log_error("Interrupted initialization logical volume %s.",
display_lvname(lv));
return 0;
}
label_scan_invalidate(dev); label_scan_invalidate(dev);
log_error("Filed to wipe signatures of logical volume %s.", log_error("Filed to wipe signatures of logical volume %s.",
display_lvname(lv)); display_lvname(lv));
@ -7706,12 +7714,19 @@ int wipe_lv(struct logical_volume *lv, struct wipe_params wp)
display_lvname(lv), wp.zero_value); display_lvname(lv), wp.zero_value);
if (!dev_set_bytes(dev, UINT64_C(0), (size_t) zero_sectors << SECTOR_SHIFT, wp.zero_value)) { if (!dev_set_bytes(dev, UINT64_C(0), (size_t) zero_sectors << SECTOR_SHIFT, wp.zero_value)) {
sigint_restore();
if (sigint_caught()) {
log_error("Interrupted initialization logical volume %s.",
display_lvname(lv));
return 0;
}
log_error("Failed to initialize %s of logical volume %s with value %d.", log_error("Failed to initialize %s of logical volume %s with value %d.",
display_size(lv->vg->cmd, zero_sectors), display_size(lv->vg->cmd, zero_sectors),
display_lvname(lv), wp.zero_value); display_lvname(lv), wp.zero_value);
return 0; return 0;
} }
} }
sigint_restore();
label_scan_invalidate(dev); label_scan_invalidate(dev);