dax: Fix deadlock in dax_lock_mapping_entry()

When dax_lock_mapping_entry() has to sleep to obtain entry lock, it will
fail to unlock mapping->i_pages spinlock and thus immediately deadlock
against itself when retrying to grab the entry lock again. Fix the
problem by unlocking mapping->i_pages before retrying.

Fixes: c2a7d2a11552 ("filesystem-dax: Introduce dax_lock_mapping_entry()")
Reported-by: Barret Rhoden <brho@google.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

authored by Jan Kara and committed by Dan Williams f52afc93 6bf4ca7f

Changed files
+1
fs
+1
fs/dax.c
··· 447 447 xa_unlock_irq(&mapping->i_pages); 448 448 break; 449 449 } else if (IS_ERR(entry)) { 450 + xa_unlock_irq(&mapping->i_pages); 450 451 WARN_ON_ONCE(PTR_ERR(entry) != -EAGAIN); 451 452 continue; 452 453 }