• Junichi Nomura's avatar
    dm: fix AB-BA deadlock in __dm_destroy() · 2a708cff
    Junichi Nomura authored
    __dm_destroy() takes io_barrier SRCU lock (dm_get_live_table) and
    suspend_lock in reverse order.  Doing so can cause AB-BA deadlock:
    
      __dm_destroy                    dm_swap_table
      ---------------------------------------------------
                                      mutex_lock(suspend_lock)
      dm_get_live_table()
        srcu_read_lock(io_barrier)
                                      dm_sync_table()
                                        synchronize_srcu(io_barrier)
                                          .. waiting for dm_put_live_table()
      mutex_lock(suspend_lock)
        .. waiting for suspend_lock
    
    Fix this by taking the locks in proper order.
    Signed-off-by: default avatarJun'ichi Nomura <j-nomura@ce.jp.nec.com>
    Fixes: ab7c7bb6 ("dm: hold suspend_lock while suspending device during device deletion")
    Acked-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Cc: stable@vger.kernel.org
    2a708cff
dm.c 81.7 KB