Lines Matching refs:psock

132 static void sock_map_add_link(struct sk_psock *psock,  in sock_map_add_link()  argument
138 spin_lock_bh(&psock->link_lock); in sock_map_add_link()
139 list_add_tail(&link->list, &psock->link); in sock_map_add_link()
140 spin_unlock_bh(&psock->link_lock); in sock_map_add_link()
144 struct sk_psock *psock, void *link_raw) in sock_map_del_link() argument
149 spin_lock_bh(&psock->link_lock); in sock_map_del_link()
150 list_for_each_entry_safe(link, tmp, &psock->link, list) { in sock_map_del_link()
155 if (psock->saved_data_ready && stab->progs.stream_parser) in sock_map_del_link()
157 if (psock->saved_data_ready && stab->progs.stream_verdict) in sock_map_del_link()
159 if (psock->saved_data_ready && stab->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()
295 ret = sock_map_init_proto(sk, psock); in sock_map_link()
300 if (stream_parser && stream_verdict && !psock->saved_data_ready) { in sock_map_link()
301 ret = sk_psock_init_strp(sk, psock); in sock_map_link()
304 sk_psock_start_strp(sk, psock); in sock_map_link()
305 } else if (!stream_parser && stream_verdict && !psock->saved_data_ready) { in sock_map_link()
306 sk_psock_start_verdict(sk,psock); in sock_map_link()
307 } else if (!stream_verdict && skb_verdict && !psock->saved_data_ready) { in sock_map_link()
308 sk_psock_start_verdict(sk, psock); in sock_map_link()
315 sk_psock_put(sk, psock); in sock_map_link()
466 struct sk_psock *psock; in sock_map_update_common() local
484 psock = sk_psock(sk); in sock_map_update_common()
485 WARN_ON_ONCE(!psock); in sock_map_update_common()
497 sock_map_add_link(psock, link, map, &stab->sks[idx]); in sock_map_update_common()
505 if (psock) in sock_map_update_common()
506 sk_psock_put(sk, psock); in sock_map_update_common()
962 struct sk_psock *psock; in sock_hash_update_common() local
977 psock = sk_psock(sk); in sock_hash_update_common()
978 WARN_ON_ONCE(!psock); in sock_hash_update_common()
999 sock_map_add_link(psock, link, map, elem_new); in sock_hash_update_common()
1013 sk_psock_put(sk, psock); in sock_hash_update_common()
1467 static void sock_map_remove_links(struct sock *sk, struct sk_psock *psock) in sock_map_remove_links() argument
1471 while ((link = sk_psock_link_pop(psock))) { in sock_map_remove_links()
1480 struct sk_psock *psock; in sock_map_unhash() local
1483 psock = sk_psock(sk); in sock_map_unhash()
1484 if (unlikely(!psock)) { in sock_map_unhash()
1491 saved_unhash = psock->saved_unhash; in sock_map_unhash()
1492 sock_map_remove_links(sk, psock); in sock_map_unhash()
1501 struct sk_psock *psock; in sock_map_close() local
1505 psock = sk_psock_get(sk); in sock_map_close()
1506 if (unlikely(!psock)) { in sock_map_close()
1512 saved_close = psock->saved_close; in sock_map_close()
1513 sock_map_remove_links(sk, psock); in sock_map_close()
1515 sk_psock_stop(psock, true); in sock_map_close()
1516 sk_psock_put(sk, psock); in sock_map_close()