|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] tools/migration: Fix iovec handling in send_checkpoint_dirty_pfn_list()
commit efe8de1f91deb42f5a3b8aaf9c813c7479e6d53a
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Mon Jul 5 21:05:14 2021 +0100
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Fri Mar 24 12:16:31 2023 +0000
tools/migration: Fix iovec handling in send_checkpoint_dirty_pfn_list()
We shouldn't be using two struct iovec's to write half of 'rec' each, and
there is no need to malloc() for two struct iovec's at all.
Simplify down to just two - one covering the whole of 'rec', and one
covering
the pfns array.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Olaf Hering <olaf@xxxxxxxxx>
---
tools/libs/guest/xg_sr_restore.c | 25 ++++++-------------------
1 file changed, 6 insertions(+), 19 deletions(-)
diff --git a/tools/libs/guest/xg_sr_restore.c b/tools/libs/guest/xg_sr_restore.c
index 074b56d263..7314a24cf9 100644
--- a/tools/libs/guest/xg_sr_restore.c
+++ b/tools/libs/guest/xg_sr_restore.c
@@ -425,11 +425,13 @@ static int send_checkpoint_dirty_pfn_list(struct
xc_sr_context *ctx)
int rc = -1;
unsigned int count, written;
uint64_t i, *pfns = NULL;
- struct iovec *iov = NULL;
xc_shadow_op_stats_t stats = { 0, ctx->restore.p2m_size };
struct xc_sr_record rec = {
.type = REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST,
};
+ struct iovec iov[2] = {
+ { &rec, sizeof(rec) },
+ };
DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap,
&ctx->restore.dirty_bitmap_hbuf);
@@ -471,26 +473,12 @@ static int send_checkpoint_dirty_pfn_list(struct
xc_sr_context *ctx)
pfns[written++] = i;
}
- /* iovec[] for writev(). */
- iov = malloc(3 * sizeof(*iov));
- if ( !iov )
- {
- ERROR("Unable to allocate memory for sending dirty bitmap");
- goto err;
- }
-
rec.length = count * sizeof(*pfns);
- iov[0].iov_base = &rec.type;
- iov[0].iov_len = sizeof(rec.type);
-
- iov[1].iov_base = &rec.length;
- iov[1].iov_len = sizeof(rec.length);
-
- iov[2].iov_base = pfns;
- iov[2].iov_len = count * sizeof(*pfns);
+ iov[1].iov_base = pfns;
+ iov[1].iov_len = rec.length;
- if ( writev_exact(ctx->restore.send_back_fd, iov, 3) )
+ if ( writev_exact(ctx->restore.send_back_fd, iov, ARRAY_SIZE(iov)) )
{
PERROR("Failed to write dirty bitmap to stream");
goto err;
@@ -499,7 +487,6 @@ static int send_checkpoint_dirty_pfn_list(struct
xc_sr_context *ctx)
rc = 0;
err:
free(pfns);
- free(iov);
return rc;
}
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |