You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
net: filter: move filter accounting to filter core
This patch basically does two things, i) removes the extern keyword
from the include/linux/filter.h file to be more consistent with the
rest of Joe's changes, and ii) moves filter accounting into the filter
core framework.
Filter accounting mainly done through sk_filter_{un,}charge() take
care of the case when sockets are being cloned through sk_clone_lock()
so that removal of the filter on one socket won't result in eviction
as it's still referenced by the other.
These functions actually belong to net/core/filter.c and not
include/net/sock.h as we want to keep all that in a central place.
It's also not in fast-path so uninlining them is fine and even allows
us to get rd of sk_filter_release_rcu()'s EXPORT_SYMBOL and a forward
declaration.
Joint work with Alexei Starovoitov.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Cc: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a3ea269b8b
commit
fbc907f0b1
@@ -1621,33 +1621,6 @@ void sk_common_release(struct sock *sk);
|
||||
/* Initialise core socket variables */
|
||||
void sock_init_data(struct socket *sock, struct sock *sk);
|
||||
|
||||
void sk_filter_release_rcu(struct rcu_head *rcu);
|
||||
|
||||
/**
|
||||
* sk_filter_release - release a socket filter
|
||||
* @fp: filter to remove
|
||||
*
|
||||
* Remove a filter from a socket and release its resources.
|
||||
*/
|
||||
|
||||
static inline void sk_filter_release(struct sk_filter *fp)
|
||||
{
|
||||
if (atomic_dec_and_test(&fp->refcnt))
|
||||
call_rcu(&fp->rcu, sk_filter_release_rcu);
|
||||
}
|
||||
|
||||
static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
|
||||
{
|
||||
atomic_sub(sk_filter_size(fp->len), &sk->sk_omem_alloc);
|
||||
sk_filter_release(fp);
|
||||
}
|
||||
|
||||
static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
|
||||
{
|
||||
atomic_inc(&fp->refcnt);
|
||||
atomic_add(sk_filter_size(fp->len), &sk->sk_omem_alloc);
|
||||
}
|
||||
|
||||
/*
|
||||
* Socket reference counting postulates.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user