Showing error 967

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/ipv4/igmp.c
Line in file: 2518
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-03-02 21:35:17 UTC


Source:

2488                spin_lock_bh(&state->im->lock);
2489                psf = state->im->sources;
2490        }
2491out:
2492        return psf;
2493}
2494
2495static struct ip_sf_list *igmp_mcf_get_idx(struct seq_file *seq, loff_t pos)
2496{
2497        struct ip_sf_list *psf = igmp_mcf_get_first(seq);
2498        if (psf)
2499                while (pos && (psf = igmp_mcf_get_next(seq, psf)) != NULL)
2500                        --pos;
2501        return pos ? NULL : psf;
2502}
2503
2504static void *igmp_mcf_seq_start(struct seq_file *seq, loff_t *pos)
2505{
2506        read_lock(&dev_base_lock);
2507        return *pos ? igmp_mcf_get_idx(seq, *pos - 1) : SEQ_START_TOKEN;
2508}
2509
2510static void *igmp_mcf_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2511{
2512        struct ip_sf_list *psf;
2513        if (v == SEQ_START_TOKEN)
2514                psf = igmp_mcf_get_first(seq);
2515        else
2516                psf = igmp_mcf_get_next(seq, v);
2517        ++*pos;
2518        return psf;
2519}
2520
2521static void igmp_mcf_seq_stop(struct seq_file *seq, void *v)
2522{
2523        struct igmp_mcf_iter_state *state = igmp_mcf_seq_private(seq);
2524        if (likely(state->im != NULL)) {
2525                spin_unlock_bh(&state->im->lock);
2526                state->im = NULL;
2527        }
2528        if (likely(state->idev != NULL)) {
Show full sources