aboutsummaryrefslogtreecommitdiff
path: root/fs/xfs/xfs_buf_mem.h
diff options
context:
space:
mode:
authorGravatar Darrick J. Wong <djwong@kernel.org> 2024-02-22 12:43:36 -0800
committerGravatar Darrick J. Wong <djwong@kernel.org> 2024-02-22 12:43:36 -0800
commit0dc63c8a1ce39c1ac7da536ee9174cdc714afae2 (patch)
treef5ea501927d96dd13f0a3f3463d51c8d19ef21b8 /fs/xfs/xfs_buf_mem.h
parentxfs: support in-memory btrees (diff)
downloadlinux-0dc63c8a1ce39c1ac7da536ee9174cdc714afae2.tar.gz
linux-0dc63c8a1ce39c1ac7da536ee9174cdc714afae2.tar.bz2
linux-0dc63c8a1ce39c1ac7da536ee9174cdc714afae2.zip
xfs: launder in-memory btree buffers before transaction commit
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: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/xfs_buf_mem.h')
-rw-r--r--fs/xfs/xfs_buf_mem.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/xfs/xfs_buf_mem.h b/fs/xfs/xfs_buf_mem.h
index dfb3029113ff..eed4a7b63232 100644
--- a/fs/xfs/xfs_buf_mem.h
+++ b/fs/xfs/xfs_buf_mem.h
@@ -22,6 +22,8 @@ void xmbuf_free(struct xfs_buftarg *btp);
int xmbuf_map_page(struct xfs_buf *bp);
void xmbuf_unmap_page(struct xfs_buf *bp);
bool xmbuf_verify_daddr(struct xfs_buftarg *btp, xfs_daddr_t daddr);
+void xmbuf_trans_bdetach(struct xfs_trans *tp, struct xfs_buf *bp);
+int xmbuf_finalize(struct xfs_buf *bp);
#else
# define xfs_buftarg_is_mem(...) (false)
# define xmbuf_map_page(...) (-ENOMEM)