From 9e8b72f43ee899f4a80609b19b8c5d9a11f73d48 Mon Sep 17 00:00:00 2001 From: Vitaly Mayatskikh Date: Mon, 23 Mar 2009 15:22:33 -0700 Subject: [PATCH] --- yaml --- r: 135556 b: refs/heads/master c: 30842f2989aacfaba3ccb39829b3417be9313dbe h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/ipv4/udp.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 3af0862794aa..7a08b1496fed 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e072b639dc13b06b65be487633dad9bb3d2067d5 +refs/heads/master: 30842f2989aacfaba3ccb39829b3417be9313dbe diff --git a/trunk/net/ipv4/udp.c b/trunk/net/ipv4/udp.c index c47c989cb1fb..c8bee189a193 100644 --- a/trunk/net/ipv4/udp.c +++ b/trunk/net/ipv4/udp.c @@ -1614,7 +1614,8 @@ static struct sock *udp_get_next(struct seq_file *seq, struct sock *sk) } while (sk && (!net_eq(sock_net(sk), net) || sk->sk_family != state->family)); if (!sk) { - spin_unlock_bh(&state->udp_table->hash[state->bucket].lock); + if (state->bucket < UDP_HTABLE_SIZE) + spin_unlock_bh(&state->udp_table->hash[state->bucket].lock); return udp_get_first(seq, state->bucket + 1); } return sk; @@ -1632,6 +1633,9 @@ static struct sock *udp_get_idx(struct seq_file *seq, loff_t pos) static void *udp_seq_start(struct seq_file *seq, loff_t *pos) { + struct udp_iter_state *state = seq->private; + state->bucket = UDP_HTABLE_SIZE; + return *pos ? udp_get_idx(seq, *pos-1) : SEQ_START_TOKEN; }