mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-05 16:00:05 +01:00
Postpone reencryption dm segments refresh.
Refresh (and therefore suspend hotzone) reencryption dm segments in-before actual hotzone reencryption takes place. This commit shortens time window during which hotzone is suspended. Also it avoids eventual deadlock if reencryption process triggers page miss during storage wrapper reinitialization and required data is stored in (previously) suspended hotzone (corner case).
This commit is contained in:
@@ -3189,13 +3189,6 @@ static reenc_status_t reencrypt_step(struct crypt_device *cd,
|
||||
return REENC_ERR;
|
||||
}
|
||||
|
||||
if (online) {
|
||||
r = reencrypt_refresh_overlay_devices(cd, hdr, rh->overlay_name, rh->hotzone_name, rh->vks, rh->device_size, rh->flags);
|
||||
/* Teardown overlay devices with dm-error. None bio shall pass! */
|
||||
if (r != REENC_OK)
|
||||
return r;
|
||||
}
|
||||
|
||||
log_dbg(cd, "Reencrypting chunk starting at offset: %" PRIu64 ", size :%" PRIu64 ".", rh->offset, rh->length);
|
||||
log_dbg(cd, "data_offset: %" PRIu64, crypt_get_data_offset(cd) << SECTOR_SHIFT);
|
||||
|
||||
@@ -3216,6 +3209,13 @@ static reenc_status_t reencrypt_step(struct crypt_device *cd,
|
||||
}
|
||||
}
|
||||
|
||||
if (online) {
|
||||
r = reencrypt_refresh_overlay_devices(cd, hdr, rh->overlay_name, rh->hotzone_name, rh->vks, rh->device_size, rh->flags);
|
||||
/* Teardown overlay devices with dm-error. None bio shall pass! */
|
||||
if (r != REENC_OK)
|
||||
return r;
|
||||
}
|
||||
|
||||
rh->read = crypt_storage_wrapper_read(rh->cw1, rh->offset, rh->reenc_buffer, rh->length);
|
||||
if (rh->read < 0) {
|
||||
/* severity normal */
|
||||
|
||||
Reference in New Issue
Block a user