Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Aug 2012 17:48:55 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r239661 - projects/pf/head/sys/contrib/pf/net
Message-ID:  <201208241748.q7OHmtbu079156@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Fri Aug 24 17:48:55 2012
New Revision: 239661
URL: http://svn.freebsd.org/changeset/base/239661

Log:
  Since r238421 caused so much pain, restore the UMA
  initialization for the key zone, but make it ctor
  method rather then init method. This doesn't provide
  any optimisation, but just reduces code duplication.

Modified:
  projects/pf/head/sys/contrib/pf/net/if_pfsync.c
  projects/pf/head/sys/contrib/pf/net/pf.c

Modified: projects/pf/head/sys/contrib/pf/net/if_pfsync.c
==============================================================================
--- projects/pf/head/sys/contrib/pf/net/if_pfsync.c	Fri Aug 24 17:48:15 2012	(r239660)
+++ projects/pf/head/sys/contrib/pf/net/if_pfsync.c	Fri Aug 24 17:48:55 2012	(r239661)
@@ -460,23 +460,18 @@ pfsync_state_import(struct pfsync_state 
 	if ((st = uma_zalloc(V_pf_state_z, M_NOWAIT | M_ZERO)) == NULL)
 		goto cleanup;
 
-	if ((skw = uma_zalloc(V_pf_state_key_z, M_NOWAIT | M_ZERO)) == NULL)
+	if ((skw = uma_zalloc(V_pf_state_key_z, M_NOWAIT)) == NULL)
 		goto cleanup;
 
-	TAILQ_INIT(&skw->states[PF_SK_WIRE]);
-	TAILQ_INIT(&skw->states[PF_SK_STACK]);
-
 	if (PF_ANEQ(&sp->key[PF_SK_WIRE].addr[0],
 	    &sp->key[PF_SK_STACK].addr[0], sp->af) ||
 	    PF_ANEQ(&sp->key[PF_SK_WIRE].addr[1],
 	    &sp->key[PF_SK_STACK].addr[1], sp->af) ||
 	    sp->key[PF_SK_WIRE].port[0] != sp->key[PF_SK_STACK].port[0] ||
 	    sp->key[PF_SK_WIRE].port[1] != sp->key[PF_SK_STACK].port[1]) {
-		sks = uma_zalloc(V_pf_state_key_z, M_NOWAIT | M_ZERO);
+		sks = uma_zalloc(V_pf_state_key_z, M_NOWAIT);
 		if (sks == NULL)
 			goto cleanup;
-		TAILQ_INIT(&sks->states[PF_SK_WIRE]);
-		TAILQ_INIT(&sks->states[PF_SK_STACK]);
 	} else
 		sks = skw;
 

Modified: projects/pf/head/sys/contrib/pf/net/pf.c
==============================================================================
--- projects/pf/head/sys/contrib/pf/net/pf.c	Fri Aug 24 17:48:15 2012	(r239660)
+++ projects/pf/head/sys/contrib/pf/net/pf.c	Fri Aug 24 17:48:55 2012	(r239661)
@@ -259,6 +259,7 @@ static void		 pf_detach_state(struct pf_
 static int		 pf_state_key_attach(struct pf_state_key *,
 			    struct pf_state_key *, struct pf_state *);
 static void		 pf_state_key_detach(struct pf_state *, int);
+static int		 pf_state_key_ctor(void *, int, void *, int);
 static u_int32_t	 pf_tcp_iss(struct pf_pdesc *);
 static int		 pf_test_rule(struct pf_rule **, struct pf_state **,
 			    int, struct pfi_kif *, struct mbuf *, int,
@@ -739,7 +740,7 @@ pf_initialize()
         uma_zone_set_max(V_pf_state_z, PFSTATE_HIWAT);
 
 	V_pf_state_key_z = uma_zcreate("pf state keys",
-	    sizeof(struct pf_state_key), NULL, NULL, NULL, NULL,
+	    sizeof(struct pf_state_key), pf_state_key_ctor, NULL, NULL, NULL,
 	    UMA_ALIGN_PTR, 0);
 	V_pf_keyhash = malloc(V_pf_hashsize * sizeof(struct pf_keyhash),
 	    M_PFHASH, M_WAITOK | M_ZERO);
@@ -1042,13 +1043,25 @@ pf_state_key_detach(struct pf_state *s, 
 	}
 }
 
+static int
+pf_state_key_ctor(void *mem, int size, void *arg, int flags)
+{
+	struct pf_state_key *sk = mem;
+
+	bzero(sk, sizeof(struct pf_state_key_cmp));
+	TAILQ_INIT(&sk->states[PF_SK_WIRE]);
+	TAILQ_INIT(&sk->states[PF_SK_STACK]);
+
+	return (0);
+}
+
 struct pf_state_key *
 pf_state_key_setup(struct pf_pdesc *pd, struct pf_addr *saddr,
 	struct pf_addr *daddr, u_int16_t sport, u_int16_t dport)
 {
 	struct pf_state_key *sk;
 
-	sk = uma_zalloc(V_pf_state_key_z, M_ZERO | M_NOWAIT);
+	sk = uma_zalloc(V_pf_state_key_z, M_NOWAIT);
 	if (sk == NULL)
 		return (NULL);
 
@@ -1059,9 +1072,6 @@ pf_state_key_setup(struct pf_pdesc *pd, 
 	sk->proto = pd->proto;
 	sk->af = pd->af;
 
-	TAILQ_INIT(&sk->states[PF_SK_WIRE]);
-	TAILQ_INIT(&sk->states[PF_SK_STACK]);
-
 	return (sk);
 }
 
@@ -1076,9 +1086,6 @@ pf_state_key_clone(struct pf_state_key *
 
 	bcopy(orig, sk, sizeof(struct pf_state_key_cmp));
 
-	TAILQ_INIT(&sk->states[PF_SK_WIRE]);
-	TAILQ_INIT(&sk->states[PF_SK_STACK]);
-
 	return (sk);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208241748.q7OHmtbu079156>