migration/rdma: fix return value for qio_channel_rdma_{readv,writev}
upon errors. As the documentation in include/io/channel.h states, only -1 and QIO_CHANNEL_ERR_BLOCK should be returned upon error. Other values have the potential to confuse the call sites. error_setg is used rather than error_setg_errno, because there are certain code paths where -1 (as a non-errno) is propagated up (e.g. starting from qemu_rdma_block_for_wrid or qemu_rdma_post_recv_control) all the way to qio_channel_rdma_{readv,writev}. Similar to a216ec85b7 ("migration/channel-block: fix return value for qio_channel_block_{readv,writev}"). Suggested-by: Zhang Chen <chen.zhang@intel.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
db18dee7d7
commit
74ecf6ac2b
@ -2785,7 +2785,8 @@ static ssize_t qio_channel_rdma_writev(QIOChannel *ioc,
|
|||||||
rdma = qatomic_rcu_read(&rioc->rdmaout);
|
rdma = qatomic_rcu_read(&rioc->rdmaout);
|
||||||
|
|
||||||
if (!rdma) {
|
if (!rdma) {
|
||||||
return -EIO;
|
error_setg(errp, "RDMA control channel output is not set");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_ERROR_STATE();
|
CHECK_ERROR_STATE();
|
||||||
@ -2797,7 +2798,8 @@ static ssize_t qio_channel_rdma_writev(QIOChannel *ioc,
|
|||||||
ret = qemu_rdma_write_flush(f, rdma);
|
ret = qemu_rdma_write_flush(f, rdma);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
rdma->error_state = ret;
|
rdma->error_state = ret;
|
||||||
return ret;
|
error_setg(errp, "qemu_rdma_write_flush returned %d", ret);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < niov; i++) {
|
for (i = 0; i < niov; i++) {
|
||||||
@ -2816,7 +2818,8 @@ static ssize_t qio_channel_rdma_writev(QIOChannel *ioc,
|
|||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
rdma->error_state = ret;
|
rdma->error_state = ret;
|
||||||
return ret;
|
error_setg(errp, "qemu_rdma_exchange_send returned %d", ret);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
data += len;
|
data += len;
|
||||||
@ -2867,7 +2870,8 @@ static ssize_t qio_channel_rdma_readv(QIOChannel *ioc,
|
|||||||
rdma = qatomic_rcu_read(&rioc->rdmain);
|
rdma = qatomic_rcu_read(&rioc->rdmain);
|
||||||
|
|
||||||
if (!rdma) {
|
if (!rdma) {
|
||||||
return -EIO;
|
error_setg(errp, "RDMA control channel input is not set");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_ERROR_STATE();
|
CHECK_ERROR_STATE();
|
||||||
@ -2903,7 +2907,8 @@ static ssize_t qio_channel_rdma_readv(QIOChannel *ioc,
|
|||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
rdma->error_state = ret;
|
rdma->error_state = ret;
|
||||||
return ret;
|
error_setg(errp, "qemu_rdma_exchange_recv returned %d", ret);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user