diff options
author | Pavel Emelianov <xemul@openvz.org> | 2007-07-09 16:15:14 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-07-11 01:18:49 -0400 |
commit | 60f0438a87cfd9f5faa439ca419497cd64e4c59e (patch) | |
tree | 8ab1a0bbe0ad19eafe3418dc0f3991d870b501c7 /net | |
parent | 9af97186fcc9a1d9bbf195eb4bc2399d0dd66223 (diff) |
[NET]: Make some network-related proc files use seq_list_xxx helpers
This includes /proc/net/protocols, /proc/net/rxrpc_calls and
/proc/net/rxrpc_connections files.
All three need seq_list_start_head to show some header.
Signed-off-by: Pavel Emelianov <xemul@openvz.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/sock.c | 39 | ||||
-rw-r--r-- | net/rxrpc/ar-proc.c | 48 |
2 files changed, 10 insertions, 77 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index c14ce0198d25..252d21a1bb04 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -1851,46 +1851,15 @@ void proto_unregister(struct proto *prot) | |||
1851 | EXPORT_SYMBOL(proto_unregister); | 1851 | EXPORT_SYMBOL(proto_unregister); |
1852 | 1852 | ||
1853 | #ifdef CONFIG_PROC_FS | 1853 | #ifdef CONFIG_PROC_FS |
1854 | static inline struct proto *__proto_head(void) | ||
1855 | { | ||
1856 | return list_entry(proto_list.next, struct proto, node); | ||
1857 | } | ||
1858 | |||
1859 | static inline struct proto *proto_head(void) | ||
1860 | { | ||
1861 | return list_empty(&proto_list) ? NULL : __proto_head(); | ||
1862 | } | ||
1863 | |||
1864 | static inline struct proto *proto_next(struct proto *proto) | ||
1865 | { | ||
1866 | return proto->node.next == &proto_list ? NULL : | ||
1867 | list_entry(proto->node.next, struct proto, node); | ||
1868 | } | ||
1869 | |||
1870 | static inline struct proto *proto_get_idx(loff_t pos) | ||
1871 | { | ||
1872 | struct proto *proto; | ||
1873 | loff_t i = 0; | ||
1874 | |||
1875 | list_for_each_entry(proto, &proto_list, node) | ||
1876 | if (i++ == pos) | ||
1877 | goto out; | ||
1878 | |||
1879 | proto = NULL; | ||
1880 | out: | ||
1881 | return proto; | ||
1882 | } | ||
1883 | |||
1884 | static void *proto_seq_start(struct seq_file *seq, loff_t *pos) | 1854 | static void *proto_seq_start(struct seq_file *seq, loff_t *pos) |
1885 | { | 1855 | { |
1886 | read_lock(&proto_list_lock); | 1856 | read_lock(&proto_list_lock); |
1887 | return *pos ? proto_get_idx(*pos - 1) : SEQ_START_TOKEN; | 1857 | return seq_list_start_head(&proto_list, *pos); |
1888 | } | 1858 | } |
1889 | 1859 | ||
1890 | static void *proto_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 1860 | static void *proto_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
1891 | { | 1861 | { |
1892 | ++*pos; | 1862 | return seq_list_next(v, &proto_list, pos); |
1893 | return v == SEQ_START_TOKEN ? proto_head() : proto_next(v); | ||
1894 | } | 1863 | } |
1895 | 1864 | ||
1896 | static void proto_seq_stop(struct seq_file *seq, void *v) | 1865 | static void proto_seq_stop(struct seq_file *seq, void *v) |
@@ -1938,7 +1907,7 @@ static void proto_seq_printf(struct seq_file *seq, struct proto *proto) | |||
1938 | 1907 | ||
1939 | static int proto_seq_show(struct seq_file *seq, void *v) | 1908 | static int proto_seq_show(struct seq_file *seq, void *v) |
1940 | { | 1909 | { |
1941 | if (v == SEQ_START_TOKEN) | 1910 | if (v == &proto_list) |
1942 | seq_printf(seq, "%-9s %-4s %-8s %-6s %-5s %-7s %-4s %-10s %s", | 1911 | seq_printf(seq, "%-9s %-4s %-8s %-6s %-5s %-7s %-4s %-10s %s", |
1943 | "protocol", | 1912 | "protocol", |
1944 | "size", | 1913 | "size", |
@@ -1950,7 +1919,7 @@ static int proto_seq_show(struct seq_file *seq, void *v) | |||
1950 | "module", | 1919 | "module", |
1951 | "cl co di ac io in de sh ss gs se re sp bi br ha uh gp em\n"); | 1920 | "cl co di ac io in de sh ss gs se re sp bi br ha uh gp em\n"); |
1952 | else | 1921 | else |
1953 | proto_seq_printf(seq, v); | 1922 | proto_seq_printf(seq, list_entry(v, struct proto, node)); |
1954 | return 0; | 1923 | return 0; |
1955 | } | 1924 | } |
1956 | 1925 | ||
diff --git a/net/rxrpc/ar-proc.c b/net/rxrpc/ar-proc.c index 1c0be0e77b16..77cc5fb17dcd 100644 --- a/net/rxrpc/ar-proc.c +++ b/net/rxrpc/ar-proc.c | |||
@@ -30,31 +30,13 @@ static const char *rxrpc_conn_states[] = { | |||
30 | */ | 30 | */ |
31 | static void *rxrpc_call_seq_start(struct seq_file *seq, loff_t *_pos) | 31 | static void *rxrpc_call_seq_start(struct seq_file *seq, loff_t *_pos) |
32 | { | 32 | { |
33 | struct list_head *_p; | ||
34 | loff_t pos = *_pos; | ||
35 | |||
36 | read_lock(&rxrpc_call_lock); | 33 | read_lock(&rxrpc_call_lock); |
37 | if (!pos) | 34 | return seq_list_start_head(&rxrpc_calls, *_pos); |
38 | return SEQ_START_TOKEN; | ||
39 | pos--; | ||
40 | |||
41 | list_for_each(_p, &rxrpc_calls) | ||
42 | if (!pos--) | ||
43 | break; | ||
44 | |||
45 | return _p != &rxrpc_calls ? _p : NULL; | ||
46 | } | 35 | } |
47 | 36 | ||
48 | static void *rxrpc_call_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 37 | static void *rxrpc_call_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
49 | { | 38 | { |
50 | struct list_head *_p; | 39 | return seq_list_next(v, &rxrpc_calls, pos); |
51 | |||
52 | (*pos)++; | ||
53 | |||
54 | _p = v; | ||
55 | _p = (v == SEQ_START_TOKEN) ? rxrpc_calls.next : _p->next; | ||
56 | |||
57 | return _p != &rxrpc_calls ? _p : NULL; | ||
58 | } | 40 | } |
59 | 41 | ||
60 | static void rxrpc_call_seq_stop(struct seq_file *seq, void *v) | 42 | static void rxrpc_call_seq_stop(struct seq_file *seq, void *v) |
@@ -68,7 +50,7 @@ static int rxrpc_call_seq_show(struct seq_file *seq, void *v) | |||
68 | struct rxrpc_call *call; | 50 | struct rxrpc_call *call; |
69 | char lbuff[4 + 4 + 4 + 4 + 5 + 1], rbuff[4 + 4 + 4 + 4 + 5 + 1]; | 51 | char lbuff[4 + 4 + 4 + 4 + 5 + 1], rbuff[4 + 4 + 4 + 4 + 5 + 1]; |
70 | 52 | ||
71 | if (v == SEQ_START_TOKEN) { | 53 | if (v == &rxrpc_calls) { |
72 | seq_puts(seq, | 54 | seq_puts(seq, |
73 | "Proto Local Remote " | 55 | "Proto Local Remote " |
74 | " SvID ConnID CallID End Use State Abort " | 56 | " SvID ConnID CallID End Use State Abort " |
@@ -129,32 +111,14 @@ struct file_operations rxrpc_call_seq_fops = { | |||
129 | */ | 111 | */ |
130 | static void *rxrpc_connection_seq_start(struct seq_file *seq, loff_t *_pos) | 112 | static void *rxrpc_connection_seq_start(struct seq_file *seq, loff_t *_pos) |
131 | { | 113 | { |
132 | struct list_head *_p; | ||
133 | loff_t pos = *_pos; | ||
134 | |||
135 | read_lock(&rxrpc_connection_lock); | 114 | read_lock(&rxrpc_connection_lock); |
136 | if (!pos) | 115 | return seq_list_start_head(&rxrpc_connections, *_pos); |
137 | return SEQ_START_TOKEN; | ||
138 | pos--; | ||
139 | |||
140 | list_for_each(_p, &rxrpc_connections) | ||
141 | if (!pos--) | ||
142 | break; | ||
143 | |||
144 | return _p != &rxrpc_connections ? _p : NULL; | ||
145 | } | 116 | } |
146 | 117 | ||
147 | static void *rxrpc_connection_seq_next(struct seq_file *seq, void *v, | 118 | static void *rxrpc_connection_seq_next(struct seq_file *seq, void *v, |
148 | loff_t *pos) | 119 | loff_t *pos) |
149 | { | 120 | { |
150 | struct list_head *_p; | 121 | return seq_list_next(v, &rxrpc_connections, pos); |
151 | |||
152 | (*pos)++; | ||
153 | |||
154 | _p = v; | ||
155 | _p = (v == SEQ_START_TOKEN) ? rxrpc_connections.next : _p->next; | ||
156 | |||
157 | return _p != &rxrpc_connections ? _p : NULL; | ||
158 | } | 122 | } |
159 | 123 | ||
160 | static void rxrpc_connection_seq_stop(struct seq_file *seq, void *v) | 124 | static void rxrpc_connection_seq_stop(struct seq_file *seq, void *v) |
@@ -168,7 +132,7 @@ static int rxrpc_connection_seq_show(struct seq_file *seq, void *v) | |||
168 | struct rxrpc_transport *trans; | 132 | struct rxrpc_transport *trans; |
169 | char lbuff[4 + 4 + 4 + 4 + 5 + 1], rbuff[4 + 4 + 4 + 4 + 5 + 1]; | 133 | char lbuff[4 + 4 + 4 + 4 + 5 + 1], rbuff[4 + 4 + 4 + 4 + 5 + 1]; |
170 | 134 | ||
171 | if (v == SEQ_START_TOKEN) { | 135 | if (v == &rxrpc_connections) { |
172 | seq_puts(seq, | 136 | seq_puts(seq, |
173 | "Proto Local Remote " | 137 | "Proto Local Remote " |
174 | " SvID ConnID Calls End Use State Key " | 138 | " SvID ConnID Calls End Use State Key " |