diff options
author | Darrick J. Wong <djwong@kernel.org> | 2022-07-14 11:06:29 -0700 |
---|---|---|
committer | Darrick J. Wong <djwong@kernel.org> | 2022-11-09 19:07:34 -0800 |
commit | 43f6ef45082f625560bd722fdda85b0972cae858 (patch) | |
tree | fe70cbe2bd30ad9a656aa7d9a62c70b36a7bb453 /fs/xfs/xfs_buf.h | |
parent | 874d3be202b1191e9248573a08cea47bd5c6536c (diff) |
xfs: teach buftargs to maintain their own buffer hashtable
Currently, cached buffers are indexed by per-AG hashtables. This works
great for the data device, but won't work for in-memory btrees. Make it
so that buftargs can index buffers too. Introduce XFS_BSTATE_CACHED as
an explicit state flag for buffers that are cached in an rhashtable,
since we can't rely on b_pag being set for buffers that are cached but
not on behalf of an AG. We'll soon be using the buffer cache for
xfiles.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Diffstat (limited to 'fs/xfs/xfs_buf.h')
-rw-r--r-- | fs/xfs/xfs_buf.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h index 467ddb2e2f0d..d7bf7f657e99 100644 --- a/fs/xfs/xfs_buf.h +++ b/fs/xfs/xfs_buf.h @@ -82,6 +82,7 @@ typedef unsigned int xfs_buf_flags_t; */ #define XFS_BSTATE_DISPOSE (1 << 0) /* buffer being discarded */ #define XFS_BSTATE_IN_FLIGHT (1 << 1) /* I/O in flight */ +#define XFS_BSTATE_CACHED (1 << 2) /* cached buffer */ /* * The xfs_buftarg contains 2 notions of "sector size" - @@ -102,11 +103,16 @@ typedef struct xfs_buftarg { struct dax_device *bt_daxdev; u64 bt_dax_part_off; struct xfs_mount *bt_mount; + unsigned int bt_flags; unsigned int bt_meta_sectorsize; size_t bt_meta_sectormask; size_t bt_logical_sectorsize; size_t bt_logical_sectormask; + /* self-caching buftargs */ + spinlock_t bt_hashlock; + struct rhashtable bt_bufhash; + /* LRU control structures */ struct shrinker bt_shrinker; struct list_lru bt_lru; @@ -115,6 +121,9 @@ typedef struct xfs_buftarg { struct ratelimit_state bt_ioerror_rl; } xfs_buftarg_t; +/* the xfs_buftarg indexes buffers via bt_buf_hash */ +#define XFS_BUFTARG_SELF_CACHED (1U << 0) + #define XB_PAGES 2 struct xfs_buf_map { |