linux/fs/xfs/xfs_exchmaps_item.h

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (c) 2020-2024 Oracle.  All Rights Reserved.
 * Author: Darrick J. Wong <[email protected]>
 */
#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 {};

/*
 * 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 {};

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__ */