|
@@ -80,7 +80,8 @@ static inline struct sock *req_to_sk(struct request_sock *req)
|
|
|
}
|
|
|
|
|
|
static inline struct request_sock *
|
|
|
-reqsk_alloc(const struct request_sock_ops *ops, struct sock *sk_listener)
|
|
|
+reqsk_alloc(const struct request_sock_ops *ops, struct sock *sk_listener,
|
|
|
+ bool attach_listener)
|
|
|
{
|
|
|
struct request_sock *req;
|
|
|
|
|
@@ -88,8 +89,12 @@ reqsk_alloc(const struct request_sock_ops *ops, struct sock *sk_listener)
|
|
|
|
|
|
if (req) {
|
|
|
req->rsk_ops = ops;
|
|
|
- sock_hold(sk_listener);
|
|
|
- req->rsk_listener = sk_listener;
|
|
|
+ if (attach_listener) {
|
|
|
+ sock_hold(sk_listener);
|
|
|
+ req->rsk_listener = sk_listener;
|
|
|
+ } else {
|
|
|
+ req->rsk_listener = NULL;
|
|
|
+ }
|
|
|
req_to_sk(req)->sk_prot = sk_listener->sk_prot;
|
|
|
sk_node_init(&req_to_sk(req)->sk_node);
|
|
|
sk_tx_queue_clear(req_to_sk(req));
|