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:
parent
112f7d1b75
commit
addd7d1581
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user