Skip to content

Commit e673965

Browse files
j-c-hNipaLocal
authored andcommitted
l2tp: improve tunnel/session refcount helpers
l2tp_tunnel_inc_refcount and l2tp_session_inc_refcount wrap refcount_inc. They add no value so just use the refcount APIs directly and drop l2tp's helpers. l2tp already uses refcount_inc_not_zero anyway. Rename l2tp_tunnel_dec_refcount and l2tp_session_dec_refcount to l2tp_tunnel_put and l2tp_session_put to better match their use pairing various _get getters. Signed-off-by: James Chapman <jchapman@katalix.com> Signed-off-by: Tom Parkin <tparkin@katalix.com> Signed-off-by: NipaLocal <nipa@local>
1 parent e097297 commit e673965

File tree

8 files changed

+79
-93
lines changed

8 files changed

+79
-93
lines changed

net/l2tp/l2tp_core.c

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ static void l2tp_session_free(struct l2tp_session *session)
165165
{
166166
trace_free_session(session);
167167
if (session->tunnel)
168-
l2tp_tunnel_dec_refcount(session->tunnel);
168+
l2tp_tunnel_put(session->tunnel);
169169
kfree_rcu(session, rcu);
170170
}
171171

@@ -192,31 +192,19 @@ struct l2tp_tunnel *l2tp_sk_to_tunnel(const struct sock *sk)
192192
}
193193
EXPORT_SYMBOL_GPL(l2tp_sk_to_tunnel);
194194

195-
void l2tp_tunnel_inc_refcount(struct l2tp_tunnel *tunnel)
196-
{
197-
refcount_inc(&tunnel->ref_count);
198-
}
199-
EXPORT_SYMBOL_GPL(l2tp_tunnel_inc_refcount);
200-
201-
void l2tp_tunnel_dec_refcount(struct l2tp_tunnel *tunnel)
195+
void l2tp_tunnel_put(struct l2tp_tunnel *tunnel)
202196
{
203197
if (refcount_dec_and_test(&tunnel->ref_count))
204198
l2tp_tunnel_free(tunnel);
205199
}
206-
EXPORT_SYMBOL_GPL(l2tp_tunnel_dec_refcount);
207-
208-
void l2tp_session_inc_refcount(struct l2tp_session *session)
209-
{
210-
refcount_inc(&session->ref_count);
211-
}
212-
EXPORT_SYMBOL_GPL(l2tp_session_inc_refcount);
200+
EXPORT_SYMBOL_GPL(l2tp_tunnel_put);
213201

214-
void l2tp_session_dec_refcount(struct l2tp_session *session)
202+
void l2tp_session_put(struct l2tp_session *session)
215203
{
216204
if (refcount_dec_and_test(&session->ref_count))
217205
l2tp_session_free(session);
218206
}
219-
EXPORT_SYMBOL_GPL(l2tp_session_dec_refcount);
207+
EXPORT_SYMBOL_GPL(l2tp_session_put);
220208

