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

Commit 6b5e2e74 authored by Andreas Schultz's avatar Andreas Schultz Committed by David S. Miller
Browse files

gtp: consolidate pdp context destruction into helper



Consolidate duplicate code into helper.

Signed-off-by: default avatarAndreas Schultz <aschultz@tpip.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d9e2dd12
Loading
Loading
Loading
Loading
+14 −10
Original line number Diff line number Diff line
@@ -86,6 +86,8 @@ struct gtp_net {

static u32 gtp_h_initval;

static void pdp_context_delete(struct pdp_ctx *pctx);

static inline u32 gtp0_hashfn(u64 tid)
{
	u32 *tid32 = (u32 *) &tid;
@@ -780,13 +782,10 @@ static void gtp_hashtable_free(struct gtp_dev *gtp)
	struct pdp_ctx *pctx;
	int i;

	for (i = 0; i < gtp->hash_size; i++) {
		hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid) {
			hlist_del_rcu(&pctx->hlist_tid);
			hlist_del_rcu(&pctx->hlist_addr);
			kfree_rcu(pctx, rcu_head);
		}
	}
	for (i = 0; i < gtp->hash_size; i++)
		hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid)
			pdp_context_delete(pctx);

	synchronize_rcu();
	kfree(gtp->addr_hash);
	kfree(gtp->tid_hash);
@@ -995,6 +994,13 @@ static int ipv4_pdp_add(struct gtp_dev *gtp, struct genl_info *info)
	return 0;
}

static void pdp_context_delete(struct pdp_ctx *pctx)
{
	hlist_del_rcu(&pctx->hlist_tid);
	hlist_del_rcu(&pctx->hlist_addr);
	kfree_rcu(pctx, rcu_head);
}

static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info)
{
	struct gtp_dev *gtp;
@@ -1100,9 +1106,7 @@ static int gtp_genl_del_pdp(struct sk_buff *skb, struct genl_info *info)
		netdev_dbg(pctx->dev, "GTPv1-U: deleting tunnel id = %x/%x (pdp %p)\n",
			   pctx->u.v1.i_tei, pctx->u.v1.o_tei, pctx);

	hlist_del_rcu(&pctx->hlist_tid);
	hlist_del_rcu(&pctx->hlist_addr);
	kfree_rcu(pctx, rcu_head);
	pdp_context_delete(pctx);

out_unlock:
	rcu_read_unlock();