• C
    mm: move migrate_prep out from under mmap_sem · 0aedadf9
    Christoph Lameter 提交于
    Move the migrate_prep outside the mmap_sem for the following system calls
    
    1. sys_move_pages
    2. sys_migrate_pages
    3. sys_mbind()
    
    It really does not matter when we flush the lru.  The system is free to
    add pages onto the lru even during migration which will make the page
    migration either skip the page (mbind, migrate_pages) or return a busy
    state (move_pages).
    
    Fixes this lockdep warning (and potential deadlock):
    
    Some VM place has
          mmap_sem -> kevent_wq via lru_add_drain_all()
    
    net/core/dev.c::dev_ioctl()  has
         rtnl_lock  ->  mmap_sem        (*) the ioctl has copy_from_user() and it can do page fault.
    
    linkwatch_event has
         kevent_wq -> rtnl_lock
    Signed-off-by: NChristoph Lameter <cl@linux-foundation.org>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Reported-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Cc: Hugh Dickins <hugh@veritas.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Lee Schermerhorn <lee.schermerhorn@hp.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    0aedadf9
migrate.c 25.5 KB