static struct sock *raw_get_next(struct seq_file *seq, struct sock *sk) { struct raw_iter_state *state = raw_seq_private(seq); do { sk = sk_next(sk); try_again: ; } while (sk && sock_net(sk) != seq_file_net(seq)); if (!sk && ++state->bucket < RAW_HTABLE_SIZE) { sk = sk_head(&state->h->ht[state->bucket]); goto try_again; } return sk; }
static struct sock *raw_get_first(struct seq_file *seq) { struct sock *sk; struct raw_iter_state *state = raw_seq_private(seq); for (state->bucket = 0; state->bucket < RAW_HTABLE_SIZE; ++state->bucket) { struct hlist_node *node; sk_for_each(sk, node, &state->h->ht[state->bucket]) if (sock_net(sk) == seq_file_net(seq)) goto found; } sk = NULL; found: return sk; }
void raw_seq_stop(struct seq_file *seq, void *v) { struct raw_iter_state *state = raw_seq_private(seq); read_unlock(&state->h->lock); }
void raw_seq_stop(struct seq_file *seq, void *v) { read_unlock(&raw_seq_private(seq)->h->lock); }