• Darrick J. Wong's avatar
    xfs: launder in-memory btree buffers before transaction commit · 0dc63c8a
    Darrick J. Wong authored
    As we've noted in various places, all current users of in-memory btrees
    are online fsck.  Online fsck only stages a btree long enough to rebuild
    an ondisk data structure, which means that the in-memory btree is
    ephemeral.  Furthermore, if we encounter /any/ errors while updating an
    in-memory btree, all we do is tear down all the staged data and return
    an errno to userspace.  In-memory btrees need not be transactional, so
    their buffers should not be committed to the ondisk log, nor should they
    be checkpointed by the AIL.  That's just as well since the ephemeral
    nature of the btree means that the buftarg and the buffers may disappear
    quickly anyway.
    
    Therefore, we need a way to launder the btree buffers that get attached
    to the transaction by the generic btree code.  Because the buffers are
    directly mapped to backing file pages, there's no need to bwrite them
    back to the tmpfs file.  All we need to do is clean enough of the buffer
    log item state so that the bli can be detached from the buffer, remove
    the bli from the transaction's log item list, and reset the transaction
    dirty state as if the laundered items had never been there.
    
    For simplicity, create xfbtree transaction commit and cancel helpers
    that launder the in-memory btree buffers for callers.  Once laundered,
    call the write verifier on non-stale buffers to avoid integrity issues,
    or punch a hole in the backing file for stale buffers.
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    0dc63c8a
xfs_btree_mem.h 2.18 KB