1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Copyright (c) 2020-2024 Oracle. All Rights Reserved.
4 * Author: Darrick J. Wong <djwong@kernel.org>
6 #ifndef __XFS_EXCHMAPS_ITEM_H__
7 #define __XFS_EXCHMAPS_ITEM_H__
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
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.
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.
25 /* kernel only XMI/XMD definitions */
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
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.
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
;
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
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
;
56 extern struct kmem_cache
*xfs_xmi_cache
;
57 extern struct kmem_cache
*xfs_xmd_cache
;
59 struct xfs_exchmaps_intent
;
61 void xfs_exchmaps_defer_add(struct xfs_trans
*tp
,
62 struct xfs_exchmaps_intent
*xmi
);
64 #endif /* __XFS_EXCHMAPS_ITEM_H__ */