Commit 90cfae81 authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: move lru refs to the btree ops structure

Move the btree buffer LRU refcount to the btree ops structure so that we
can eliminate the last bc_btnum switch in the generic btree code.  We're
about to create repair-specific btree types, and we don't want that
stuff cluttering up libxfs.
Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent ad065ef0
...@@ -458,6 +458,8 @@ const struct xfs_btree_ops xfs_bnobt_ops = { ...@@ -458,6 +458,8 @@ const struct xfs_btree_ops xfs_bnobt_ops = {
.rec_len = sizeof(xfs_alloc_rec_t), .rec_len = sizeof(xfs_alloc_rec_t),
.key_len = sizeof(xfs_alloc_key_t), .key_len = sizeof(xfs_alloc_key_t),
.lru_refs = XFS_ALLOC_BTREE_REF,
.dup_cursor = xfs_allocbt_dup_cursor, .dup_cursor = xfs_allocbt_dup_cursor,
.set_root = xfs_allocbt_set_root, .set_root = xfs_allocbt_set_root,
.alloc_block = xfs_allocbt_alloc_block, .alloc_block = xfs_allocbt_alloc_block,
...@@ -483,6 +485,8 @@ const struct xfs_btree_ops xfs_cntbt_ops = { ...@@ -483,6 +485,8 @@ const struct xfs_btree_ops xfs_cntbt_ops = {
.rec_len = sizeof(xfs_alloc_rec_t), .rec_len = sizeof(xfs_alloc_rec_t),
.key_len = sizeof(xfs_alloc_key_t), .key_len = sizeof(xfs_alloc_key_t),
.lru_refs = XFS_ALLOC_BTREE_REF,
.dup_cursor = xfs_allocbt_dup_cursor, .dup_cursor = xfs_allocbt_dup_cursor,
.set_root = xfs_allocbt_set_root, .set_root = xfs_allocbt_set_root,
.alloc_block = xfs_allocbt_alloc_block, .alloc_block = xfs_allocbt_alloc_block,
......
...@@ -530,6 +530,8 @@ const struct xfs_btree_ops xfs_bmbt_ops = { ...@@ -530,6 +530,8 @@ const struct xfs_btree_ops xfs_bmbt_ops = {
.rec_len = sizeof(xfs_bmbt_rec_t), .rec_len = sizeof(xfs_bmbt_rec_t),
.key_len = sizeof(xfs_bmbt_key_t), .key_len = sizeof(xfs_bmbt_key_t),
.lru_refs = XFS_BMAP_BTREE_REF,
.dup_cursor = xfs_bmbt_dup_cursor, .dup_cursor = xfs_bmbt_dup_cursor,
.update_cursor = xfs_bmbt_update_cursor, .update_cursor = xfs_bmbt_update_cursor,
.alloc_block = xfs_bmbt_alloc_block, .alloc_block = xfs_bmbt_alloc_block,
......
...@@ -1284,32 +1284,12 @@ xfs_btree_buf_to_ptr( ...@@ -1284,32 +1284,12 @@ xfs_btree_buf_to_ptr(
} }
} }
STATIC void static inline void
xfs_btree_set_refs( xfs_btree_set_refs(
struct xfs_btree_cur *cur, struct xfs_btree_cur *cur,
struct xfs_buf *bp) struct xfs_buf *bp)
{ {
switch (cur->bc_btnum) { xfs_buf_set_ref(bp, cur->bc_ops->lru_refs);
case XFS_BTNUM_BNO:
case XFS_BTNUM_CNT:
xfs_buf_set_ref(bp, XFS_ALLOC_BTREE_REF);
break;
case XFS_BTNUM_INO:
case XFS_BTNUM_FINO:
xfs_buf_set_ref(bp, XFS_INO_BTREE_REF);
break;
case XFS_BTNUM_BMAP:
xfs_buf_set_ref(bp, XFS_BMAP_BTREE_REF);
break;
case XFS_BTNUM_RMAP:
xfs_buf_set_ref(bp, XFS_RMAP_BTREE_REF);
break;
case XFS_BTNUM_REFC:
xfs_buf_set_ref(bp, XFS_REFC_BTREE_REF);
break;
default:
ASSERT(0);
}
} }
int int
......
...@@ -120,6 +120,9 @@ struct xfs_btree_ops { ...@@ -120,6 +120,9 @@ struct xfs_btree_ops {
size_t key_len; size_t key_len;
size_t rec_len; size_t rec_len;
/* LRU refcount to set on each btree buffer created */
unsigned int lru_refs;
/* cursor operations */ /* cursor operations */
struct xfs_btree_cur *(*dup_cursor)(struct xfs_btree_cur *); struct xfs_btree_cur *(*dup_cursor)(struct xfs_btree_cur *);
void (*update_cursor)(struct xfs_btree_cur *src, void (*update_cursor)(struct xfs_btree_cur *src,
......
...@@ -402,6 +402,8 @@ const struct xfs_btree_ops xfs_inobt_ops = { ...@@ -402,6 +402,8 @@ const struct xfs_btree_ops xfs_inobt_ops = {
.rec_len = sizeof(xfs_inobt_rec_t), .rec_len = sizeof(xfs_inobt_rec_t),
.key_len = sizeof(xfs_inobt_key_t), .key_len = sizeof(xfs_inobt_key_t),
.lru_refs = XFS_INO_BTREE_REF,
.dup_cursor = xfs_inobt_dup_cursor, .dup_cursor = xfs_inobt_dup_cursor,
.set_root = xfs_inobt_set_root, .set_root = xfs_inobt_set_root,
.alloc_block = xfs_inobt_alloc_block, .alloc_block = xfs_inobt_alloc_block,
...@@ -424,6 +426,8 @@ const struct xfs_btree_ops xfs_finobt_ops = { ...@@ -424,6 +426,8 @@ const struct xfs_btree_ops xfs_finobt_ops = {
.rec_len = sizeof(xfs_inobt_rec_t), .rec_len = sizeof(xfs_inobt_rec_t),
.key_len = sizeof(xfs_inobt_key_t), .key_len = sizeof(xfs_inobt_key_t),
.lru_refs = XFS_INO_BTREE_REF,
.dup_cursor = xfs_inobt_dup_cursor, .dup_cursor = xfs_inobt_dup_cursor,
.set_root = xfs_finobt_set_root, .set_root = xfs_finobt_set_root,
.alloc_block = xfs_finobt_alloc_block, .alloc_block = xfs_finobt_alloc_block,
......
...@@ -321,6 +321,8 @@ const struct xfs_btree_ops xfs_refcountbt_ops = { ...@@ -321,6 +321,8 @@ const struct xfs_btree_ops xfs_refcountbt_ops = {
.rec_len = sizeof(struct xfs_refcount_rec), .rec_len = sizeof(struct xfs_refcount_rec),
.key_len = sizeof(struct xfs_refcount_key), .key_len = sizeof(struct xfs_refcount_key),
.lru_refs = XFS_REFC_BTREE_REF,
.dup_cursor = xfs_refcountbt_dup_cursor, .dup_cursor = xfs_refcountbt_dup_cursor,
.set_root = xfs_refcountbt_set_root, .set_root = xfs_refcountbt_set_root,
.alloc_block = xfs_refcountbt_alloc_block, .alloc_block = xfs_refcountbt_alloc_block,
......
...@@ -478,6 +478,8 @@ const struct xfs_btree_ops xfs_rmapbt_ops = { ...@@ -478,6 +478,8 @@ const struct xfs_btree_ops xfs_rmapbt_ops = {
.rec_len = sizeof(struct xfs_rmap_rec), .rec_len = sizeof(struct xfs_rmap_rec),
.key_len = 2 * sizeof(struct xfs_rmap_key), .key_len = 2 * sizeof(struct xfs_rmap_key),
.lru_refs = XFS_RMAP_BTREE_REF,
.dup_cursor = xfs_rmapbt_dup_cursor, .dup_cursor = xfs_rmapbt_dup_cursor,
.set_root = xfs_rmapbt_set_root, .set_root = xfs_rmapbt_set_root,
.alloc_block = xfs_rmapbt_alloc_block, .alloc_block = xfs_rmapbt_alloc_block,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment