• Uladzislau Rezki (Sony)'s avatar
    mm: vmalloc: fix lockdep warning · fc2c2269
    Uladzislau Rezki (Sony) authored
    A lockdep reports a possible deadlock in the find_vmap_area_exceed_addr_lock()
    function:
    
    ============================================
    WARNING: possible recursive locking detected
    6.9.0-rc1-00060-ged3ccc57b108-dirty #6140 Not tainted
    --------------------------------------------
    drgn/455 is trying to acquire lock:
    ffff0000c00131d0 (&vn->busy.lock/1){+.+.}-{2:2}, at: find_vmap_area_exceed_addr_lock+0x64/0x124
    
    but task is already holding lock:
    ffff0000c0011878 (&vn->busy.lock/1){+.+.}-{2:2}, at: find_vmap_area_exceed_addr_lock+0x64/0x124
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(&vn->busy.lock/1);
      lock(&vn->busy.lock/1);
    
     *** DEADLOCK ***
    
    indeed it can happen if the find_vmap_area_exceed_addr_lock() gets called
    concurrently because it tries to acquire two nodes locks.  It was done to
    prevent removing a lowest VA found on a previous step.
    
    To address this a lowest VA is found first without holding a node lock
    where it resides.  As a last step we check if a VA still there because it
    can go away, if removed, proceed with next lowest.
    
    [akpm@linux-foundation.org: fix comment typos, per Baoquan]
    Link: https://lkml.kernel.org/r/20240328140330.4747-1-urezki@gmail.com
    Fixes: 53becf32 ("mm: vmalloc: support multiple nodes in vread_iter")
    Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
    Tested-by: default avatarJens Axboe <axboe@kernel.dk>
    Tested-by: default avatarOmar Sandoval <osandov@fb.com>
    Reported-by: default avatarJens Axboe <axboe@kernel.dk>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Lorenzo Stoakes <lstoakes@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sony.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    fc2c2269
vmalloc.c 131 KB