return(extra_blocks);
}
+/* Map btnum to buffer ops for the types that need it. */
+static const struct xfs_buf_ops *
+btnum_to_ops(
+ xfs_btnum_t btnum)
+{
+ switch (btnum) {
+ case XFS_BTNUM_BNO:
+ case XFS_BTNUM_CNT:
+ return &xfs_allocbt_buf_ops;
+ case XFS_BTNUM_INO:
+ case XFS_BTNUM_FINO:
+ return &xfs_inobt_buf_ops;
+ case XFS_BTNUM_RMAP:
+ return &xfs_rmapbt_buf_ops;
+ case XFS_BTNUM_REFC:
+ return &xfs_refcountbt_buf_ops;
+ default:
+ ASSERT(0);
+ return NULL;
+ }
+}
+
static void
prop_freespace_cursor(xfs_mount_t *mp, xfs_agnumber_t agno,
bt_status_t *btree_curs, xfs_agblock_t startblock,
xfs_alloc_ptr_t *bt_ptr;
xfs_agblock_t agbno;
bt_stat_level_t *lptr;
+ const struct xfs_buf_ops *ops = btnum_to_ops(btnum);
ASSERT(btnum == XFS_BTNUM_BNO || btnum == XFS_BTNUM_CNT);
/*
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_allocbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, btnum, level,
extent_tree_node_t *ext_ptr;
bt_stat_level_t *lptr;
xfs_extlen_t freeblks;
+ const struct xfs_buf_ops *ops = btnum_to_ops(btnum);
ASSERT(btnum == XFS_BTNUM_BNO || btnum == XFS_BTNUM_CNT);
/*
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_allocbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, btnum, i, 0, agno, 0);
/*
* block initialization, lay in block header
*/
- lptr->buf_p->b_ops = &xfs_allocbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, btnum, 0, 0, agno, 0);
xfs_inobt_ptr_t *bt_ptr;
xfs_agblock_t agbno;
bt_stat_level_t *lptr;
+ const struct xfs_buf_ops *ops = btnum_to_ops(btnum);
level++;
/*
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_inobt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, btnum,
xfs_inobt_rec_t *bt_rec;
ino_tree_node_t *ino_rec;
bt_stat_level_t *lptr;
+ const struct xfs_buf_ops *ops = btnum_to_ops(btnum);
xfs_agino_t count = 0;
xfs_agino_t freecount = 0;
int inocnt;
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_inobt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, btnum, i, 0, agno, 0);
/*
* block initialization, lay in block header
*/
- lptr->buf_p->b_ops = &xfs_inobt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, btnum, 0, 0, agno, 0);
xfs_rmap_ptr_t *bt_ptr;
xfs_agblock_t agbno;
struct bt_stat_level *lptr;
+ const struct xfs_buf_ops *ops = btnum_to_ops(XFS_BTNUM_RMAP);
level++;
/*
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_rmapbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_RMAP,
struct xfs_rmap_irec highest_key = {0};
struct xfs_rmap_irec hi_key = {0};
struct bt_stat_level *lptr;
+ const struct xfs_buf_ops *ops = btnum_to_ops(XFS_BTNUM_RMAP);
int numrecs;
int level = btree_curs->num_levels;
int error;
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_rmapbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_RMAP,
/*
* block initialization, lay in block header
*/
- lptr->buf_p->b_ops = &xfs_rmapbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_RMAP,
xfs_refcount_ptr_t *bt_ptr;
xfs_agblock_t agbno;
struct bt_stat_level *lptr;
+ const struct xfs_buf_ops *ops = btnum_to_ops(XFS_BTNUM_REFC);
level++;
/*
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_refcountbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_REFC,
struct xfs_slab_cursor *refc_cur;
struct xfs_refcount_rec *bt_rec;
struct bt_stat_level *lptr;
+ const struct xfs_buf_ops *ops = btnum_to_ops(XFS_BTNUM_REFC);
int numrecs;
int level = btree_curs->num_levels;
int error;
* initialize block header
*/
- lptr->buf_p->b_ops = &xfs_refcountbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_REFC,
/*
* block initialization, lay in block header
*/
- lptr->buf_p->b_ops = &xfs_refcountbt_buf_ops;
+ lptr->buf_p->b_ops = ops;
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
libxfs_btree_init_block(mp, lptr->buf_p, XFS_BTNUM_REFC,