migration/multifd: Introduce MultiFDSendData

Add a new data structure to replace p->pages in the multifd
channel. This new structure will hide the multifd payload type behind
an union, so we don't need to add a new field to the channel each time
we want to handle a different data type.

This also allow us to keep multifd_send_pages() as is, without needing
to complicate the pointer switching.

Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
Fabiano Rosas 2024-08-27 14:45:52 -03:00
parent 112f7d1b75
commit addd7d1581

View File

@ -17,6 +17,7 @@
#include "ram.h"
typedef struct MultiFDRecvData MultiFDRecvData;
typedef struct MultiFDSendData MultiFDSendData;
bool multifd_send_setup(void);
void multifd_send_shutdown(void);
@ -88,6 +89,31 @@ struct MultiFDRecvData {
off_t file_offset;
};
typedef enum {
MULTIFD_PAYLOAD_NONE,
MULTIFD_PAYLOAD_RAM,
} MultiFDPayloadType;
typedef union MultiFDPayload {
MultiFDPages_t ram;
} MultiFDPayload;
struct MultiFDSendData {
MultiFDPayloadType type;
MultiFDPayload u;
};
static inline bool multifd_payload_empty(MultiFDSendData *data)
{
return data->type == MULTIFD_PAYLOAD_NONE;
}
static inline void multifd_set_payload_type(MultiFDSendData *data,
MultiFDPayloadType type)
{
data->type = type;
}
typedef struct {
/* Fields are only written at creating/deletion time */
/* No lock required for them, they are read only */