/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (c) 2020-2024 Oracle. All Rights Reserved. * Author: Darrick J. Wong <djwong@kernel.org> */ #ifndef __XFS_EXCHMAPS_ITEM_H__ #define __XFS_EXCHMAPS_ITEM_H__ /* * The file mapping exchange intent item helps us exchange multiple file * mappings between two inode forks. It does this by tracking the range of * file block offsets that still need to be exchanged, and relogs as progress * happens. * * *I items should be recorded in the *first* of a series of rolled * transactions, and the *D items should be recorded in the same transaction * that records the associated bmbt updates. * * Should the system crash after the commit of the first transaction but * before the commit of the final transaction in a series, log recovery will * use the redo information recorded by the intent items to replay the * rest of the mapping exchanges. */ /* kernel only XMI/XMD definitions */ struct xfs_mount; struct kmem_cache; /* * This is the incore file mapping exchange intent log item. It is used to log * the fact that we are exchanging mappings between two files. It is used in * conjunction with the incore file mapping exchange done log item described * below. * * These log items follow the same rules as struct xfs_efi_log_item; see the * comments about that structure (in xfs_extfree_item.h) for more details. */ struct xfs_xmi_log_item { struct xfs_log_item xmi_item; atomic_t xmi_refcount; struct xfs_xmi_log_format xmi_format; }; /* * This is the incore file mapping exchange done log item. It is used to log * the fact that an exchange mentioned in an earlier xmi item have been * performed. */ struct xfs_xmd_log_item { struct xfs_log_item xmd_item; struct xfs_xmi_log_item *xmd_intent_log_item; struct xfs_xmd_log_format xmd_format; }; extern struct kmem_cache *xfs_xmi_cache; extern struct kmem_cache *xfs_xmd_cache; struct xfs_exchmaps_intent; void xfs_exchmaps_defer_add(struct xfs_trans *tp, struct xfs_exchmaps_intent *xmi); #endif /* __XFS_EXCHMAPS_ITEM_H__ */