xfs: avoid mount-time deadlock in CoW extent recovery
authorDarrick J. Wong <darrick.wong@oracle.com>
Tue, 16 May 2017 02:16:15 +0000 (19:16 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 7 Jun 2017 10:07:52 +0000 (12:07 +0200)
commit7fb8ab8f0a38adb97cf2cf0738628959db5d840d
treec575a1b13f32bb21646e4cea16d215e943ff2eb7
parente40c145c023db15a0504e95ac442f0e47c0a816d
xfs: avoid mount-time deadlock in CoW extent recovery

commit 3ecb3ac7b950ff8f6c6a61e8b7b0d6e3546429a0 upstream.

If a malicious user corrupts the refcount btree to cause a cycle between
different levels of the tree, the next mount attempt will deadlock in
the CoW recovery routine while grabbing buffer locks.  We can use the
ability to re-grab a buffer that was previous locked to a transaction to
avoid deadlocks, so do that here.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/xfs/libxfs/xfs_refcount.c