Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75a9e21c authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "net: qrtr: Use radix_tree_iter_delete"

parents d38c3e9e 34c09bf4
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -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);
@@ -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);

@@ -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;
@@ -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)
@@ -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) {