• Brian Foster's avatar
    xfs: finish dfops on every insert range shift iteration · 9c516e0e
    Brian Foster authored
    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: dd87f87d ("xfs: rework insert range into an atomic operation")
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    9c516e0e
xfs_bmap_util.c 46.3 KB