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

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
...@@ -86,6 +86,8 @@ struct gtp_net { ...@@ -86,6 +86,8 @@ struct gtp_net {
static u32 gtp_h_initval; static u32 gtp_h_initval;
static void pdp_context_delete(struct pdp_ctx *pctx);
static inline u32 gtp0_hashfn(u64 tid) static inline u32 gtp0_hashfn(u64 tid)
{ {
u32 *tid32 = (u32 *) &tid; u32 *tid32 = (u32 *) &tid;
...@@ -780,13 +782,10 @@ static void gtp_hashtable_free(struct gtp_dev *gtp) ...@@ -780,13 +782,10 @@ static void gtp_hashtable_free(struct gtp_dev *gtp)
struct pdp_ctx *pctx; struct pdp_ctx *pctx;
int i; int i;
for (i = 0; i < gtp->hash_size; i++) { for (i = 0; i < gtp->hash_size; i++)
hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid) { hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid)
hlist_del_rcu(&pctx->hlist_tid); pdp_context_delete(pctx);
hlist_del_rcu(&pctx->hlist_addr);
kfree_rcu(pctx, rcu_head);
}
}
synchronize_rcu(); synchronize_rcu();
kfree(gtp->addr_hash); kfree(gtp->addr_hash);
kfree(gtp->tid_hash); kfree(gtp->tid_hash);
...@@ -995,6 +994,13 @@ static int ipv4_pdp_add(struct gtp_dev *gtp, struct genl_info *info) ...@@ -995,6 +994,13 @@ static int ipv4_pdp_add(struct gtp_dev *gtp, struct genl_info *info)
return 0; 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) static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info)
{ {
struct gtp_dev *gtp; struct gtp_dev *gtp;
...@@ -1100,9 +1106,7 @@ static int gtp_genl_del_pdp(struct sk_buff *skb, struct genl_info *info) ...@@ -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", 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); pctx->u.v1.i_tei, pctx->u.v1.o_tei, pctx);
hlist_del_rcu(&pctx->hlist_tid); pdp_context_delete(pctx);
hlist_del_rcu(&pctx->hlist_addr);
kfree_rcu(pctx, rcu_head);
out_unlock: out_unlock:
rcu_read_unlock(); rcu_read_unlock();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment