Page MenuHomeFreeBSD

D57807.diff
No OneTemporary

D57807.diff

diff --git a/sys/netlink/netlink_domain.c b/sys/netlink/netlink_domain.c
--- a/sys/netlink/netlink_domain.c
+++ b/sys/netlink/netlink_domain.c
@@ -691,6 +691,25 @@
if (__predict_false(error))
return (error);
+ if (__predict_false(nlp->nl_dropped_bytes > 0)) {
+ NLP_LOCK(nlp);
+ uint64_t dropped_bytes = nlp->nl_dropped_bytes;
+ uint64_t dropped_messages = nlp->nl_dropped_messages;
+ nlp->nl_dropped_bytes = 0;
+ nlp->nl_dropped_messages = 0;
+ NLP_UNLOCK(nlp);
+
+ if (dropped_bytes > 0) {
+ NLP_LOG(LOG_DEBUG, nlp,
+ "socket RX overflowed, %lu messages (%lu bytes) dropped. "
+ "bytes: [%u/%u]", dropped_messages, dropped_bytes,
+ sb->sb_ccc, sb->sb_hiwat);
+ /* TODO: Send NLMSG_OVERRUN notification here */
+ SOCK_IO_RECV_UNLOCK(so);
+ return (ENOBUFS);
+ }
+ }
+
len = 0;
overflow = 0;
msgrcv = 0;
@@ -823,7 +842,9 @@
SOCK_IO_RECV_UNLOCK(so);
- nl_on_transmit(sotonlpcb(so));
+ NLP_LOCK(nlp);
+ nl_schedule_taskqueue(nlp);
+ NLP_UNLOCK(nlp);
return (error);
}
diff --git a/sys/netlink/netlink_io.c b/sys/netlink/netlink_io.c
--- a/sys/netlink/netlink_io.c
+++ b/sys/netlink/netlink_io.c
@@ -154,33 +154,6 @@
;
}
-/*
- * Called after some data have been read from the socket.
- */
-void
-nl_on_transmit(struct nlpcb *nlp)
-{
- NLP_LOCK(nlp);
-
- struct socket *so = nlp->nl_socket;
- if (__predict_false(nlp->nl_dropped_bytes > 0 && so != NULL)) {
- unsigned long dropped_bytes = nlp->nl_dropped_bytes;
- unsigned long dropped_messages = nlp->nl_dropped_messages;
- nlp->nl_dropped_bytes = 0;
- nlp->nl_dropped_messages = 0;
-
- struct sockbuf *sb = &so->so_rcv;
- NLP_LOG(LOG_DEBUG, nlp,
- "socket RX overflowed, %lu messages (%lu bytes) dropped. "
- "bytes: [%u/%u]", dropped_messages, dropped_bytes,
- sb->sb_ccc, sb->sb_hiwat);
- /* TODO: send netlink message */
- }
-
- nl_schedule_taskqueue(nlp);
- NLP_UNLOCK(nlp);
-}
-
void
nl_taskqueue_handler(void *_arg, int pending)
{
diff --git a/sys/netlink/netlink_var.h b/sys/netlink/netlink_var.h
--- a/sys/netlink/netlink_var.h
+++ b/sys/netlink/netlink_var.h
@@ -130,7 +130,6 @@
bool nl_send(struct nl_writer *, struct nlpcb *);
void nlmsg_ack(struct nlpcb *nlp, int error, struct nlmsghdr *nlmsg,
struct nl_pstate *npt);
-void nl_on_transmit(struct nlpcb *nlp);
void nl_taskqueue_handler(void *_arg, int pending);
void nl_schedule_taskqueue(struct nlpcb *nlp);

File Metadata

Mime Type
text/plain
Expires
Mon, Jun 29, 5:57 AM (12 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34452825
Default Alt Text
D57807.diff (2 KB)

Event Timeline