migration: size_t'ify some of qemu-file
This is a start on using size_t more in qemu-file and friends; it fixes up QEMUFilePutBufferFunc and QEMUFileGetBufferFunc to take size_t lengths and return ssize_t return values (like read(2)) and fixes up all the different implementations of them. Note that I've not yet followed this deeply into bdrv_ implementations. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <1439463094-5394-5-git-send-email-dgilbert@redhat.com> Reviewed-by: zhanghailiang <zhang.zhanghailiang@huawei.com> Reviewed-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Amit Shah <amit.shah@redhat.com>
This commit is contained in:
		
							parent
							
								
									c50766f5a9
								
							
						
					
					
						commit
						a202a4c001
					
				| 
						 | 
				
			
			@ -31,15 +31,15 @@
 | 
			
		|||
 * The pos argument can be ignored if the file is only being used for
 | 
			
		||||
 * streaming.  The handler should try to write all of the data it can.
 | 
			
		||||
 */
 | 
			
		||||
typedef int (QEMUFilePutBufferFunc)(void *opaque, const uint8_t *buf,
 | 
			
		||||
                                    int64_t pos, int size);
 | 
			
		||||
typedef ssize_t (QEMUFilePutBufferFunc)(void *opaque, const uint8_t *buf,
 | 
			
		||||
                                        int64_t pos, size_t size);
 | 
			
		||||
 | 
			
		||||
/* Read a chunk of data from a file at the given position.  The pos argument
 | 
			
		||||
 * can be ignored if the file is only be used for streaming.  The number of
 | 
			
		||||
 * bytes actually read should be returned.
 | 
			
		||||
 */
 | 
			
		||||
typedef int (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf,
 | 
			
		||||
                                    int64_t pos, int size);
 | 
			
		||||
typedef ssize_t (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf,
 | 
			
		||||
                                        int64_t pos, size_t size);
 | 
			
		||||
 | 
			
		||||
/* Close a file
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -372,7 +372,8 @@ typedef struct QEMUBuffer {
 | 
			
		|||
    bool qsb_allocated;
 | 
			
		||||
} QEMUBuffer;
 | 
			
		||||
 | 
			
		||||
static int buf_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 | 
			
		||||
static ssize_t buf_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
 | 
			
		||||
                              size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUBuffer *s = opaque;
 | 
			
		||||
    ssize_t len = qsb_get_length(s->qsb) - pos;
 | 
			
		||||
| 
						 | 
				
			
			@ -387,8 +388,8 @@ static int buf_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 | 
			
		|||
    return qsb_get_buffer(s->qsb, pos, len, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int buf_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		||||
                          int64_t pos, int size)
 | 
			
		||||
static ssize_t buf_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		||||
                              int64_t pos, size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUBuffer *s = opaque;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,11 +37,11 @@ static int stdio_get_fd(void *opaque)
 | 
			
		|||
    return fileno(s->stdio_file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos,
 | 
			
		||||
                            int size)
 | 
			
		||||
static ssize_t stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos,
 | 
			
		||||
                                size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUFileStdio *s = opaque;
 | 
			
		||||
    int res;
 | 
			
		||||
    size_t res;
 | 
			
		||||
 | 
			
		||||
    res = fwrite(buf, 1, size, s->stdio_file);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -51,11 +51,12 @@ static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos,
 | 
			
		|||
    return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 | 
			
		||||
static ssize_t stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
 | 
			
		||||
                                size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUFileStdio *s = opaque;
 | 
			
		||||
    FILE *fp = s->stdio_file;
 | 
			
		||||
    int bytes;
 | 
			
		||||
    ssize_t bytes;
 | 
			
		||||
 | 
			
		||||
    for (;;) {
 | 
			
		||||
        clearerr(fp);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,8 @@ static int socket_get_fd(void *opaque)
 | 
			
		|||
    return s->fd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 | 
			
		||||
static ssize_t socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
 | 
			
		||||
                                 size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUFileSocket *s = opaque;
 | 
			
		||||
    ssize_t len;
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +139,8 @@ static ssize_t unix_writev_buffer(void *opaque, struct iovec *iov, int iovcnt,
 | 
			
		|||
    return total;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int unix_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 | 
			
		||||
static ssize_t unix_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
 | 
			
		||||
                              size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUFileSocket *s = opaque;
 | 
			
		||||
    ssize_t len;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2519,8 +2519,8 @@ static void *qemu_rdma_data_init(const char *host_port, Error **errp)
 | 
			
		|||
 * SEND messages for control only.
 | 
			
		||||
 * VM's ram is handled with regular RDMA messages.
 | 
			
		||||
 */
 | 
			
		||||
