svn commit: r239661 - projects/pf/head/sys/contrib/pf/net
Gleb Smirnoff
glebius at FreeBSD.org
Fri Aug 24 17:48:55 UTC 2012
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);
}
More information about the svn-src-projects
mailing list