Blame view
net/rxrpc/skbuff.c
2.67 KB
17926a793 [AF_RXRPC]: Provi... |
1 2 3 4 5 6 7 8 9 10 |
/* ar-skbuff.c: socket buffer destruction handling * * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ |
9b6d53985 rxrpc: Use pr_<le... |
11 |
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
17926a793 [AF_RXRPC]: Provi... |
12 13 14 15 16 17 |
#include <linux/module.h> #include <linux/net.h> #include <linux/skbuff.h> #include <net/sock.h> #include <net/af_rxrpc.h> #include "ar-internal.h" |
71f3ca408 rxrpc: Improve sk... |
18 |
#define select_skb_count(op) (op >= rxrpc_skb_tx_cleaned ? &rxrpc_n_tx_skbs : &rxrpc_n_rx_skbs) |
17926a793 [AF_RXRPC]: Provi... |
19 |
/* |
71f3ca408 rxrpc: Improve sk... |
20 |
* Note the allocation or reception of a socket buffer. |
df844fd46 rxrpc: Use a trac... |
21 |
*/ |
71f3ca408 rxrpc: Improve sk... |
22 |
void rxrpc_new_skb(struct sk_buff *skb, enum rxrpc_skb_trace op) |
df844fd46 rxrpc: Use a trac... |
23 24 |
{ const void *here = __builtin_return_address(0); |
71f3ca408 rxrpc: Improve sk... |
25 |
int n = atomic_inc_return(select_skb_count(op)); |
633547973 net: convert sk_b... |
26 |
trace_rxrpc_skb(skb, op, refcount_read(&skb->users), n, here); |
df844fd46 rxrpc: Use a trac... |
27 28 29 30 31 |
} /* * Note the re-emergence of a socket buffer from a queue or buffer. */ |
71f3ca408 rxrpc: Improve sk... |
32 |
void rxrpc_see_skb(struct sk_buff *skb, enum rxrpc_skb_trace op) |
df844fd46 rxrpc: Use a trac... |
33 34 35 |
{ const void *here = __builtin_return_address(0); if (skb) { |
71f3ca408 rxrpc: Improve sk... |
36 |
int n = atomic_read(select_skb_count(op)); |
633547973 net: convert sk_b... |
37 |
trace_rxrpc_skb(skb, op, refcount_read(&skb->users), n, here); |
df844fd46 rxrpc: Use a trac... |
38 39 40 41 42 43 |
} } /* * Note the addition of a ref on a socket buffer. */ |
71f3ca408 rxrpc: Improve sk... |
44 |
void rxrpc_get_skb(struct sk_buff *skb, enum rxrpc_skb_trace op) |
df844fd46 rxrpc: Use a trac... |
45 46 |
{ const void *here = __builtin_return_address(0); |
71f3ca408 rxrpc: Improve sk... |
47 |
int n = atomic_inc_return(select_skb_count(op)); |
633547973 net: convert sk_b... |
48 |
trace_rxrpc_skb(skb, op, refcount_read(&skb->users), n, here); |
df844fd46 rxrpc: Use a trac... |
49 50 51 52 53 54 |
skb_get(skb); } /* * Note the destruction of a socket buffer. */ |
71f3ca408 rxrpc: Improve sk... |
55 |
void rxrpc_free_skb(struct sk_buff *skb, enum rxrpc_skb_trace op) |
df844fd46 rxrpc: Use a trac... |
56 57 58 59 60 |
{ const void *here = __builtin_return_address(0); if (skb) { int n; CHECK_SLAB_OKAY(&skb->users); |
71f3ca408 rxrpc: Improve sk... |
61 |
n = atomic_dec_return(select_skb_count(op)); |
633547973 net: convert sk_b... |
62 |
trace_rxrpc_skb(skb, op, refcount_read(&skb->users), n, here); |
df844fd46 rxrpc: Use a trac... |
63 64 65 66 67 |
kfree_skb(skb); } } /* |
71f3ca408 rxrpc: Improve sk... |
68 69 70 71 72 73 74 75 |
* Note the injected loss of a socket buffer. */ void rxrpc_lose_skb(struct sk_buff *skb, enum rxrpc_skb_trace op) { const void *here = __builtin_return_address(0); if (skb) { int n; CHECK_SLAB_OKAY(&skb->users); |
a1767077b rxrpc: Make Tx lo... |
76 |
n = atomic_dec_return(select_skb_count(op)); |
633547973 net: convert sk_b... |
77 |
trace_rxrpc_skb(skb, op, refcount_read(&skb->users), n, here); |
a1767077b rxrpc: Make Tx lo... |
78 |
kfree_skb(skb); |
71f3ca408 rxrpc: Improve sk... |
79 80 81 82 |
} } /* |
df844fd46 rxrpc: Use a trac... |
83 84 85 86 87 88 89 |
* Clear a queue of socket buffers. */ void rxrpc_purge_queue(struct sk_buff_head *list) { const void *here = __builtin_return_address(0); struct sk_buff *skb; while ((skb = skb_dequeue((list))) != NULL) { |
71f3ca408 rxrpc: Improve sk... |
90 91 |
int n = atomic_dec_return(select_skb_count(rxrpc_skb_rx_purged)); trace_rxrpc_skb(skb, rxrpc_skb_rx_purged, |
633547973 net: convert sk_b... |
92 |
refcount_read(&skb->users), n, here); |
df844fd46 rxrpc: Use a trac... |
93 94 95 |
kfree_skb(skb); } } |