git: d94ec7490d31 - main - rtsock: do not allocate mbufs_tags(9) just to store a 8-bit value
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 11 Aug 2022 16:20:11 UTC
The branch main has been updated by glebius:
URL: https://cgit.FreeBSD.org/src/commit/?id=d94ec7490d3182ef3ad0b572acf0feb9c0a6827f
commit d94ec7490d3182ef3ad0b572acf0feb9c0a6827f
Author: Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2022-08-11 16:19:36 +0000
Commit: Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2022-08-11 16:19:36 +0000
rtsock: do not allocate mbufs_tags(9) just to store a 8-bit value
Use local storage of the mbuf packet header instead.
Reviewed by: melifaro
Differential revision: https://reviews.freebsd.org/D36121
---
sys/net/rtsock.c | 33 ++++++++-------------------------
sys/sys/mbuf.h | 2 +-
2 files changed, 9 insertions(+), 26 deletions(-)
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index cbec7d351bd5..837491a3821b 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -154,6 +154,10 @@ int (*carp_get_vhid_p)(struct ifaddr *);
* notification to a socket bound to a particular FIB.
*/
#define RTS_FILTER_FIB M_PROTO8
+/*
+ * Used to store address family of the notification.
+ */
+#define m_rtsock_family m_pkthdr.PH_loc.eight[0]
typedef struct {
int ip_count; /* attached w/ AF_INET */
@@ -292,17 +296,9 @@ static void
rts_input(struct mbuf *m)
{
struct sockproto route_proto;
- unsigned short *family;
- struct m_tag *tag;
route_proto.sp_family = PF_ROUTE;
- tag = m_tag_find(m, PACKET_TAG_RTSOCKFAM, NULL);
- if (tag != NULL) {
- family = (unsigned short *)(tag + 1);
- route_proto.sp_protocol = *family;
- m_tag_delete(m, tag);
- } else
- route_proto.sp_protocol = 0;
+ route_proto.sp_protocol = m->m_rtsock_family;
raw_input_ext(m, &route_proto, &route_src, raw_input_rts_cb);
}
@@ -2183,23 +2179,10 @@ rt_ifannouncemsg(struct ifnet *ifp, int what)
static void
rt_dispatch(struct mbuf *m, sa_family_t saf)
{
- struct m_tag *tag;
- /*
- * Preserve the family from the sockaddr, if any, in an m_tag for
- * use when injecting the mbuf into the routing socket buffer from
- * the netisr.
- */
- if (saf != AF_UNSPEC) {
- tag = m_tag_get(PACKET_TAG_RTSOCKFAM, sizeof(unsigned short),
- M_NOWAIT);
- if (tag == NULL) {
- m_freem(m);
- return;
- }
- *(unsigned short *)(tag + 1) = saf;
- m_tag_prepend(m, tag);
- }
+ M_ASSERTPKTHDR(m);
+
+ m->m_rtsock_family = saf;
if (V_loif)
m->m_pkthdr.rcvif = V_loif;
else {
diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h
index 48ed63ef67b8..9e50a640eac0 100644
--- a/sys/sys/mbuf.h
+++ b/sys/sys/mbuf.h
@@ -1385,7 +1385,7 @@ extern bool mb_use_ext_pgs; /* Use ext_pgs for sendfile */
#define PACKET_TAG_IPFORWARD 18 /* ipforward info */
#define PACKET_TAG_MACLABEL (19 | MTAG_PERSISTENT) /* MAC label */
#define PACKET_TAG_PF 21 /* PF/ALTQ information */
-#define PACKET_TAG_RTSOCKFAM 25 /* rtsock sa family */
+/* was PACKET_TAG_RTSOCKFAM 25 rtsock sa family */
#define PACKET_TAG_IPOPTIONS 27 /* Saved IP options */
#define PACKET_TAG_CARP 28 /* CARP info */
#define PACKET_TAG_IPSEC_NAT_T_PORTS 29 /* two uint16_t */