1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Copyright (c) 2020-2024 Oracle. All Rights Reserved. 4 * Author: Darrick J. Wong <djwong@kernel.org> 5 */ 6 #ifndef __XFS_EXCHMAPS_ITEM_H__ 7 #define __XFS_EXCHMAPS_ITEM_H__ 8 9 /* 10 * The file mapping exchange intent item helps us exchange multiple file 11 * mappings between two inode forks. It does this by tracking the range of 12 * file block offsets that still need to be exchanged, and relogs as progress 13 * happens. 14 * 15 * *I items should be recorded in the *first* of a series of rolled 16 * transactions, and the *D items should be recorded in the same transaction 17 * that records the associated bmbt updates. 18 * 19 * Should the system crash after the commit of the first transaction but 20 * before the commit of the final transaction in a series, log recovery will 21 * use the redo information recorded by the intent items to replay the 22 * rest of the mapping exchanges. 23 */ 24 25 /* kernel only XMI/XMD definitions */ 26 27 struct xfs_mount; 28 struct kmem_cache; 29 30 /* 31 * This is the incore file mapping exchange intent log item. It is used to log 32 * the fact that we are exchanging mappings between two files. It is used in 33 * conjunction with the incore file mapping exchange done log item described 34 * below. 35 * 36 * These log items follow the same rules as struct xfs_efi_log_item; see the 37 * comments about that structure (in xfs_extfree_item.h) for more details. 38 */ 39 struct xfs_xmi_log_item { 40 struct xfs_log_item xmi_item; 41 atomic_t xmi_refcount; 42 struct xfs_xmi_log_format xmi_format; 43 }; 44 45 /* 46 * This is the incore file mapping exchange done log item. It is used to log 47 * the fact that an exchange mentioned in an earlier xmi item have been 48 * performed. 49 */ 50 struct xfs_xmd_log_item { 51 struct xfs_log_item xmd_item; 52 struct xfs_xmi_log_item *xmd_intent_log_item; 53 struct xfs_xmd_log_format xmd_format; 54 }; 55 56 extern struct kmem_cache *xfs_xmi_cache; 57 extern struct kmem_cache *xfs_xmd_cache; 58 59 struct xfs_exchmaps_intent; 60 61 void xfs_exchmaps_defer_add(struct xfs_trans *tp, 62 struct xfs_exchmaps_intent *xmi); 63 64 #endif /* __XFS_EXCHMAPS_ITEM_H__ */ 65