Line data Source code
1 : // SPDX-License-Identifier: GPL-2.0 2 : /* 3 : * Copyright (c) 2000,2005 Silicon Graphics, Inc. 4 : * All Rights Reserved. 5 : */ 6 : #ifndef __XFS_INODE_ITEM_H__ 7 : #define __XFS_INODE_ITEM_H__ 8 : 9 : /* kernel only definitions */ 10 : 11 : struct xfs_buf; 12 : struct xfs_bmbt_rec; 13 : struct xfs_inode; 14 : struct xfs_mount; 15 : 16 : struct xfs_inode_log_item { 17 : struct xfs_log_item ili_item; /* common portion */ 18 : struct xfs_inode *ili_inode; /* inode ptr */ 19 : unsigned short ili_lock_flags; /* inode lock flags */ 20 : unsigned int ili_dirty_flags; /* dirty in current tx */ 21 : /* 22 : * The ili_lock protects the interactions between the dirty state and 23 : * the flush state of the inode log item. This allows us to do atomic 24 : * modifications of multiple state fields without having to hold a 25 : * specific inode lock to serialise them. 26 : * 27 : * We need atomic changes between inode dirtying, inode flushing and 28 : * inode completion, but these all hold different combinations of 29 : * ILOCK and IFLUSHING and hence we need some other method of 30 : * serialising updates to the flush state. 31 : */ 32 : spinlock_t ili_lock; /* flush state lock */ 33 : unsigned int ili_last_fields; /* fields when flushed */ 34 : unsigned int ili_fields; /* fields to be logged */ 35 : unsigned int ili_fsync_fields; /* logged since last fsync */ 36 : xfs_lsn_t ili_flush_lsn; /* lsn at last flush */ 37 : xfs_csn_t ili_commit_seq; /* last transaction commit */ 38 : }; 39 : 40 : static inline int xfs_inode_clean(struct xfs_inode *ip) 41 : { 42 612084729 : return !ip->i_itemp || !(ip->i_itemp->ili_fields & XFS_ILOG_ALL); 43 : } 44 : 45 : extern void xfs_inode_item_init(struct xfs_inode *, struct xfs_mount *); 46 : extern void xfs_inode_item_destroy(struct xfs_inode *); 47 : extern void xfs_iflush_abort(struct xfs_inode *); 48 : extern void xfs_iflush_shutdown_abort(struct xfs_inode *); 49 : extern int xfs_inode_item_format_convert(xfs_log_iovec_t *, 50 : struct xfs_inode_log_format *); 51 : 52 : extern struct kmem_cache *xfs_ili_cache; 53 : 54 : #endif /* __XFS_INODE_ITEM_H__ */