Modernize error handling in postcopy_ram_incoming_setup() and
postcopy_temp_pages_setup() by replacing error_reports and local error
handling with standard Error propagation.
Replace use of strerror() on errno with error_setg_errno() for modular
handling of errors and change return values to -1 on failure as no
caller checks the actual return value.
Signed-off-by: Aadeshveer Singh <aadeshveer07@gmail.com>
---
migration/postcopy-ram.c | 41 +++++++++++++++++-----------------------
migration/postcopy-ram.h | 2 +-
2 files changed, 18 insertions(+), 25 deletions(-)
diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
index f5ef93f193..96a65aa976 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -1464,10 +1464,9 @@ retry:
return NULL;
}
-static int postcopy_temp_pages_setup(MigrationIncomingState *mis)
+static int postcopy_temp_pages_setup(MigrationIncomingState *mis, Error **errp)
{
PostcopyTmpPage *tmp_page;
- int err;
unsigned i, channels;
void *temp_page;
@@ -1487,11 +1486,11 @@ static int postcopy_temp_pages_setup(MigrationIncomingState *mis)
temp_page = mmap(NULL, mis->largest_page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (temp_page == MAP_FAILED) {
- err = errno;
- error_report("%s: Failed to map postcopy_tmp_pages[%d]: %s",
- __func__, i, strerror(err));
+ error_setg_errno(errp, errno,
+ "%s: Failed to map postcopy_tmp_pages[%d]",
+ __func__, i);
/* Clean up will be done later */
- return -err;
+ return -1;
}
tmp_page->tmp_huge_page = temp_page;
/* Initialize default states for each tmp page */
@@ -1505,11 +1504,10 @@ static int postcopy_temp_pages_setup(MigrationIncomingState *mis)
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (mis->postcopy_tmp_zero_page == MAP_FAILED) {
- err = errno;
mis->postcopy_tmp_zero_page = NULL;
- error_report("%s: Failed to map large zero page %s",
- __func__, strerror(err));
- return -err;
+ error_setg_errno(errp, errno, "%s: Failed to map large zero page",
+ __func__);
+ return -1;
}
memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size);
@@ -1517,15 +1515,13 @@ static int postcopy_temp_pages_setup(MigrationIncomingState *mis)
return 0;
}
-int postcopy_ram_incoming_setup(MigrationIncomingState *mis)
+int postcopy_ram_incoming_setup(MigrationIncomingState *mis, Error **errp)
{
- Error *local_err = NULL;
-
/* Open the fd for the kernel to give us userfaults */
mis->userfault_fd = uffd_open(O_CLOEXEC | O_NONBLOCK);
if (mis->userfault_fd == -1) {
- error_report("%s: Failed to open userfault fd: %s", __func__,
- strerror(errno));
+ error_setg_errno(errp, errno, "%s: Failed to open userfault fd",
+ __func__);
return -1;
}
@@ -1533,8 +1529,7 @@ int postcopy_ram_incoming_setup(MigrationIncomingState *mis)
* Although the host check already tested the API, we need to
* do the check again as an ABI handshake on the new fd.
*/
- if (!ufd_check_and_apply(mis->userfault_fd, mis, &local_err)) {
- error_report_err(local_err);
+ if (!ufd_check_and_apply(mis->userfault_fd, mis, errp)) {
return -1;
}
@@ -1546,8 +1541,8 @@ int postcopy_ram_incoming_setup(MigrationIncomingState *mis)
/* Now an eventfd we use to tell the fault-thread to quit */
mis->userfault_event_fd = eventfd(0, EFD_CLOEXEC);
if (mis->userfault_event_fd == -1) {
- error_report("%s: Opening userfault_event_fd: %s", __func__,
- strerror(errno));
+ error_setg_errno(errp, errno, "%s: Opening userfault_event_fd",
+ __func__);
close(mis->userfault_fd);
return -1;
}
@@ -1559,12 +1554,11 @@ int postcopy_ram_incoming_setup(MigrationIncomingState *mis)
/* Mark so that we get notified of accesses to unwritten areas */
if (foreach_not_ignored_block(ram_block_enable_notify, mis)) {
- error_report("ram_block_enable_notify failed");
+ error_setg(errp, "ram_block_enable_notify failed");
return -1;
}
- if (postcopy_temp_pages_setup(mis)) {
- /* Error dumped in the sub-function */
+ if (postcopy_temp_pages_setup(mis, errp)) {
return -1;
}
@@ -2201,9 +2195,8 @@ int postcopy_incoming_setup(MigrationIncomingState *mis, Error **errp)
* shouldn't be doing anything yet so don't actually expect requests
*/
if (migrate_postcopy_ram()) {
- if (postcopy_ram_incoming_setup(mis)) {
+ if (postcopy_ram_incoming_setup(mis, errp)) {
postcopy_ram_incoming_cleanup(mis);
- error_setg(errp, "Failed to setup incoming postcopy RAM blocks");
return -1;
}
}
diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h
index a080dd65a7..98d918713f 100644
--- a/migration/postcopy-ram.h
+++ b/migration/postcopy-ram.h
@@ -23,7 +23,7 @@ bool postcopy_ram_supported_by_host(MigrationIncomingState *mis,
* Make all of RAM sensitive to accesses to areas that haven't yet been written
* and wire up anything necessary to deal with it.
*/
-int postcopy_ram_incoming_setup(MigrationIncomingState *mis);
+int postcopy_ram_incoming_setup(MigrationIncomingState *mis, Error **errp);
/*
* Initialise postcopy-ram, setting the RAM to a state where we can go into
--
2.55.0