Release reader lock on r/w sem before stopping khidp thread (which needs to claim the writer lock on sem before unlinking the session). NB: kthread_stop waits for thread completion. --- net/bluetooth/hidp/core.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index c405a95..16d75d7 100644 --- a/net/bluetooth/hidp/core.c +++ b/net/bluetooth/hidp/core.c @@ -1096,6 +1096,7 @@ int hidp_del_connection(struct hidp_conndel_req *req) { struct hidp_session *session; int err = 0; + bool stop_thread = false; BT_DBG(""); @@ -1111,12 +1112,14 @@ int hidp_del_connection(struct hidp_conndel_req *req) skb_queue_purge(&session->ctrl_transmit); skb_queue_purge(&session->intr_transmit); - kthread_stop(session->task); + stop_thread = true; } } else err = -ENOENT; up_read(&hidp_session_sem); + if (stop_thread) + kthread_stop(session->task); return err; } -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html