|
@@ -577,21 +577,22 @@ EXPORT_SYMBOL(inet_rtx_syn_ack);
|
|
static bool reqsk_queue_unlink(struct request_sock_queue *queue,
|
|
static bool reqsk_queue_unlink(struct request_sock_queue *queue,
|
|
struct request_sock *req)
|
|
struct request_sock *req)
|
|
{
|
|
{
|
|
- struct listen_sock *lopt = queue->listen_opt;
|
|
|
|
struct request_sock **prev;
|
|
struct request_sock **prev;
|
|
|
|
+ struct listen_sock *lopt;
|
|
bool found = false;
|
|
bool found = false;
|
|
|
|
|
|
spin_lock(&queue->syn_wait_lock);
|
|
spin_lock(&queue->syn_wait_lock);
|
|
-
|
|
|
|
- for (prev = &lopt->syn_table[req->rsk_hash]; *prev != NULL;
|
|
|
|
- prev = &(*prev)->dl_next) {
|
|
|
|
- if (*prev == req) {
|
|
|
|
- *prev = req->dl_next;
|
|
|
|
- found = true;
|
|
|
|
- break;
|
|
|
|
|
|
+ lopt = queue->listen_opt;
|
|
|
|
+ if (lopt) {
|
|
|
|
+ for (prev = &lopt->syn_table[req->rsk_hash]; *prev != NULL;
|
|
|
|
+ prev = &(*prev)->dl_next) {
|
|
|
|
+ if (*prev == req) {
|
|
|
|
+ *prev = req->dl_next;
|
|
|
|
+ found = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
spin_unlock(&queue->syn_wait_lock);
|
|
spin_unlock(&queue->syn_wait_lock);
|
|
if (timer_pending(&req->rsk_timer) && del_timer_sync(&req->rsk_timer))
|
|
if (timer_pending(&req->rsk_timer) && del_timer_sync(&req->rsk_timer))
|
|
reqsk_put(req);
|
|
reqsk_put(req);
|