Showing error 1496

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: net/ipv6/mcast.c
Line in file: 2363
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-05-21 20:30:05 UTC


Source:

2333#ifdef CONFIG_PROC_FS
2334struct igmp6_mc_iter_state {
2335        struct seq_net_private p;
2336        struct net_device *dev;
2337        struct inet6_dev *idev;
2338};
2339
2340#define igmp6_mc_seq_private(seq)        ((struct igmp6_mc_iter_state *)(seq)->private)
2341
2342static inline struct ifmcaddr6 *igmp6_mc_get_first(struct seq_file *seq)
2343{
2344        struct ifmcaddr6 *im = NULL;
2345        struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
2346        struct net *net = seq_file_net(seq);
2347
2348        state->idev = NULL;
2349        for_each_netdev(net, state->dev) {
2350                struct inet6_dev *idev;
2351                idev = in6_dev_get(state->dev);
2352                if (!idev)
2353                        continue;
2354                read_lock_bh(&idev->lock);
2355                im = idev->mc_list;
2356                if (im) {
2357                        state->idev = idev;
2358                        break;
2359                }
2360                read_unlock_bh(&idev->lock);
2361                in6_dev_put(idev);
2362        }
2363        return im;
2364}
2365
2366static struct ifmcaddr6 *igmp6_mc_get_next(struct seq_file *seq, struct ifmcaddr6 *im)
2367{
2368        struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
2369
2370        im = im->next;
2371        while (!im) {
2372                if (likely(state->idev != NULL)) {
2373                        read_unlock_bh(&state->idev->lock);
Show full sources