Showing error 1041

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/memory.c
Line in file: 602
Project: Linux Kernel
Project version: 2.6.28
Tools: Undetermined 1
Entered: 2012-03-04 17:07:06 UTC


Source:

 572        spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
 573        arch_enter_lazy_mmu_mode();
 574
 575        do {
 576                /*
 577                 * We are holding two locks at this point - either of them
 578                 * could generate latencies in another task on another CPU.
 579                 */
 580                if (progress >= 32) {
 581                        progress = 0;
 582                        if (need_resched() ||
 583                            spin_needbreak(src_ptl) || spin_needbreak(dst_ptl))
 584                                break;
 585                }
 586                if (pte_none(*src_pte)) {
 587                        progress++;
 588                        continue;
 589                }
 590                copy_one_pte(dst_mm, src_mm, dst_pte, src_pte, vma, addr, rss);
 591                progress += 8;
 592        } while (dst_pte++, src_pte++, addr += PAGE_SIZE, addr != end);
 593
 594        arch_leave_lazy_mmu_mode();
 595        spin_unlock(src_ptl);
 596        pte_unmap_nested(src_pte - 1);
 597        add_mm_rss(dst_mm, rss[0], rss[1]);
 598        pte_unmap_unlock(dst_pte - 1, dst_ptl);
 599        cond_resched();
 600        if (addr != end)
 601                goto again;
 602        return 0;
 603}
 604
 605static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
 606                pud_t *dst_pud, pud_t *src_pud, struct vm_area_struct *vma,
 607                unsigned long addr, unsigned long end)
 608{
 609        pmd_t *src_pmd, *dst_pmd;
 610        unsigned long next;
 611
 612        dst_pmd = pmd_alloc(dst_mm, dst_pud, addr);
Show full sources