Showing error 1443

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: mm/rmap.c
Line in file: 208
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-05-21 20:30:05 UTC


Source:

 178        struct anon_vma *anon_vma = data;
 179
 180        spin_lock_init(&anon_vma->lock);
 181        INIT_LIST_HEAD(&anon_vma->head);
 182}
 183
 184void __init anon_vma_init(void)
 185{
 186        anon_vma_cachep = kmem_cache_create("anon_vma", sizeof(struct anon_vma),
 187                        0, SLAB_DESTROY_BY_RCU|SLAB_PANIC, anon_vma_ctor);
 188}
 189
 190/*
 191 * Getting a lock on a stable anon_vma from a page off the LRU is
 192 * tricky: page_lock_anon_vma rely on RCU to guard against the races.
 193 */
 194struct anon_vma *page_lock_anon_vma(struct page *page)
 195{
 196        struct anon_vma *anon_vma;
 197        unsigned long anon_mapping;
 198
 199        rcu_read_lock();
 200        anon_mapping = (unsigned long) page->mapping;
 201        if (!(anon_mapping & PAGE_MAPPING_ANON))
 202                goto out;
 203        if (!page_mapped(page))
 204                goto out;
 205
 206        anon_vma = (struct anon_vma *) (anon_mapping - PAGE_MAPPING_ANON);
 207        spin_lock(&anon_vma->lock);
 208        return anon_vma;
 209out:
 210        rcu_read_unlock();
 211        return NULL;
 212}
 213
 214void page_unlock_anon_vma(struct anon_vma *anon_vma)
 215{
 216        spin_unlock(&anon_vma->lock);
 217        rcu_read_unlock();
 218}
Show full sources