static int qemu_rdma_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		||||
                                int64_t pos, int size)
 | 
			
		||||
static ssize_t qemu_rdma_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		||||
                                    int64_t pos, size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUFileRDMA *r = opaque;
 | 
			
		||||
    QEMUFile *f = r->file;
 | 
			
		||||
| 
						 | 
				
			
			@ -2547,7 +2547,8 @@ static int qemu_rdma_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		|||
        r->len = MIN(remaining, RDMA_SEND_INCREMENT);
 | 
			
		||||
        remaining -= r->len;
 | 
			
		||||
 | 
			
		||||
        head.len = r->len;
 | 
			
		||||
        /* Guaranteed to fit due to RDMA_SEND_INCREMENT MIN above */
 | 
			
		||||
        head.len = (uint32_t)r->len;
 | 
			
		||||
        head.type = RDMA_CONTROL_QEMU_FILE;
 | 
			
		||||
 | 
			
		||||
        ret = qemu_rdma_exchange_send(rdma, &head, data, NULL, NULL, NULL);
 | 
			
		||||
| 
						 | 
				
			
			@ -2564,7 +2565,7 @@ static int qemu_rdma_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static size_t qemu_rdma_fill(RDMAContext *rdma, uint8_t *buf,
 | 
			
		||||
                             int size, int idx)
 | 
			
		||||
                             size_t size, int idx)
 | 
			
		||||
{
 | 
			
		||||
    size_t len = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2585,8 +2586,8 @@ static size_t qemu_rdma_fill(RDMAContext *rdma, uint8_t *buf,
 | 
			
		|||
 * RDMA links don't use bytestreams, so we have to
 | 
			
		||||
 * return bytes to QEMUFile opportunistically.
 | 
			
		||||
 */
 | 
			
		||||
static int qemu_rdma_get_buffer(void *opaque, uint8_t *buf,
 | 
			
		||||
                                int64_t pos, int size)
 | 
			
		||||
static ssize_t qemu_rdma_get_buffer(void *opaque, uint8_t *buf,
 | 
			
		||||
                                    int64_t pos, size_t size)
 | 
			
		||||
{
 | 
			
		||||
    QEMUFileRDMA *r = opaque;
 | 
			
		||||
    RDMAContext *rdma = r->rdma;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,14 +138,15 @@ static ssize_t block_writev_buffer(void *opaque, struct iovec *iov, int iovcnt,
 | 
			
		|||
    return qiov.size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int block_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		||||
                           int64_t pos, int size)
 | 
			
		||||
static ssize_t block_put_buffer(void *opaque, const uint8_t *buf,
 | 
			
		||||
                                int64_t pos, size_t size)
 | 
			
		||||
{
 | 
			
		||||
    bdrv_save_vmstate(opaque, buf, pos, size);
 | 
			
		||||
    return size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
 | 
			
		||||
static ssize_t block_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
 | 
			
		||||
                                size_t size)
 | 
			
		||||
{
 | 
			
		||||
    return bdrv_load_vmstate(opaque, buf, pos, size);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1442,7 +1442,7 @@ qemu_rdma_exchange_get_response_none(const char *desc, int type) "Surprise: got
 | 
			
		|||
qemu_rdma_exchange_send_issue_callback(void) ""
 | 
			
		||||
qemu_rdma_exchange_send_waiting(const char *desc) "Waiting for response %s"
 | 
			
		||||
qemu_rdma_exchange_send_received(const char *desc) "Response %s received."
 | 
			
		||||
qemu_rdma_fill(int64_t control_len, int size) "RDMA %" PRId64 " of %d bytes already in buffer"
 | 
			
		||||
qemu_rdma_fill(size_t control_len, size_t size) "RDMA %zd of %zd bytes already in buffer"
 | 
			
		||||
qemu_rdma_init_ram_blocks(int blocks) "Allocated %d local ram block structures"
 | 
			
		||||
qemu_rdma_poll_recv(const char *compstr, int64_t comp, int64_t id, int sent) "completion %s #%" PRId64 " received (%" PRId64 ") left %d"
 | 
			
		||||
qemu_rdma_poll_write(const char *compstr, int64_t comp, int left, uint64_t block, uint64_t chunk, void *local, void *remote) "completions %s (%" PRId64 ") left %d, block %" PRIu64 ", chunk: %" PRIu64 " %p %p"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue