gtp: consolidate pdp context destruction into helper
authorAndreas Schultz <aschultz@tpip.net>
Thu, 9 Mar 2017 16:43:01 +0000 (17:43 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 Mar 2017 20:04:31 +0000 (13:04 -0700)
Consolidate duplicate code into helper.

Signed-off-by: Andreas Schultz <aschultz@tpip.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/gtp.c

index bf4b352e06c4b51634fe0d850a31118d6c48a861..d58f46fd766ae90d98326c035516b2f005c522ba 100644 (file)
@@ -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();