aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/sock.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/sock.h')
-rw-r--r--include/net/sock.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/net/sock.h b/include/net/sock.h
index adab9dc58183..6892a5e89c23 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1155,6 +1155,8 @@ extern void sk_common_release(struct sock *sk);
1155/* Initialise core socket variables */ 1155/* Initialise core socket variables */
1156extern void sock_init_data(struct socket *sock, struct sock *sk); 1156extern void sock_init_data(struct socket *sock, struct sock *sk);
1157 1157
1158extern void sk_filter_release_rcu(struct rcu_head *rcu);
1159
1158/** 1160/**
1159 * sk_filter_release - release a socket filter 1161 * sk_filter_release - release a socket filter
1160 * @fp: filter to remove 1162 * @fp: filter to remove
@@ -1165,7 +1167,7 @@ extern void sock_init_data(struct socket *sock, struct sock *sk);
1165static inline void sk_filter_release(struct sk_filter *fp) 1167static inline void sk_filter_release(struct sk_filter *fp)
1166{ 1168{
1167 if (atomic_dec_and_test(&fp->refcnt)) 1169 if (atomic_dec_and_test(&fp->refcnt))
1168 kfree(fp); 1170 call_rcu_bh(&fp->rcu, sk_filter_release_rcu);
1169} 1171}
1170 1172
1171static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp) 1173static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)