Lines Matching refs:psock

131 static void sock_map_add_link(struct sk_psock *psock,  in sock_map_add_link()  argument
137 spin_lock_bh(&psock->link_lock); in sock_map_add_link()
138 list_add_tail(&link->list, &psock->link); in sock_map_add_link()
139 spin_unlock_bh(&psock->link_lock); in sock_map_add_link()
143 struct sk_psock *psock, void *link_raw) in sock_map_del_link() argument
148 spin_lock_bh(&psock->link_lock); in sock_map_del_link()
149 list_for_each_entry_safe(link, tmp, &psock->link, list) { in sock_map_del_link()
154 if (psock->saved_data_ready && progs->stream_parser) in sock_map_del_link()
156 if (psock->saved_data_ready && progs->stream_verdict) in sock_map_del_link()
158 if (psock->saved_data_ready && progs->skb_verdict) in sock_map_del_link()
165 spin_unlock_bh(&psock->link_lock); in sock_map_del_link()
169 sk_psock_stop_strp(sk, psock); in sock_map_del_link()
171 sk_psock_stop_verdict(sk, psock); in sock_map_del_link()
173 if (psock->psock_update_sk_prot) in sock_map_del_link()
174 psock->psock_update_sk_prot(sk, psock, false); in sock_map_del_link()
181 struct sk_psock *psock = sk_psock(sk); in sock_map_unref() local
183 if (likely(psock)) { in sock_map_unref()
184 sock_map_del_link(sk, psock, link_raw); in sock_map_unref()
185 sk_psock_put(sk, psock); in sock_map_unref()
189 static int sock_map_init_proto(struct sock *sk, struct sk_psock *psock) in sock_map_init_proto() argument
193 psock->psock_update_sk_prot = sk->sk_prot->psock_update_sk_prot; in sock_map_init_proto()
194 return sk->sk_prot->psock_update_sk_prot(sk, psock, false); in sock_map_init_proto()
199 struct sk_psock *psock; in sock_map_psock_get_checked() local
202 psock = sk_psock(sk); in sock_map_psock_get_checked()
203 if (psock) { in sock_map_psock_get_checked()
205 psock = ERR_PTR(-EBUSY); in sock_map_psock_get_checked()
209 if (!refcount_inc_not_zero(&psock->refcnt)) in sock_map_psock_get_checked()
210 psock = ERR_PTR(-EBUSY); in sock_map_psock_get_checked()
214 return psock; in sock_map_psock_get_checked()
224 struct sk_psock *psock; in sock_map_link() local
261 psock = sock_map_psock_get_checked(sk); in sock_map_link()
262 if (IS_ERR(psock)) { in sock_map_link()
263 ret = PTR_ERR(psock); in sock_map_link()
267 if (psock) { in sock_map_link()
268 if ((msg_parser && READ_ONCE(psock->progs.msg_parser)) || in sock_map_link()
269 (stream_parser && READ_ONCE(psock->progs.stream_parser)) || in sock_map_link()
270 (skb_verdict && READ_ONCE(psock->progs.skb_verdict)) || in sock_map_link()
271 (skb_verdict && READ_ONCE(psock->progs.stream_verdict)) || in sock_map_link()
272 (stream_verdict && READ_ONCE(psock->progs.skb_verdict)) || in sock_map_link()
273 (stream_verdict && READ_ONCE(psock->progs.stream_verdict))) { in sock_map_link()
274 sk_psock_put(sk, psock); in sock_map_link()
279 psock = sk_psock_init(sk, map->numa_node); in sock_map_link()
280 if (IS_ERR(psock)) { in sock_map_link()
281 ret = PTR_ERR(psock); in sock_map_link()
287 psock_set_prog(&psock->progs.msg_parser, msg_parser); in sock_map_link()
289 psock_set_prog(&psock->progs.stream_parser, stream_parser); in sock_map_link()
291 psock_set_prog(&psock->progs.stream_verdict, stream_verdict); in sock_map_link()
293 psock_set_prog(&psock->progs.skb_verdict, skb_verdict); in sock_map_link()
298 ret = sock_map_init_proto(sk, psock); in sock_map_link()
300 sk_psock_put(sk, psock); in sock_map_link()
305 if (stream_parser && stream_verdict && !psock->saved_data_ready) { in sock_map_link()
307 ret = sk_psock_init_strp(sk, psock); in sock_map_link()
312 sk_psock_put(sk, psock); in sock_map_link()
315 sk_psock_start_strp(sk, psock); in sock_map_link()
316 } else if (!stream_parser && stream_verdict && !psock->saved_data_ready) { in sock_map_link()
317 sk_psock_start_verdict(sk,psock); in sock_map_link()
318 } else if (!stream_verdict && skb_verdict && !psock->saved_data_ready) { in sock_map_link()
319 sk_psock_start_verdict(sk, psock); in sock_map_link()
475 struct sk_psock *psock; in sock_map_update_common() local
493 psock = sk_psock(sk); in sock_map_update_common()
494 WARN_ON_ONCE(!psock); in sock_map_update_common()
506 sock_map_add_link(psock, link, map, &stab->sks[idx]); in sock_map_update_common()
514 if (psock) in sock_map_update_common()
515 sk_psock_put(sk, psock); in sock_map_update_common()
999 struct sk_psock *psock; in sock_hash_update_common() local
1014 psock = sk_psock(sk); in sock_hash_update_common()
1015 WARN_ON_ONCE(!psock); in sock_hash_update_common()
1036 sock_map_add_link(psock, link, map, elem_new); in sock_hash_update_common()
1050 sk_psock_put(sk, psock); in sock_hash_update_common()
1618 static void sock_map_remove_links(struct sock *sk, struct sk_psock *psock) in sock_map_remove_links() argument
1622 while ((link = sk_psock_link_pop(psock))) { in sock_map_remove_links()
1631 struct sk_psock *psock; in sock_map_unhash() local
1634 psock = sk_psock(sk); in sock_map_unhash()
1635 if (unlikely(!psock)) { in sock_map_unhash()
1639 saved_unhash = psock->saved_unhash; in sock_map_unhash()
1640 sock_map_remove_links(sk, psock); in sock_map_unhash()
1653 struct sk_psock *psock; in sock_map_destroy() local
1656 psock = sk_psock_get(sk); in sock_map_destroy()
1657 if (unlikely(!psock)) { in sock_map_destroy()
1661 saved_destroy = psock->saved_destroy; in sock_map_destroy()
1662 sock_map_remove_links(sk, psock); in sock_map_destroy()
1664 sk_psock_stop(psock); in sock_map_destroy()
1665 sk_psock_put(sk, psock); in sock_map_destroy()
1677 struct sk_psock *psock; in sock_map_close() local
1681 psock = sk_psock(sk); in sock_map_close()
1682 if (likely(psock)) { in sock_map_close()
1683 saved_close = psock->saved_close; in sock_map_close()
1684 sock_map_remove_links(sk, psock); in sock_map_close()
1685 psock = sk_psock_get(sk); in sock_map_close()
1686 if (unlikely(!psock)) in sock_map_close()
1689 sk_psock_stop(psock); in sock_map_close()
1691 cancel_delayed_work_sync(&psock->work); in sock_map_close()
1692 sk_psock_put(sk, psock); in sock_map_close()