migration/rdma: Fix save_page method to fail on polling error

qemu_rdma_save_page() reports polling error with error_report(), then
succeeds anyway.  This is because the variable holding the polling
status *shadows* the variable the function returns.  The latter
remains zero.

Broken since day one, and duplicated more recently.

Fixes: 2da776db48 (rdma: core logic)
Fixes: b390afd8c5 (migration/rdma: Fix out of order wrid)
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>
Message-ID: <20230921121312.1301864-2-armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2023-09-21 14:13:06 +02:00
parent 36e9aab3c5
commit bbde656263
1 changed files with 4 additions and 2 deletions

View File

@ -3282,7 +3282,8 @@ static size_t qemu_rdma_save_page(QEMUFile *f,
*/ */
while (1) { while (1) {
uint64_t wr_id, wr_id_in; uint64_t wr_id, wr_id_in;
int ret = qemu_rdma_poll(rdma, rdma->recv_cq, &wr_id_in, NULL); ret = qemu_rdma_poll(rdma, rdma->recv_cq, &wr_id_in, NULL);
if (ret < 0) { if (ret < 0) {
error_report("rdma migration: polling error! %d", ret); error_report("rdma migration: polling error! %d", ret);
goto err; goto err;
@ -3297,7 +3298,8 @@ static size_t qemu_rdma_save_page(QEMUFile *f,
while (1) { while (1) {
uint64_t wr_id, wr_id_in; uint64_t wr_id, wr_id_in;
int ret = qemu_rdma_poll(rdma, rdma->send_cq, &wr_id_in, NULL); ret = qemu_rdma_poll(rdma, rdma->send_cq, &wr_id_in, NULL);
if (ret < 0) { if (ret < 0) {
error_report("rdma migration: polling error! %d", ret); error_report("rdma migration: polling error! %d", ret);
goto err; goto err;