From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36004) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZPrQT-0001qE-Jo for qemu-devel@nongnu.org; Thu, 13 Aug 2015 08:16:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZPrQQ-0008Qv-96 for qemu-devel@nongnu.org; Thu, 13 Aug 2015 08:16:05 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:28385) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZPrQP-0008P1-65 for qemu-devel@nongnu.org; Thu, 13 Aug 2015 08:16:02 -0400 References: <1439463094-5394-1-git-send-email-dgilbert@redhat.com> <1439463094-5394-5-git-send-email-dgilbert@redhat.com> From: zhanghailiang Message-ID: <55CC8A44.9010800@huawei.com> Date: Thu, 13 Aug 2015 20:15:00 +0800 MIME-Version: 1.0 In-Reply-To: <1439463094-5394-5-git-send-email-dgilbert@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 4/5] migration: size_t'ify some of qemu-file List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Dr. David Alan Gilbert (git)" , qemu-devel@nongnu.org Cc: amit.shah@redhat.com, peter.huangpeng@huawei.com, quintela@redhat.com On 2015/8/13 18:51, Dr. David Alan Gilbert (git) wrote: > From: "Dr. David Alan Gilbert" > > 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 > --- Reviewed-by: zhanghailiang > include/migration/qemu-file.h | 8 ++++---- > migration/qemu-file-buf.c | 7 ++++--- > migration/qemu-file-stdio.c | 11 ++++++----- > migration/qemu-file-unix.c | 6 ++++-- > migration/rdma.c | 13 +++++++------ > migration/savevm.c | 7 ++++--- > trace-events | 2 +- > 7 files changed, 30 insertions(+), 24 deletions(-) > > diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h > index ea49f33..e1e2bab 100644 > --- a/include/migration/qemu-file.h > +++ b/include/migration/qemu-file.h > @@ -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 > * > diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c > index 2de9330..1d9528e 100644 > --- a/migration/qemu-file-buf.c > +++ b/migration/qemu-file-buf.c > @@ -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; > > diff --git a/migration/qemu-file-stdio.c b/migration/qemu-file-stdio.c > index 285068b..dc91137 100644 > --- a/migration/qemu-file-stdio.c > +++ b/migration/qemu-file-stdio.c > @@ -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); > diff --git a/migration/qemu-file-unix.c b/migration/qemu-file-unix.c > index bfbc086..adfe91a 100644 > --- a/migration/qemu-file-unix.c > +++ b/migration/qemu-file-unix.c > @@ -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; > diff --git a/migration/rdma.c b/migration/rdma.c > index 74876fd..fd430c7 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -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; > diff --git a/migration/savevm.c b/migration/savevm.c > index 6071215..1bd8827 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -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); > } > diff --git a/trace-events b/trace-events > index 1509e5b..1e7d9b6 100644 > --- a/trace-events > +++ b/trace-events > @@ -1428,7 +1428,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" >