1. 28 Jul, 2019 38 commits
  2. 26 Jul, 2019 2 commits
    • Greg Kroah-Hartman's avatar
      Linux 5.1.20 · aac977a0
      Greg Kroah-Hartman authored
      aac977a0
    • Junxiao Bi's avatar
      dm bufio: fix deadlock with loop device · f27cc07f
      Junxiao Bi authored
      commit bd293d07 upstream.
      
      When thin-volume is built on loop device, if available memory is low,
      the following deadlock can be triggered:
      
      One process P1 allocates memory with GFP_FS flag, direct alloc fails,
      memory reclaim invokes memory shrinker in dm_bufio, dm_bufio_shrink_scan()
      runs, mutex dm_bufio_client->lock is acquired, then P1 waits for dm_buffer
      IO to complete in __try_evict_buffer().
      
      But this IO may never complete if issued to an underlying loop device
      that forwards it using direct-IO, which allocates memory using
      GFP_KERNEL (see: do_blockdev_direct_IO()).  If allocation fails, memory
      reclaim will invoke memory shrinker in dm_bufio, dm_bufio_shrink_scan()
      will be invoked, and since the mutex is already held by P1 the loop
      thread will hang, and IO will never complete.  Resulting in ABBA
      deadlock.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJunxiao Bi <junxiao.bi@oracle.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f27cc07f