Loading net/qrtr/qrtr.c +8 −8 Original line number Diff line number Diff line Loading @@ -341,7 +341,8 @@ static void __qrtr_node_release(struct kref *kref) if (node->nid != QRTR_EP_NID_AUTO) { radix_tree_for_each_slot(slot, &qrtr_nodes, &iter, 0) { if (node == *slot) radix_tree_delete(&qrtr_nodes, iter.index); radix_tree_iter_delete(&qrtr_nodes, &iter, slot); } } spin_unlock_irqrestore(&qrtr_nodes_lock, flags); Loading Loading @@ -412,11 +413,13 @@ static void qrtr_tx_resume(struct qrtr_node *node, struct sk_buff *skb) src.sq_port = le32_to_cpu(pkt.client.port); key = (u64)src.sq_node << 32 | src.sq_port; mutex_lock(&node->qrtr_tx_lock); flow = radix_tree_lookup(&node->qrtr_tx_flow, key); if (!flow) if (!flow) { mutex_unlock(&node->qrtr_tx_lock); return; } mutex_lock(&node->qrtr_tx_lock); atomic_set(&flow->pending, 0); wake_up_interruptible_all(&node->resume_tx); Loading Loading @@ -879,13 +882,11 @@ static bool qrtr_must_forward(struct qrtr_node *src, return false; } static void qrtr_fwd_ctrl_pkt(struct sk_buff *skb) static void qrtr_fwd_ctrl_pkt(struct qrtr_node *src, struct sk_buff *skb) { struct qrtr_node *node; struct qrtr_node *src; struct qrtr_cb *cb = (struct qrtr_cb *)skb->cb; src = qrtr_node_lookup(cb->src_node); down_read(&qrtr_epts_lock); list_for_each_entry(node, &qrtr_all_epts, item) { struct sockaddr_qrtr from; Loading @@ -910,7 +911,6 @@ static void qrtr_fwd_ctrl_pkt(struct sk_buff *skb) qrtr_node_enqueue(node, skbn, cb->type, &from, &to, 0); } up_read(&qrtr_epts_lock); qrtr_node_release(src); } static void qrtr_fwd_pkt(struct sk_buff *skb, struct qrtr_cb *cb) Loading Loading @@ -970,7 +970,7 @@ static void qrtr_node_rx_work(struct kthread_work *work) struct qrtr_sock *ipc; if (cb->type != QRTR_TYPE_DATA) qrtr_fwd_ctrl_pkt(skb); qrtr_fwd_ctrl_pkt(node, skb); if (cb->type == QRTR_TYPE_RESUME_TX) { if (cb->dst_node != qrtr_local_nid) { Loading Loading
net/qrtr/qrtr.c +8 −8 Original line number Diff line number Diff line Loading @@ -341,7 +341,8 @@ static void __qrtr_node_release(struct kref *kref) if (node->nid != QRTR_EP_NID_AUTO) { radix_tree_for_each_slot(slot, &qrtr_nodes, &iter, 0) { if (node == *slot) radix_tree_delete(&qrtr_nodes, iter.index); radix_tree_iter_delete(&qrtr_nodes, &iter, slot); } } spin_unlock_irqrestore(&qrtr_nodes_lock, flags); Loading Loading @@ -412,11 +413,13 @@ static void qrtr_tx_resume(struct qrtr_node *node, struct sk_buff *skb) src.sq_port = le32_to_cpu(pkt.client.port); key = (u64)src.sq_node << 32 | src.sq_port; mutex_lock(&node->qrtr_tx_lock); flow = radix_tree_lookup(&node->qrtr_tx_flow, key); if (!flow) if (!flow) { mutex_unlock(&node->qrtr_tx_lock); return; } mutex_lock(&node->qrtr_tx_lock); atomic_set(&flow->pending, 0); wake_up_interruptible_all(&node->resume_tx); Loading Loading @@ -879,13 +882,11 @@ static bool qrtr_must_forward(struct qrtr_node *src, return false; } static void qrtr_fwd_ctrl_pkt(struct sk_buff *skb) static void qrtr_fwd_ctrl_pkt(struct qrtr_node *src, struct sk_buff *skb) { struct qrtr_node *node; struct qrtr_node *src; struct qrtr_cb *cb = (struct qrtr_cb *)skb->cb; src = qrtr_node_lookup(cb->src_node); down_read(&qrtr_epts_lock); list_for_each_entry(node, &qrtr_all_epts, item) { struct sockaddr_qrtr from; Loading @@ -910,7 +911,6 @@ static void qrtr_fwd_ctrl_pkt(struct sk_buff *skb) qrtr_node_enqueue(node, skbn, cb->type, &from, &to, 0); } up_read(&qrtr_epts_lock); qrtr_node_release(src); } static void qrtr_fwd_pkt(struct sk_buff *skb, struct qrtr_cb *cb) Loading Loading @@ -970,7 +970,7 @@ static void qrtr_node_rx_work(struct kthread_work *work) struct qrtr_sock *ipc; if (cb->type != QRTR_TYPE_DATA) qrtr_fwd_ctrl_pkt(skb); qrtr_fwd_ctrl_pkt(node, skb); if (cb->type == QRTR_TYPE_RESUME_TX) { if (cb->dst_node != qrtr_local_nid) { Loading