]> git.baikalelectronics.ru Git - kernel.git/commit
xfs: finish dfops on every insert range shift iteration
authorBrian Foster <bfoster@redhat.com>
Tue, 18 Aug 2020 15:05:58 +0000 (08:05 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 26 Aug 2020 21:13:21 +0000 (14:13 -0700)
commit1dfa5f4403e5141142cc87263543e5c8a706a82b
treed7b26532bc2090709268c3e0a09bf6876065925a
parente5f0bf958198ed018c9fdf06e8d307ced9af9c95
xfs: finish dfops on every insert range shift iteration

The recent change to make insert range an atomic operation used the
incorrect transaction rolling mechanism. The explicit transaction
roll does not finish deferred operations. This means that intents
for rmapbt updates caused by extent shifts are not logged until the
final transaction commits. Thus if a crash occurs during an insert
range, log recovery might leave the rmapbt in an inconsistent state.
This was discovered by repeated runs of generic/455.

Update insert range to finish dfops on every shift iteration. This
is similar to collapse range and ensures that intents are logged
with the transactions that make associated changes.

Fixes: ee7a569a3724 ("xfs: rework insert range into an atomic operation")
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/xfs_bmap_util.c