xfs: avoid lockdep false positives in xfs_trans_alloc
authorDave Chinner <dchinner@redhat.com>
Sat, 29 Sep 2018 03:46:21 +0000 (13:46 +1000)
committerDave Chinner <david@fromorbit.com>
Sat, 29 Sep 2018 03:46:21 +0000 (13:46 +1000)
commit8683edb7755b853f0dd92e07fe2e7a7e675a84d7
treee5532cf7ac21ddc84ebd1cb321ff51f1a19831bf
parent95808459b110f16b50f03a70ecfa72bb14bd8a96
xfs: avoid lockdep false positives in xfs_trans_alloc

We've had a few reports of lockdep tripping over memory reclaim
context vs filesystem freeze "deadlocks". They all have looked
to be false positives on analysis, but it seems that they are
being tripped because we take freeze references before we run
a GFP_KERNEL allocation for the struct xfs_trans.

We can avoid this false positive vector just by re-ordering the
operations in xfs_trans_alloc(). That is. we need allocate the
structure before we take the freeze reference and enter the GFP_NOFS
allocation context that follows the xfs_trans around. This prevents
lockdep from seeing the GFP_KERNEL allocation inside the transaction
context, and that prevents it from triggering the freeze level vs
alloc context vs reclaim warnings.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_trans.c