![]() |
|
|||
0001 // SPDX-License-Identifier: GPL-2.0+ 0002 /* 0003 * Copyright (C) 2016 Oracle. All Rights Reserved. 0004 * Author: Darrick J. Wong <darrick.wong@oracle.com> 0005 */ 0006 #ifndef __XFS_REFCOUNT_ITEM_H__ 0007 #define __XFS_REFCOUNT_ITEM_H__ 0008 0009 /* 0010 * There are (currently) two pairs of refcount btree redo item types: 0011 * increase and decrease. The log items for these are CUI (refcount 0012 * update intent) and CUD (refcount update done). The redo item type 0013 * is encoded in the flags field of each xfs_map_extent. 0014 * 0015 * *I items should be recorded in the *first* of a series of rolled 0016 * transactions, and the *D items should be recorded in the same 0017 * transaction that records the associated refcountbt updates. 0018 * 0019 * Should the system crash after the commit of the first transaction 0020 * but before the commit of the final transaction in a series, log 0021 * recovery will use the redo information recorded by the intent items 0022 * to replay the refcountbt metadata updates. 0023 */ 0024 0025 /* kernel only CUI/CUD definitions */ 0026 0027 struct xfs_mount; 0028 struct kmem_cache; 0029 0030 /* 0031 * Max number of extents in fast allocation path. 0032 */ 0033 #define XFS_CUI_MAX_FAST_EXTENTS 16 0034 0035 /* 0036 * This is the "refcount update intent" log item. It is used to log 0037 * the fact that some reverse mappings need to change. It is used in 0038 * conjunction with the "refcount update done" log item described 0039 * below. 0040 * 0041 * These log items follow the same rules as struct xfs_efi_log_item; 0042 * see the comments about that structure (in xfs_extfree_item.h) for 0043 * more details. 0044 */ 0045 struct xfs_cui_log_item { 0046 struct xfs_log_item cui_item; 0047 atomic_t cui_refcount; 0048 atomic_t cui_next_extent; 0049 struct xfs_cui_log_format cui_format; 0050 }; 0051 0052 static inline size_t 0053 xfs_cui_log_item_sizeof( 0054 unsigned int nr) 0055 { 0056 return offsetof(struct xfs_cui_log_item, cui_format) + 0057 xfs_cui_log_format_sizeof(nr); 0058 } 0059 0060 /* 0061 * This is the "refcount update done" log item. It is used to log the 0062 * fact that some refcountbt updates mentioned in an earlier cui item 0063 * have been performed. 0064 */ 0065 struct xfs_cud_log_item { 0066 struct xfs_log_item cud_item; 0067 struct xfs_cui_log_item *cud_cuip; 0068 struct xfs_cud_log_format cud_format; 0069 }; 0070 0071 extern struct kmem_cache *xfs_cui_cache; 0072 extern struct kmem_cache *xfs_cud_cache; 0073 0074 #endif /* __XFS_REFCOUNT_ITEM_H__ */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |
![]() ![]() |