221209
/* Lookup a tunnel. A new reference is held on the returned tunnel. */
222210
struct l2tp_tunnel *l2tp_tunnel_get(const struct net *net, u32 tunnel_id)
@@ -445,7 +433,7 @@ struct l2tp_session *l2tp_session_get_by_ifname(const struct net *net,
445433
if (tunnel) {
446434
list_for_each_entry_rcu(session, &tunnel->session_list, list) {
447435
if (!strcmp(session->ifname, ifname)) {
448-
l2tp_session_inc_refcount(session);
436+
refcount_inc(&session->ref_count);
449437
rcu_read_unlock_bh();
450438

451439
return session;
@@ -462,7 +450,7 @@ EXPORT_SYMBOL_GPL(l2tp_session_get_by_ifname);
462450
static void l2tp_session_coll_list_add(struct l2tp_session_coll_list *clist,
463451
struct l2tp_session *session)
464452
{
465-
l2tp_session_inc_refcount(session);
453+
refcount_inc(&session->ref_count);
466454
WARN_ON_ONCE(session->coll_list);
467455
session->coll_list = clist;
468456
spin_lock(&clist->lock);
@@ -548,7 +536,7 @@ static void l2tp_session_collision_del(struct l2tp_net *pn,
548536
spin_unlock(&clist->lock);
549537
if (refcount_dec_and_test(&clist->ref_count))
550538
kfree(clist);
551-
l2tp_session_dec_refcount(session);
539+
l2tp_session_put(session);
552540
}
553541
}
554542

@@ -597,7 +585,7 @@ int l2tp_session_register(struct l2tp_session *session,
597585
goto out;
598586
}
599587

600-
l2tp_tunnel_inc_refcount(tunnel);
588+
refcount_inc(&tunnel->ref_count);
601589
WRITE_ONCE(session->tunnel, tunnel);
602590
list_add_rcu(&session->list, &tunnel->session_list);
603591

@@ -1080,7 +1068,7 @@ int l2tp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
10801068

10811069
if (!session || !session->recv_skb) {
10821070
if (session)
1083-
l2tp_session_dec_refcount(session);
1071+
l2tp_session_put(session);
10841072

10851073
/* Not found? Pass to userspace to deal with */
10861074
goto pass;
@@ -1094,12 +1082,12 @@ int l2tp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
10941082

10951083
if (version == L2TP_HDR_VER_3 &&
10961084
l2tp_v3_ensure_opt_in_linear(session, skb, &ptr, &optr)) {
1097-
l2tp_session_dec_refcount(session);
1085+
l2tp_session_put(session);
10981086
goto invalid;
10991087
}
11001088

11011089
l2tp_recv_common(session, skb, ptr, optr, hdrflags, length);
1102-
l2tp_session_dec_refcount(session);
1090+
l2tp_session_put(session);
11031091

11041092
return 0;
11051093

@@ -1393,7 +1381,7 @@ static void l2tp_udp_encap_destroy(struct sock *sk)
13931381
tunnel = l2tp_sk_to_tunnel(sk);
13941382
if (tunnel) {
13951383
l2tp_tunnel_delete(tunnel);
1396-
l2tp_tunnel_dec_refcount(tunnel);
1384+
l2tp_tunnel_put(tunnel);
13971385
}
13981386
}
13991387

@@ -1428,10 +1416,10 @@ static void l2tp_tunnel_del_work(struct work_struct *work)
14281416

14291417
l2tp_tunnel_remove(tunnel->l2tp_net, tunnel);
14301418
/* drop initial ref */
1431-
l2tp_tunnel_dec_refcount(tunnel);
1419+
l2tp_tunnel_put(tunnel);
14321420

14331421
/* drop workqueue ref */
1434-
l2tp_tunnel_dec_refcount(tunnel);
1422+
l2tp_tunnel_put(tunnel);
14351423
}
14361424

14371425
/* Create a socket for the tunnel, if one isn't set up by
@@ -1619,7 +1607,7 @@ static int l2tp_validate_socket(const struct sock *sk, const struct net *net,
16191607

16201608
tunnel = l2tp_sk_to_tunnel(sk);
16211609
if (tunnel) {
1622-
l2tp_tunnel_dec_refcount(tunnel);
1610+
l2tp_tunnel_put(tunnel);
16231611
return -EBUSY;
16241612
}
16251613

@@ -1711,7 +1699,7 @@ void l2tp_tunnel_delete(struct l2tp_tunnel *tunnel)
17111699
{
17121700
if (!test_and_set_bit(0, &tunnel->dead)) {
17131701
trace_delete_tunnel(tunnel);
1714-
l2tp_tunnel_inc_refcount(tunnel);
1702+
refcount_inc(&tunnel->ref_count);
17151703
queue_work(l2tp_wq, &tunnel->del_work);
17161704
}
17171705
}
@@ -1721,7 +1709,7 @@ void l2tp_session_delete(struct l2tp_session *session)
17211709
{
17221710
if (!test_and_set_bit(0, &session->dead)) {
17231711
trace_delete_session(session);
1724-
l2tp_session_inc_refcount(session);
1712+
refcount_inc(&session->ref_count);
17251713
queue_work(l2tp_wq, &session->del_work);
17261714
}
17271715
}
@@ -1739,10 +1727,10 @@ static void l2tp_session_del_work(struct work_struct *work)
17391727
(*session->session_close)(session);
17401728

17411729
/* drop initial ref */
1742-
l2tp_session_dec_refcount(session);
1730+
l2tp_session_put(session);
17431731

17441732
/* drop workqueue ref */
1745-
l2tp_session_dec_refcount(session);
1733+
l2tp_session_put(session);
17461734
}
17471735

17481736
/* We come here whenever a session's send_seq, cookie_len or

net/l2tp/l2tp_core.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,8 @@ static inline void *l2tp_session_priv(struct l2tp_session *session)
209209
}
210210

211211
/* Tunnel and session refcounts */
212-
void l2tp_tunnel_inc_refcount(struct l2tp_tunnel *tunnel);
213-
void l2tp_tunnel_dec_refcount(struct l2tp_tunnel *tunnel);
214-
void l2tp_session_inc_refcount(struct l2tp_session *session);
215-
void l2tp_session_dec_refcount(struct l2tp_session *session);
212+
void l2tp_tunnel_put(struct l2tp_tunnel *tunnel);
213+
void l2tp_session_put(struct l2tp_session *session);
216214

217215
/* Tunnel and session lookup.
218216
* These functions take a reference on the instances they return, so

net/l2tp/l2tp_debugfs.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ static void l2tp_dfs_next_tunnel(struct l2tp_dfs_seq_data *pd)
4444
{
4545
/* Drop reference taken during previous invocation */
4646
if (pd->tunnel)
47-
l2tp_tunnel_dec_refcount(pd->tunnel);
47+
l2tp_tunnel_put(pd->tunnel);
4848

4949
pd->tunnel = l2tp_tunnel_get_next(pd->net, &pd->tkey);
5050
pd->tkey++;
@@ -54,7 +54,7 @@ static void l2tp_dfs_next_session(struct l2tp_dfs_seq_data *pd)
5454
{
5555
/* Drop reference taken during previous invocation */
5656
if (pd->session)
57-
l2tp_session_dec_refcount(pd->session);
57+
l2tp_session_put(pd->session);
5858

5959
pd->session = l2tp_session_get_next(pd->net, pd->tunnel->sock,
6060
pd->tunnel->version,
@@ -111,11 +111,11 @@ static void l2tp_dfs_seq_stop(struct seq_file *p, void *v)
111111
* or l2tp_dfs_next_tunnel().
112112
*/
113113
if (pd->session) {
114-
l2tp_session_dec_refcount(pd->session);
114+
l2tp_session_put(pd->session);
115115
pd->session = NULL;
116116
}
117117
if (pd->tunnel) {
118-
l2tp_tunnel_dec_refcount(pd->tunnel);
118+
l2tp_tunnel_put(pd->tunnel);
119119
pd->tunnel = NULL;
120120
}
121121
}

net/l2tp/l2tp_eth.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ static int l2tp_eth_create(struct net *net, struct l2tp_tunnel *tunnel,
283283

284284
spriv = l2tp_session_priv(session);
285285

286-
l2tp_session_inc_refcount(session);
286+
refcount_inc(&session->ref_count);
287287

288288
rtnl_lock();
289289

@@ -301,7 +301,7 @@ static int l2tp_eth_create(struct net *net, struct l2tp_tunnel *tunnel,
301301
if (rc < 0) {
302302
rtnl_unlock();
303303
l2tp_session_delete(session);
304-
l2tp_session_dec_refcount(session);
304+
l2tp_session_put(session);
305305
free_netdev(dev);
306306

307307
return rc;
@@ -312,17 +312,17 @@ static int l2tp_eth_create(struct net *net, struct l2tp_tunnel *tunnel,
312312

313313
rtnl_unlock();
314314

315-
l2tp_session_dec_refcount(session);
315+
l2tp_session_put(session);
316316

317317
__module_get(THIS_MODULE);
318318

319319
return 0;
320320

321321
err_sess_dev:
322-
l2tp_session_dec_refcount(session);
322+
l2tp_session_put(session);
323323
free_netdev(dev);
324324
err_sess:
325-
l2tp_session_dec_refcount(session);
325+
l2tp_session_put(session);
326326
err:
327327
return rc;
328328
}

net/l2tp/l2tp_ip.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ static int l2tp_ip_recv(struct sk_buff *skb)
167167
goto discard_sess;
168168

169169
l2tp_recv_common(session, skb, ptr, optr, 0, skb->len);
170-
l2tp_session_dec_refcount(session);
170+
l2tp_session_put(session);
171171

172172
return 0;
173173

@@ -200,7 +200,7 @@ static int l2tp_ip_recv(struct sk_buff *skb)
200200
return sk_receive_skb(sk, skb, 1);
201201

202202
discard_sess:
203-
l2tp_session_dec_refcount(session);
203+
l2tp_session_put(session);
204204
goto discard;
205205

206206
discard_put:
@@ -265,7 +265,7 @@ static void l2tp_ip_destroy_sock(struct sock *sk)
265265
tunnel = l2tp_sk_to_tunnel(sk);
266266
if (tunnel) {
267267
l2tp_tunnel_delete(tunnel);
268-
l2tp_tunnel_dec_refcount(tunnel);
268+
l2tp_tunnel_put(tunnel);
269269
}
270270
}
271271

net/l2tp/l2tp_ip6.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ static int l2tp_ip6_recv(struct sk_buff *skb)
177177
goto discard_sess;
178178

179179
l2tp_recv_common(session, skb, ptr, optr, 0, skb->len);
180-
l2tp_session_dec_refcount(session);
180+
l2tp_session_put(session);
181181

182182
return 0;
183183

@@ -210,7 +210,7 @@ static int l2tp_ip6_recv(struct sk_buff *skb)
210210
return sk_receive_skb(sk, skb, 1);
211211

212212
discard_sess:
213-
l2tp_session_dec_refcount(session);
213+
l2tp_session_put(session);
214214
goto discard;
215215

216216
discard_put:
@@ -276,7 +276,7 @@ static void l2tp_ip6_destroy_sock(struct sock *sk)
276276
tunnel = l2tp_sk_to_tunnel(sk);
277277
if (tunnel) {
278278
l2tp_tunnel_delete(tunnel);
279-
l2tp_tunnel_dec_refcount(tunnel);
279+
l2tp_tunnel_put(tunnel);
280280
}
281281
}
282282

0 commit comments

Comments
 (0)