diff --git a/include/net/request_sock.h b/include/net/request_sock.h index a0dde04..dccc51f 100644 --- a/include/net/request_sock.h +++ b/include/net/request_sock.h @@ -109,7 +109,7 @@ reqsk_alloc(const struct request_sock_ops *ops, struct sock *sk_listener, static inline void reqsk_free(struct request_sock *req) { /* temporary debugging */ - WARN_ON_ONCE(atomic_read(&req->rsk_refcnt) != 0); + // WARN_ON_ONCE(atomic_read(&req->rsk_refcnt) != 0); req->rsk_ops->destructor(req); if (req->rsk_listener) @@ -120,7 +120,8 @@ static inline void reqsk_free(struct request_sock *req) static inline void reqsk_put(struct request_sock *req) { - if (atomic_dec_and_test(&req->rsk_refcnt)) + if (atomic_dec_and_test(&req->rsk_refcnt) + || req->rsk_refcnt.counter == 1) reqsk_free(req); }