hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/xfs/xfs_inode_item.h
....@@ -13,28 +13,37 @@
1313 struct xfs_inode;
1414 struct xfs_mount;
1515
16
-typedef struct xfs_inode_log_item {
17
- xfs_log_item_t ili_item; /* common portion */
16
+struct xfs_inode_log_item {
17
+ struct xfs_log_item ili_item; /* common portion */
1818 struct xfs_inode *ili_inode; /* inode ptr */
19
- xfs_lsn_t ili_flush_lsn; /* lsn at last flush */
20
- xfs_lsn_t ili_last_lsn; /* lsn at last transaction */
21
- unsigned short ili_lock_flags; /* lock flags */
22
- unsigned short ili_logged; /* flushed logged data */
19
+ unsigned short ili_lock_flags; /* inode lock flags */
20
+ /*
21
+ * The ili_lock protects the interactions between the dirty state and
22
+ * the flush state of the inode log item. This allows us to do atomic
23
+ * modifications of multiple state fields without having to hold a
24
+ * specific inode lock to serialise them.
25
+ *
26
+ * We need atomic changes between inode dirtying, inode flushing and
27
+ * inode completion, but these all hold different combinations of
28
+ * ILOCK and IFLUSHING and hence we need some other method of
29
+ * serialising updates to the flush state.
30
+ */
31
+ spinlock_t ili_lock; /* flush state lock */
2332 unsigned int ili_last_fields; /* fields when flushed */
2433 unsigned int ili_fields; /* fields to be logged */
2534 unsigned int ili_fsync_fields; /* logged since last fsync */
26
-} xfs_inode_log_item_t;
35
+ xfs_lsn_t ili_flush_lsn; /* lsn at last flush */
36
+ xfs_csn_t ili_commit_seq; /* last transaction commit */
37
+};
2738
28
-static inline int xfs_inode_clean(xfs_inode_t *ip)
39
+static inline int xfs_inode_clean(struct xfs_inode *ip)
2940 {
3041 return !ip->i_itemp || !(ip->i_itemp->ili_fields & XFS_ILOG_ALL);
3142 }
3243
3344 extern void xfs_inode_item_init(struct xfs_inode *, struct xfs_mount *);
3445 extern void xfs_inode_item_destroy(struct xfs_inode *);
35
-extern void xfs_iflush_done(struct xfs_buf *, struct xfs_log_item *);
36
-extern void xfs_istale_done(struct xfs_buf *, struct xfs_log_item *);
37
-extern void xfs_iflush_abort(struct xfs_inode *, bool);
46
+extern void xfs_iflush_abort(struct xfs_inode *);
3847 extern int xfs_inode_item_format_convert(xfs_log_iovec_t *,
3948 struct xfs_inode_log_format *);
4049