Lines Matching full:req

66 static bool handshake_req_hash_add(struct handshake_req *req)  in handshake_req_hash_add()  argument
71 &req->hr_rhash, in handshake_req_hash_add()
76 static void handshake_req_destroy(struct handshake_req *req) in handshake_req_destroy() argument
78 if (req->hr_proto->hp_destroy) in handshake_req_destroy()
79 req->hr_proto->hp_destroy(req); in handshake_req_destroy()
80 rhashtable_remove_fast(&handshake_rhashtbl, &req->hr_rhash, in handshake_req_destroy()
82 kfree(req); in handshake_req_destroy()
88 struct handshake_req *req; in handshake_sk_destruct() local
90 req = handshake_req_hash_lookup(sk); in handshake_sk_destruct()
91 if (!req) in handshake_sk_destruct()
94 trace_handshake_destruct(sock_net(sk), req, sk); in handshake_sk_destruct()
95 sk_destruct = req->hr_odestruct; in handshake_sk_destruct()
96 handshake_req_destroy(req); in handshake_sk_destruct()
111 struct handshake_req *req; in handshake_req_alloc() local
122 req = kzalloc(struct_size(req, hr_priv, proto->hp_privsize), flags); in handshake_req_alloc()
123 if (!req) in handshake_req_alloc()
126 INIT_LIST_HEAD(&req->hr_list); in handshake_req_alloc()
127 req->hr_proto = proto; in handshake_req_alloc()
128 return req; in handshake_req_alloc()
134 * @req: handshake arguments
137 void *handshake_req_private(struct handshake_req *req) in handshake_req_private() argument
139 return (void *)&req->hr_priv; in handshake_req_private()
144 struct handshake_req *req) in __add_pending_locked() argument
146 if (WARN_ON_ONCE(!list_empty(&req->hr_list))) in __add_pending_locked()
149 list_add_tail(&req->hr_list, &hn->hn_requests); in __add_pending_locked()
154 struct handshake_req *req) in __remove_pending_locked() argument
157 list_del_init(&req->hr_list); in __remove_pending_locked()
164 * If @req was on a pending list, it has not yet been accepted.
166 static bool remove_pending(struct handshake_net *hn, struct handshake_req *req) in remove_pending() argument
171 if (!list_empty(&req->hr_list)) { in remove_pending()
172 __remove_pending_locked(hn, req); in remove_pending()
182 struct handshake_req *req, *pos; in handshake_req_next() local
184 req = NULL; in handshake_req_next()
190 req = pos; in handshake_req_next()
195 return req; in handshake_req_next()
202 * @req: handshake arguments
219 * no completion callback will be done and that @req has been
222 int handshake_req_submit(struct socket *sock, struct handshake_req *req, in handshake_req_submit() argument
229 if (!sock || !req || !sock->file) { in handshake_req_submit()
230 kfree(req); in handshake_req_submit()
234 req->hr_sk = sock->sk; in handshake_req_submit()
235 if (!req->hr_sk) { in handshake_req_submit()
236 kfree(req); in handshake_req_submit()
239 req->hr_odestruct = req->hr_sk->sk_destruct; in handshake_req_submit()
240 req->hr_sk->sk_destruct = handshake_sk_destruct; in handshake_req_submit()
243 net = sock_net(req->hr_sk); in handshake_req_submit()
257 if (!handshake_req_hash_add(req)) in handshake_req_submit()
259 if (!__add_pending_locked(hn, req)) in handshake_req_submit()
263 ret = handshake_genl_notify(net, req->hr_proto, flags); in handshake_req_submit()
265 trace_handshake_notify_err(net, req, req->hr_sk, ret); in handshake_req_submit()
266 if (remove_pending(hn, req)) in handshake_req_submit()
271 sock_hold(req->hr_sk); in handshake_req_submit()
273 trace_handshake_submit(net, req, req->hr_sk); in handshake_req_submit()
279 trace_handshake_submit_err(net, req, req->hr_sk, ret); in handshake_req_submit()
280 handshake_req_destroy(req); in handshake_req_submit()
285 void handshake_complete(struct handshake_req *req, unsigned int status, in handshake_complete() argument
288 struct sock *sk = req->hr_sk; in handshake_complete()
291 if (!test_and_set_bit(HANDSHAKE_F_REQ_COMPLETED, &req->hr_flags)) { in handshake_complete()
292 trace_handshake_complete(net, req, sk, status); in handshake_complete()
293 req->hr_proto->hp_done(req, status, info); in handshake_complete()
314 struct handshake_req *req; in handshake_req_cancel() local
319 req = handshake_req_hash_lookup(sk); in handshake_req_cancel()
320 if (!req) { in handshake_req_cancel()
321 trace_handshake_cancel_none(net, req, sk); in handshake_req_cancel()
326 if (hn && remove_pending(hn, req)) { in handshake_req_cancel()
330 if (test_and_set_bit(HANDSHAKE_F_REQ_COMPLETED, &req->hr_flags)) { in handshake_req_cancel()
332 trace_handshake_cancel_busy(net, req, sk); in handshake_req_cancel()
337 trace_handshake_cancel(net, req, sk); in handshake_req_cancel()