mirror of
https://github.com/openvswitch/ovs
synced 2025-09-03 15:55:19 +00:00
netlink: Make nl_sock_transact() discard reply if 'replyp' is null.
Sometimes only the success or failure return value is interesting, not the details of the reply, so this simplifies some callers.
This commit is contained in:
@@ -341,9 +341,12 @@ try_again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Sends 'request' to the kernel via 'sock' and waits for a response. If
|
/* Sends 'request' to the kernel via 'sock' and waits for a response. If
|
||||||
* successful, stores the reply into '*replyp' and returns 0. The caller is
|
* successful, returns 0. On failure, returns a positive errno value.
|
||||||
* responsible for destroying the reply with ofpbuf_delete(). On failure,
|
*
|
||||||
* returns a positive errno value and stores a null pointer into '*replyp'.
|
* If 'replyp' is nonnull, then on success '*replyp' is set to the kernel's
|
||||||
|
* reply, which the caller is responsible for freeing with ofpbuf_delete(), and
|
||||||
|
* on failure '*replyp' is set to NULL. If 'replyp' is null, then the kernel's
|
||||||
|
* reply, if any, is discarded.
|
||||||
*
|
*
|
||||||
* nlmsg_len in 'msg' will be finalized to match msg->size, and nlmsg_pid will
|
* nlmsg_len in 'msg' will be finalized to match msg->size, and nlmsg_pid will
|
||||||
* be set to 'sock''s pid, before the message is sent. NLM_F_ACK will be set
|
* be set to 'sock''s pid, before the message is sent. NLM_F_ACK will be set
|
||||||
@@ -386,7 +389,9 @@ nl_sock_transact(struct nl_sock *sock,
|
|||||||
struct ofpbuf *reply;
|
struct ofpbuf *reply;
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
*replyp = NULL;
|
if (replyp) {
|
||||||
|
*replyp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ensure that we get a reply even if this message doesn't ordinarily call
|
/* Ensure that we get a reply even if this message doesn't ordinarily call
|
||||||
* for one. */
|
* for one. */
|
||||||
@@ -425,7 +430,11 @@ recv:
|
|||||||
return retval != EAGAIN ? retval : EPROTO;
|
return retval != EAGAIN ? retval : EPROTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
*replyp = reply;
|
if (replyp) {
|
||||||
|
*replyp = reply;
|
||||||
|
} else {
|
||||||
|
ofpbuf_delete(reply);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -72,7 +72,7 @@ proc_net_compat_init(void)
|
|||||||
static int
|
static int
|
||||||
set_proc_file(const char *dir, const char *file, const char *data)
|
set_proc_file(const char *dir, const char *file, const char *data)
|
||||||
{
|
{
|
||||||
struct ofpbuf request, *reply;
|
struct ofpbuf request;
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
ofpbuf_init(&request, 0);
|
ofpbuf_init(&request, 0);
|
||||||
@@ -84,9 +84,8 @@ set_proc_file(const char *dir, const char *file, const char *data)
|
|||||||
nl_msg_put_string(&request, BRC_GENL_A_PROC_DATA, data);
|
nl_msg_put_string(&request, BRC_GENL_A_PROC_DATA, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = nl_sock_transact(brc_sock, &request, &reply);
|
retval = nl_sock_transact(brc_sock, &request, NULL);
|
||||||
ofpbuf_uninit(&request);
|
ofpbuf_uninit(&request);
|
||||||
ofpbuf_delete(reply);
|
|
||||||
if (retval) {
|
if (retval) {
|
||||||
VLOG_WARN_RL(&rl, "failed to %s /proc/%s/%s (%s)",
|
VLOG_WARN_RL(&rl, "failed to %s /proc/%s/%s (%s)",
|
||||||
data ? "update" : "remove", dir, file, strerror(retval));
|
data ? "update" : "remove", dir, file, strerror(retval));
|
||||||
|
Reference in New Issue
Block a user