aboutsummaryrefslogtreecommitdiff
path: root/net/core/request_sock.c
diff options
context:
space:
mode:
authorGary S. Robertson <gary.robertson@linaro.org>2015-11-18 16:00:23 -0600
committerGary S. Robertson <gary.robertson@linaro.org>2015-11-18 16:00:23 -0600
commitfe7e08f8621d68222f1c65599d8c8d10f0cf5164 (patch)
tree78b986dce0ca910245ec379c9725033b0b25fddd /net/core/request_sock.c
parent701f68f192e35dfc22c6a456c8a60fb4e9ff7d02 (diff)
parent53c3c13396c2a8ee4fd9e83141b3e2b22223e590 (diff)
Merge tag 'lsk-v4.1-15.10' of http://git.linaro.org/kernel/linux-linaro-stable into linux-linaro-lng-v4.1linux-lng-4.1.10-2015.11
LSK 15.10 v4.1 Signed-off-by: Gary S. Robertson <gary.robertson@linaro.org> Conflicts: linaro/configs/linaro-base.conf
Diffstat (limited to 'net/core/request_sock.c')
-rw-r--r--net/core/request_sock.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/core/request_sock.c b/net/core/request_sock.c
index 87b22c0bc08c..b42f0e26f89e 100644
--- a/net/core/request_sock.c
+++ b/net/core/request_sock.c
@@ -103,10 +103,16 @@ void reqsk_queue_destroy(struct request_sock_queue *queue)
spin_lock_bh(&queue->syn_wait_lock);
while ((req = lopt->syn_table[i]) != NULL) {
lopt->syn_table[i] = req->dl_next;
+ /* Because of following del_timer_sync(),
+ * we must release the spinlock here
+ * or risk a dead lock.
+ */
+ spin_unlock_bh(&queue->syn_wait_lock);
atomic_inc(&lopt->qlen_dec);
- if (del_timer(&req->rsk_timer))
+ if (del_timer_sync(&req->rsk_timer))
reqsk_put(req);
reqsk_put(req);
+ spin_lock_bh(&queue->syn_wait_lock);
}
spin_unlock_bh(&queue->syn_wait_lock);
}