Bug 257 - ipc: rte_mp_request_sync return 0 on error.
Summary: ipc: rte_mp_request_sync return 0 on error.
Status: CONFIRMED
Alias: None
Product: DPDK
Classification: Unclassified
Component: core (show other bugs)
Version: 18.11
Hardware: All All
: Normal normal
Target Milestone: ---
Assignee: Anatoly Burakov
URL:
Depends on:
Blocks:
 
Reported: 2019-04-19 18:53 CEST by Herakliusz
Modified: 2019-05-01 06:06 CEST (History)
2 users (show)



Attachments

Description Herakliusz 2019-04-19 18:53:56 CEST
API can return success (0), but reply buffer might be invalid.

There are three code paths that can return a success, but have no (valid) message.
In case of two I think it should be a failure.
In rte_mp_request_sync there is a call to mp_request_sync which may return 0 with no message in case of:
- failure to send the message on behalf of remote
- the caller not caring about reply message. (this is probably fine)
This is then returned as 0 by rte_mp_request_sync (docs say that it will return 0 on success).
If IPC is disabled rte_mp_request_sync also return 0, but i think it should be a failure (it did not send anything, it did not received anything because operation is not supported).
Comment 1 Anatoly Burakov 2019-04-23 10:23:52 CEST
I'm not sure i follow.

If the remote end failed to send the message, nb_received would not be incremented, and it would obviously not be safe to attempt to read the message. That's why nb_received is there - to let the caller know how many buffers have actually arrived.

The function returning 0 when remote end has failed to send a response is intentional - it is not up to the API to decide whether this is an error condition (i.e. if the caller considers mismatch between nb_sent and nb_received to be an error).

Not sure about the "not supported" part - perhaps it indeed should return -1 and set rte_errno to ENOTSUP.

Note You need to log in before you can comment on or make changes to this bug.