diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /net/core/request_sock.c | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'net/core/request_sock.c')
| -rw-r--r-- | net/core/request_sock.c | 8 | 
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);  		}  |