|
@@ -922,14 +922,18 @@ static inline void sk_filter_rcu_free(struct rcu_head *rcu)
|
|
|
* Remove a filter from a socket and release its resources.
|
|
|
*/
|
|
|
|
|
|
-static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)
|
|
|
+static inline void sk_filter_release(struct sk_filter *fp)
|
|
|
+{
|
|
|
+ if (atomic_dec_and_test(&fp->refcnt))
|
|
|
+ call_rcu_bh(&fp->rcu, sk_filter_rcu_free);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
|
|
|
{
|
|
|
unsigned int size = sk_filter_len(fp);
|
|
|
|
|
|
atomic_sub(size, &sk->sk_omem_alloc);
|
|
|
-
|
|
|
- if (atomic_dec_and_test(&fp->refcnt))
|
|
|
- call_rcu_bh(&fp->rcu, sk_filter_rcu_free);
|
|
|
+ sk_filter_release(fp);
|
|
|
}
|
|
|
|
|
|
static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
|