Skip to content

Commit be07a0e

Browse files
author
Juan Quintela
committed
qemu-file: Make qemu_fflush() return errors
This let us simplify code of this shape. qemu_fflush(f); int ret = qemu_file_get_error(f); if (ret) { return ret; } into: int ret = qemu_fflush(f); if (ret) { return ret; } I updated all callers where there is any error check. qemu_fclose() don't need to check for f->last_error because qemu_fflush() returns it at the beggining of the function. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231025091117.6342-13-quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
1 parent 0f85961 commit be07a0e

File tree

7 files changed

+21
-51
lines changed

7 files changed

+21
-51
lines changed

migration/colo.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,7 @@ static void colo_send_message(QEMUFile *f, COLOMessage msg,
314314
return;
315315
}
316316
qemu_put_be32(f, msg);
317-
qemu_fflush(f);
318-
319-
ret = qemu_file_get_error(f);
317+
ret = qemu_fflush(f);
320318
if (ret < 0) {
321319
error_setg_errno(errp, -ret, "Can't send COLO message");
322320
}
@@ -335,9 +333,7 @@ static void colo_send_message_value(QEMUFile *f, COLOMessage msg,
335333
return;
336334
}
337335
qemu_put_be64(f, value);
338-
qemu_fflush(f);
339-
340-
ret = qemu_file_get_error(f);
336+
ret = qemu_fflush(f);
341337
if (ret < 0) {
342338
error_setg_errno(errp, -ret, "Failed to send value for message:%s",
343339
COLOMessage_str(msg));
@@ -483,8 +479,7 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
483479
}
484480

485481
qemu_put_buffer(s->to_dst_file, bioc->data, bioc->usage);
486-
qemu_fflush(s->to_dst_file);
487-
ret = qemu_file_get_error(s->to_dst_file);
482+
ret = qemu_fflush(s->to_dst_file);
488483
if (ret < 0) {
489484
goto out;
490485
}

migration/migration.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -305,12 +305,7 @@ static int migrate_send_rp_message(MigrationIncomingState *mis,
305305
qemu_put_be16(mis->to_src_file, (unsigned int)message_type);
306306
qemu_put_be16(mis->to_src_file, len);
307307
qemu_put_buffer(mis->to_src_file, data, len);
308-
qemu_fflush(mis->to_src_file);
309-
310-
/* It's possible that qemu file got error during sending */
311-
ret = qemu_file_get_error(mis->to_src_file);
312-
313-
return ret;
308+
return qemu_fflush(mis->to_src_file);
314309
}
315310

316311
/* Request one page from the source VM at the given start address.

migration/qemu-file.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,14 @@ static void qemu_iovec_release_ram(QEMUFile *f)
262262
* This will flush all pending data. If data was only partially flushed, it
263263
* will set an error state.
264264
*/
265-
void qemu_fflush(QEMUFile *f)
265+
int qemu_fflush(QEMUFile *f)
266266
{
267267
if (!qemu_file_is_writable(f)) {
268-
return;
268+
return f->last_error;
269269
}
270270

271-
if (qemu_file_get_error(f)) {
272-
return;
271+
if (f->last_error) {
272+
return f->last_error;
273273
}
274274
if (f->iovcnt > 0) {
275275
Error *local_error = NULL;
@@ -287,6 +287,7 @@ void qemu_fflush(QEMUFile *f)
287287

288288
f->buf_index = 0;
289289
f->iovcnt = 0;
290+
return f->last_error;
290291
}
291292

292293
/*
@@ -353,22 +354,12 @@ static ssize_t coroutine_mixed_fn qemu_fill_buffer(QEMUFile *f)
353354
*/
354355
int qemu_fclose(QEMUFile *f)
355356
{
356-
int ret, ret2;
357-
qemu_fflush(f);
358-
ret = qemu_file_get_error(f);
359-
360-
ret2 = qio_channel_close(f->ioc, NULL);
357+
int ret = qemu_fflush(f);
358+
int ret2 = qio_channel_close(f->ioc, NULL);
361359
if (ret >= 0) {
362360
ret = ret2;
363361
}
364362
g_clear_pointer(&f->ioc, object_unref);
365-
366-
/* If any error was spotted before closing, we should report it
367-
* instead of the close() return value.
368-
*/
369-
if (f->last_error) {
370-
ret = f->last_error;
371-
}
372363
error_free(f->last_error_obj);
373364
g_free(f);
374365
trace_qemu_file_fclose();

migration/qemu-file.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void qemu_file_set_error_obj(QEMUFile *f, int ret, Error *err);
7171
void qemu_file_set_error(QEMUFile *f, int ret);
7272
int qemu_file_shutdown(QEMUFile *f);
7373
QEMUFile *qemu_file_get_return_path(QEMUFile *f);
74-
void qemu_fflush(QEMUFile *f);
74+
int qemu_fflush(QEMUFile *f);
7575
void qemu_file_set_blocking(QEMUFile *f, bool block);
7676
int qemu_file_get_to_fd(QEMUFile *f, int fd, size_t size);
7777

migration/ram.c

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -305,17 +305,15 @@ int64_t ramblock_recv_bitmap_send(QEMUFile *file,
305305

306306
qemu_put_be64(file, size);
307307
qemu_put_buffer(file, (const uint8_t *)le_bitmap, size);
308+
g_free(le_bitmap);
308309
/*
309310
* Mark as an end, in case the middle part is screwed up due to
310311
* some "mysterious" reason.
311312
*/
312313
qemu_put_be64(file, RAMBLOCK_RECV_BITMAP_ENDING);
313-
qemu_fflush(file);
314-
315-
g_free(le_bitmap);
316-
317-
if (qemu_file_get_error(file)) {
318-
return qemu_file_get_error(file);
314+
int ret = qemu_fflush(file);
315+
if (ret) {
316+
return ret;
319317
}
320318

321319
return size + sizeof(size);
@@ -2996,9 +2994,7 @@ static int ram_save_setup(QEMUFile *f, void *opaque)
29962994
}
29972995

29982996
qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2999-
qemu_fflush(f);
3000-
3001-
return 0;
2997+
return qemu_fflush(f);
30022998
}
30032999

30043000
/**
@@ -3118,10 +3114,8 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
31183114
}
31193115

31203116
qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3121-
qemu_fflush(f);
31223117
ram_transferred_add(8);
3123-
3124-
ret = qemu_file_get_error(f);
3118+
ret = qemu_fflush(f);
31253119
}
31263120
if (ret < 0) {
31273121
return ret;
@@ -3196,9 +3190,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
31963190
qemu_put_be64(f, RAM_SAVE_FLAG_MULTIFD_FLUSH);
31973191
}
31983192
qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3199-
qemu_fflush(f);
3200-
3201-
return 0;
3193+
return qemu_fflush(f);
32023194
}
32033195

32043196
static void ram_state_pending_estimate(void *opaque, uint64_t *must_precopy,

migration/rdma.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3853,9 +3853,7 @@ int rdma_registration_start(QEMUFile *f, uint64_t flags)
38533853

38543854
trace_rdma_registration_start(flags);
38553855
qemu_put_be64(f, RAM_SAVE_FLAG_HOOK);
3856-
qemu_fflush(f);
3857-
3858-
return 0;
3856+
return qemu_fflush(f);
38593857
}
38603858

38613859
/*

migration/savevm.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,8 +1583,7 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
15831583
}
15841584

15851585
flush:
1586-
qemu_fflush(f);
1587-
return 0;
1586+
return qemu_fflush(f);
15881587
}
15891588

15901589
/* Give an estimate of the amount left to be transferred,

0 commit comments

Comments
 (0)