2024-04-16 05:54:16 +08:00
|
|
|
/* 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;
|
|
|
|
|
2024-04-16 05:54:17 +08:00
|
|
|
struct xfs_exchmaps_intent;
|
|
|
|
|
|
|
|
void xfs_exchmaps_defer_add(struct xfs_trans *tp,
|
|
|
|
struct xfs_exchmaps_intent *xmi);
|
|
|
|
|
2024-04-16 05:54:16 +08:00
|
|
|
#endif /* __XFS_EXCHMAPS_ITEM_H__ */
|