• Oleg Nesterov's avatar
    fs/proc/task_mmu.c: kill the suboptimal and confusing m->version logic · ebb6cdde
    Oleg Nesterov authored
    m_start() carefully documents, checks, and sets "m->version = -1" if
    we are going to return NULL. The only problem is that we will be never
    called again if m_start() returns NULL, so this is simply pointless
    and misleading.
    
    Otoh, ->show() methods m->version = 0 if vma == tail_vma and this is
    just wrong, we want -1 in this case. And in fact we also want -1 if
    ->vm_next == NULL and ->tail_vma == NULL.
    
    And it is not used consistently, the "scan vmas" loop in m_start()
    should update last_addr too.
    
    Finally, imo the whole "last_addr" logic in m_start() looks horrible.
    find_vma(last_addr) is called unconditionally even if we are not going
    to use the result. But the main problem is that this code participates
    in tail_vma-or-NULL mess, and this looks simply unfixable.
    
    Remove this optimization. We will add it back after some cleanups.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Cyrill Gorcunov <gorcunov@openvz.org>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ebb6cdde
task_mmu.c 37.8 KB