@@ -2040,9 +2040,8 @@ static int qemu_rdma_exchange_recv(RDMAContext *rdma, RDMAControlHeader *head,
*/
static int qemu_rdma_write_one(QEMUFile *f, RDMAContext *rdma,
int current_index, uint64_t current_addr,
- uint64_t length)
+ uint64_t length, Error **errp)
{
- Error *err = NULL;
struct ibv_sge sge;
struct ibv_send_wr send_wr = { 0 };
struct ibv_send_wr *bad_wr;
@@ -2096,7 +2095,7 @@ retry:
ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE, NULL);
if (ret < 0) {
- error_report("Failed to Wait for previous write to complete "
+ error_setg(errp, "Failed to Wait for previous write to complete "
"block %d chunk %" PRIu64
" current %" PRIu64 " len %" PRIu64 " %d",
current_index, chunk, sge.addr, length, rdma->nb_sent);
@@ -2128,10 +2127,9 @@ retry:
compress_to_network(rdma, &comp);
ret = qemu_rdma_exchange_send(rdma, &head,
- (uint8_t *) &comp, NULL, NULL, NULL, &err);
+ (uint8_t *) &comp, NULL, NULL, NULL, errp);
if (ret < 0) {
- error_report_err(err);
return -1;
}
@@ -2157,9 +2155,8 @@ retry:
register_to_network(rdma, ®);
ret = qemu_rdma_exchange_send(rdma, &head, (uint8_t *) ®,
- &resp, ®_result_idx, NULL, &err);
+ &resp, ®_result_idx, NULL, errp);
if (ret < 0) {
- error_report_err(err);
return -1;
}
@@ -2167,7 +2164,7 @@ retry:
if (qemu_rdma_register_and_get_keys(rdma, block, sge.addr,
&sge.lkey, NULL, chunk,
chunk_start, chunk_end)) {
- error_report("cannot get lkey");
+ error_setg(errp, "cannot get lkey");
return -1;
}
@@ -2186,7 +2183,7 @@ retry:
if (qemu_rdma_register_and_get_keys(rdma, block, sge.addr,
&sge.lkey, NULL, chunk,
chunk_start, chunk_end)) {
- error_report("cannot get lkey!");
+ error_setg(errp, "cannot get lkey!");
return -1;
}
}
@@ -2198,7 +2195,7 @@ retry:
if (qemu_rdma_register_and_get_keys(rdma, block, sge.addr,
&sge.lkey, NULL, chunk,
chunk_start, chunk_end)) {
- error_report("cannot get lkey!");
+ error_setg(errp, "cannot get lkey!");
return -1;
}
}
@@ -2232,7 +2229,7 @@ retry:
trace_qemu_rdma_write_one_queue_full();
ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_RDMA_WRITE, NULL);
if (ret < 0) {
- error_report("rdma migration: failed to make "
+ error_setg(errp, "rdma migration: failed to make "
"room in full send queue!");
return -1;
}
@@ -2240,12 +2237,8 @@ retry:
goto retry;
} else if (ret > 0) {
- /*
- * FIXME perror() is problematic, because whether
- * ibv_post_send() sets errno is unclear. Will go away later
- * in this series.
- */
- perror("rdma migration: post rdma write failed");
+ error_setg_errno(errp, ret,
+ "rdma migration: post rdma write failed");
return -1;
}
@@ -2274,10 +2267,10 @@ static int qemu_rdma_write_flush(QEMUFile *f, RDMAContext *rdma,
}
ret = qemu_rdma_write_one(f, rdma,
- rdma->current_index, rdma->current_addr, rdma->current_length);
+ rdma->current_index, rdma->current_addr, rdma->current_length,
+ errp);
if (ret < 0) {
- error_setg(errp, "FIXME temporary error message");
return -1;
}