fs/xfs/libxfs/xfs_inode_fork.h
Source file repositories/reference/linux-study-clean/fs/xfs/libxfs/xfs_inode_fork.h
File Facts
- System
- Linux kernel
- Corpus path
fs/xfs/libxfs/xfs_inode_fork.h- Extension
.h- Size
- 8247 bytes
- Lines
- 275
- Domain
- Core OS
- Bucket
- VFS And Filesystem Core
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
struct xfs_inode_log_itemstruct xfs_dinodestruct xfs_iforkfunction extentfunction xfs_ifork_nextentsfunction xfs_ifork_formatfunction xfs_iext_max_nextentsfunction xfs_dfork_data_extentsfunction xfs_dfork_attr_extentsfunction xfs_dfork_nextentsfunction xfs_iext_next_extentfunction xfs_iext_prev_extentfunction xfs_iext_peek_next_extentfunction xfs_iext_peek_prev_extentfunction xfs_need_iread_extents
Annotated Snippet
struct xfs_ifork {
int64_t if_bytes; /* bytes in if_data */
struct xfs_btree_block *if_broot; /* file's incore btree root */
unsigned int if_seq; /* fork mod counter */
int if_height; /* height of the extent tree */
void *if_data; /* extent tree root or
inline data */
xfs_extnum_t if_nextents; /* # of extents in this fork */
short if_broot_bytes; /* bytes allocated for root */
int8_t if_format; /* format of this fork */
uint8_t if_needextents; /* extents have not been read */
};
/*
* Worst-case increase in the fork extent count when we're adding a single
* extent to a fork and there's no possibility of splitting an existing mapping.
*/
#define XFS_IEXT_ADD_NOSPLIT_CNT (1)
/*
* Punching out an extent from the middle of an existing extent can cause the
* extent count to increase by 1.
* i.e. | Old extent | Hole | Old extent |
*/
#define XFS_IEXT_PUNCH_HOLE_CNT (1)
/*
* Adding/removing an xattr can cause XFS_DA_NODE_MAXDEPTH extents to
* be added. One extra extent for dabtree in case a local attr is
* large enough to cause a double split. It can also cause extent
* count to increase proportional to the size of a remote xattr's
* value.
*/
#define XFS_IEXT_ATTR_MANIP_CNT(rmt_blks) \
(XFS_DA_NODE_MAXDEPTH + max(1, rmt_blks))
/*
* A write to a sub-interval of an existing unwritten extent causes the original
* extent to be split into 3 extents
* i.e. | Unwritten | Real | Unwritten |
* Hence extent count can increase by 2.
*/
#define XFS_IEXT_WRITE_UNWRITTEN_CNT (2)
/*
* Moving an extent to data fork can cause a sub-interval of an existing extent
* to be unmapped. This will increase extent count by 1. Mapping in the new
* extent can increase the extent count by 1 again i.e.
* | Old extent | New extent | Old extent |
* Hence number of extents increases by 2.
*/
#define XFS_IEXT_REFLINK_END_COW_CNT (2)
/*
* Removing an initial range of source/donor file's extent and adding a new
* extent (from donor/source file) in its place will cause extent count to
* increase by 1.
*/
#define XFS_IEXT_SWAP_RMAP_CNT (1)
/*
* Fork handling.
*/
#define XFS_IFORK_MAXEXT(ip, w) \
(xfs_inode_fork_size(ip, w) / sizeof(xfs_bmbt_rec_t))
static inline bool xfs_ifork_has_extents(struct xfs_ifork *ifp)
{
return ifp->if_format == XFS_DINODE_FMT_EXTENTS ||
ifp->if_format == XFS_DINODE_FMT_BTREE;
}
static inline xfs_extnum_t xfs_ifork_nextents(struct xfs_ifork *ifp)
{
if (!ifp)
return 0;
return ifp->if_nextents;
}
static inline int8_t xfs_ifork_format(struct xfs_ifork *ifp)
{
if (!ifp)
return XFS_DINODE_FMT_EXTENTS;
return ifp->if_format;
}
static inline xfs_extnum_t xfs_iext_max_nextents(bool has_large_extent_counts,
int whichfork)
{
Annotation
- Detected declarations: `struct xfs_inode_log_item`, `struct xfs_dinode`, `struct xfs_ifork`, `function extent`, `function xfs_ifork_nextents`, `function xfs_ifork_format`, `function xfs_iext_max_nextents`, `function xfs_dfork_data_extents`, `function xfs_dfork_attr_extents`, `function xfs_dfork_nextents`.
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.