diff options
author | Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> | 2008-12-15 02:15:21 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-12-15 02:15:21 -0500 |
commit | 448eb71f40120a8fd11ebd58153c271c63e6f862 (patch) | |
tree | a053aac189359d93c8ec32ba0a2d876e71863342 /net | |
parent | 5ce1bbb97bf1e6707102d30499e7feaa1e6a2134 (diff) |
ipv6/mcast: join error paths using goto
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/mcast.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 0f3896032830..a51fb33e6864 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -303,20 +303,23 @@ static struct inet6_dev *ip6_mc_find_dev(struct net *net, | |||
303 | dev = dev_get_by_index(net, ifindex); | 303 | dev = dev_get_by_index(net, ifindex); |
304 | 304 | ||
305 | if (!dev) | 305 | if (!dev) |
306 | return NULL; | 306 | goto nodev; |
307 | idev = in6_dev_get(dev); | 307 | idev = in6_dev_get(dev); |
308 | if (!idev) { | 308 | if (!idev) |
309 | dev_put(dev); | 309 | goto release; |
310 | return NULL; | ||
311 | } | ||
312 | read_lock_bh(&idev->lock); | 310 | read_lock_bh(&idev->lock); |
313 | if (idev->dead) { | 311 | if (idev->dead) |
314 | read_unlock_bh(&idev->lock); | 312 | goto unlock_release; |
315 | in6_dev_put(idev); | 313 | |
316 | dev_put(dev); | ||
317 | return NULL; | ||
318 | } | ||
319 | return idev; | 314 | return idev; |
315 | |||
316 | unlock_release: | ||
317 | read_unlock_bh(&idev->lock); | ||
318 | in6_dev_put(idev); | ||
319 | release: | ||
320 | dev_put(dev); | ||
321 | nodev: | ||
322 | return NULL; | ||
320 | } | 323 | } |
321 | 324 | ||
322 | void ipv6_sock_mc_close(struct sock *sk) | 325 | void ipv6_sock_mc_close(struct sock *sk) |