diff options
Diffstat (limited to 'net/ax25/ax25_uid.c')
| -rw-r--r-- | net/ax25/ax25_uid.c | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/net/ax25/ax25_uid.c b/net/ax25/ax25_uid.c index 832bcf092a01..d349be9578f5 100644 --- a/net/ax25/ax25_uid.c +++ b/net/ax25/ax25_uid.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/sockios.h> | 18 | #include <linux/sockios.h> |
| 19 | #include <linux/net.h> | 19 | #include <linux/net.h> |
| 20 | #include <linux/spinlock.h> | 20 | #include <linux/spinlock.h> |
| 21 | #include <linux/slab.h> | ||
| 21 | #include <net/ax25.h> | 22 | #include <net/ax25.h> |
| 22 | #include <linux/inet.h> | 23 | #include <linux/inet.h> |
| 23 | #include <linux/netdevice.h> | 24 | #include <linux/netdevice.h> |
| @@ -146,31 +147,13 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax) | |||
| 146 | static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos) | 147 | static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos) |
| 147 | __acquires(ax25_uid_lock) | 148 | __acquires(ax25_uid_lock) |
| 148 | { | 149 | { |
| 149 | struct ax25_uid_assoc *pt; | ||
| 150 | struct hlist_node *node; | ||
| 151 | int i = 1; | ||
| 152 | |||
| 153 | read_lock(&ax25_uid_lock); | 150 | read_lock(&ax25_uid_lock); |
| 154 | 151 | return seq_hlist_start_head(&ax25_uid_list, *pos); | |
| 155 | if (*pos == 0) | ||
| 156 | return SEQ_START_TOKEN; | ||
| 157 | |||
| 158 | ax25_uid_for_each(pt, node, &ax25_uid_list) { | ||
| 159 | if (i == *pos) | ||
| 160 | return pt; | ||
| 161 | ++i; | ||
| 162 | } | ||
| 163 | return NULL; | ||
| 164 | } | 152 | } |
| 165 | 153 | ||
| 166 | static void *ax25_uid_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 154 | static void *ax25_uid_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
| 167 | { | 155 | { |
| 168 | ++*pos; | 156 | return seq_hlist_next(v, &ax25_uid_list, pos); |
| 169 | if (v == SEQ_START_TOKEN) | ||
| 170 | return ax25_uid_list.first; | ||
| 171 | else | ||
| 172 | return hlist_entry(((ax25_uid_assoc *)v)->uid_node.next, | ||
| 173 | ax25_uid_assoc, uid_node); | ||
| 174 | } | 157 | } |
| 175 | 158 | ||
| 176 | static void ax25_uid_seq_stop(struct seq_file *seq, void *v) | 159 | static void ax25_uid_seq_stop(struct seq_file *seq, void *v) |
| @@ -186,8 +169,9 @@ static int ax25_uid_seq_show(struct seq_file *seq, void *v) | |||
| 186 | if (v == SEQ_START_TOKEN) | 169 | if (v == SEQ_START_TOKEN) |
| 187 | seq_printf(seq, "Policy: %d\n", ax25_uid_policy); | 170 | seq_printf(seq, "Policy: %d\n", ax25_uid_policy); |
| 188 | else { | 171 | else { |
| 189 | struct ax25_uid_assoc *pt = v; | 172 | struct ax25_uid_assoc *pt; |
| 190 | 173 | ||
| 174 | pt = hlist_entry(v, struct ax25_uid_assoc, uid_node); | ||
| 191 | seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(buf, &pt->call)); | 175 | seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(buf, &pt->call)); |
| 192 | } | 176 | } |
| 193 | return 0; | 177 | return 0; |
