On Mon, Jun 01, 2020 at 09:28:04PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > This code isn't needed anymore, so get rid of it. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > repair/phase5.c | 242 ------------------------------------------------------- > 1 file changed, 242 deletions(-) > > > diff --git a/repair/phase5.c b/repair/phase5.c > index ad009416..439c1065 100644 > --- a/repair/phase5.c > +++ b/repair/phase5.c > @@ -21,52 +21,6 @@ > #include "bulkload.h" > #include "agbtree.h" > > -/* > - * we maintain the current slice (path from root to leaf) > - * of the btree incore. when we need a new block, we ask > - * the block allocator for the address of a block on that > - * level, map the block in, and set up the appropriate > - * pointers (child, silbing, etc.) and keys that should > - * point to the new block. > - */ > -typedef struct bt_stat_level { > - /* > - * set in setup_cursor routine and maintained in the tree-building > - * routines > - */ > - xfs_buf_t *buf_p; /* 2 buffer pointers to ... */ > - xfs_buf_t *prev_buf_p; > - xfs_agblock_t agbno; /* current block being filled */ > - xfs_agblock_t prev_agbno; /* previous block */ > - /* > - * set in calculate/init cursor routines for each btree level > - */ > - int num_recs_tot; /* # tree recs in level */ > - int num_blocks; /* # tree blocks in level */ > - int num_recs_pb; /* num_recs_tot / num_blocks */ > - int modulo; /* num_recs_tot % num_blocks */ > -} bt_stat_level_t; > - > -typedef struct bt_status { > - int init; /* cursor set up once? */ > - int num_levels; /* # of levels in btree */ > - xfs_extlen_t num_tot_blocks; /* # blocks alloc'ed for tree */ > - xfs_extlen_t num_free_blocks;/* # blocks currently unused */ > - > - xfs_agblock_t root; /* root block */ > - /* > - * list of blocks to be used to set up this tree > - * and pointer to the first unused block on the list > - */ > - xfs_agblock_t *btree_blocks; /* block list */ > - xfs_agblock_t *free_btree_blocks; /* first unused block */ > - /* > - * per-level status info > - */ > - bt_stat_level_t level[XFS_BTREE_MAXLEVELS]; > - uint64_t owner; /* owner */ > -} bt_status_t; > - > static uint64_t *sb_icount_ag; /* allocated inodes per ag */ > static uint64_t *sb_ifree_ag; /* free inodes per ag */ > static uint64_t *sb_fdblocks_ag; /* free data blocks per ag */ > @@ -164,202 +118,6 @@ mk_incore_fstree( > return(num_extents); > } > > -static xfs_agblock_t > -get_next_blockaddr(xfs_agnumber_t agno, int level, bt_status_t *curs) > -{ > - ASSERT(curs->free_btree_blocks < curs->btree_blocks + > - curs->num_tot_blocks); > - ASSERT(curs->num_free_blocks > 0); > - > - curs->num_free_blocks--; > - return(*curs->free_btree_blocks++); > -} > - > -/* > - * set up the dynamically allocated block allocation data in the btree > - * cursor that depends on the info in the static portion of the cursor. > - * allocates space from the incore bno/bcnt extent trees and sets up > - * the first path up the left side of the tree. Also sets up the > - * cursor pointer to the btree root. called by init_freespace_cursor() > - * and init_ino_cursor() > - */ > -static void > -setup_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *curs) > -{ > - int j; > - unsigned int u; > - xfs_extlen_t big_extent_len; > - xfs_agblock_t big_extent_start; > - extent_tree_node_t *ext_ptr; > - extent_tree_node_t *bno_ext_ptr; > - xfs_extlen_t blocks_allocated; > - xfs_agblock_t *agb_ptr; > - int error; > - > - /* > - * get the number of blocks we need to allocate, then > - * set up block number array, set the free block pointer > - * to the first block in the array, and null the array > - */ > - big_extent_len = curs->num_tot_blocks; > - blocks_allocated = 0; > - > - ASSERT(big_extent_len > 0); > - > - if ((curs->btree_blocks = malloc(sizeof(xfs_agblock_t) > - * big_extent_len)) == NULL) > - do_error(_("could not set up btree block array\n")); > - > - agb_ptr = curs->free_btree_blocks = curs->btree_blocks; > - > - for (j = 0; j < curs->num_free_blocks; j++, agb_ptr++) > - *agb_ptr = NULLAGBLOCK; > - > - /* > - * grab the smallest extent and use it up, then get the > - * next smallest. This mimics the init_*_cursor code. > - */ > - ext_ptr = findfirst_bcnt_extent(agno); > - > - agb_ptr = curs->btree_blocks; > - > - /* > - * set up the free block array > - */ > - while (blocks_allocated < big_extent_len) { > - if (!ext_ptr) > - do_error( > -_("error - not enough free space in filesystem\n")); > - /* > - * use up the extent we've got > - */ > - for (u = 0; u < ext_ptr->ex_blockcount && > - blocks_allocated < big_extent_len; u++) { > - ASSERT(agb_ptr < curs->btree_blocks > - + curs->num_tot_blocks); > - *agb_ptr++ = ext_ptr->ex_startblock + u; > - blocks_allocated++; > - } > - > - error = rmap_add_ag_rec(mp, agno, ext_ptr->ex_startblock, u, > - curs->owner); > - if (error) > - do_error(_("could not set up btree rmaps: %s\n"), > - strerror(-error)); > - > - /* > - * if we only used part of this last extent, then we > - * need only to reset the extent in the extent > - * trees and we're done > - */ > - if (u < ext_ptr->ex_blockcount) { > - big_extent_start = ext_ptr->ex_startblock + u; > - big_extent_len = ext_ptr->ex_blockcount - u; > - > - ASSERT(big_extent_len > 0); > - > - bno_ext_ptr = find_bno_extent(agno, > - ext_ptr->ex_startblock); > - ASSERT(bno_ext_ptr != NULL); > - get_bno_extent(agno, bno_ext_ptr); > - release_extent_tree_node(bno_ext_ptr); > - > - ext_ptr = get_bcnt_extent(agno, ext_ptr->ex_startblock, > - ext_ptr->ex_blockcount); > - release_extent_tree_node(ext_ptr); > -#ifdef XR_BLD_FREE_TRACE > - fprintf(stderr, "releasing extent: %u [%u %u]\n", > - agno, ext_ptr->ex_startblock, > - ext_ptr->ex_blockcount); > - fprintf(stderr, "blocks_allocated = %d\n", > - blocks_allocated); > -#endif > - > - add_bno_extent(agno, big_extent_start, big_extent_len); > - add_bcnt_extent(agno, big_extent_start, big_extent_len); > - > - return; > - } > - /* > - * delete the used-up extent from both extent trees and > - * find next biggest extent > - */ > -#ifdef XR_BLD_FREE_TRACE > - fprintf(stderr, "releasing extent: %u [%u %u]\n", > - agno, ext_ptr->ex_startblock, ext_ptr->ex_blockcount); > -#endif > - bno_ext_ptr = find_bno_extent(agno, ext_ptr->ex_startblock); > - ASSERT(bno_ext_ptr != NULL); > - get_bno_extent(agno, bno_ext_ptr); > - release_extent_tree_node(bno_ext_ptr); > - > - ext_ptr = get_bcnt_extent(agno, ext_ptr->ex_startblock, > - ext_ptr->ex_blockcount); > - ASSERT(ext_ptr != NULL); > - release_extent_tree_node(ext_ptr); > - > - ext_ptr = findfirst_bcnt_extent(agno); > - } > -#ifdef XR_BLD_FREE_TRACE > - fprintf(stderr, "blocks_allocated = %d\n", > - blocks_allocated); > -#endif > -} > - > -static void > -write_cursor(bt_status_t *curs) > -{ > - int i; > - > - for (i = 0; i < curs->num_levels; i++) { > -#if defined(XR_BLD_FREE_TRACE) || defined(XR_BLD_INO_TRACE) > - fprintf(stderr, "writing bt block %u\n", curs->level[i].agbno); > -#endif > - if (curs->level[i].prev_buf_p != NULL) { > - ASSERT(curs->level[i].prev_agbno != NULLAGBLOCK); > -#if defined(XR_BLD_FREE_TRACE) || defined(XR_BLD_INO_TRACE) > - fprintf(stderr, "writing bt prev block %u\n", > - curs->level[i].prev_agbno); > -#endif > - libxfs_buf_mark_dirty(curs->level[i].prev_buf_p); > - libxfs_buf_relse(curs->level[i].prev_buf_p); > - } > - libxfs_buf_mark_dirty(curs->level[i].buf_p); > - libxfs_buf_relse(curs->level[i].buf_p); > - } > -} > - > -static void > -finish_cursor(bt_status_t *curs) > -{ > - ASSERT(curs->num_free_blocks == 0); > - free(curs->btree_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: > - return &xfs_bnobt_buf_ops; > - case XFS_BTNUM_CNT: > - return &xfs_cntbt_buf_ops; > - case XFS_BTNUM_INO: > - return &xfs_inobt_buf_ops; > - case XFS_BTNUM_FINO: > - return &xfs_finobt_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; > - } > -} > - > /* > * XXX: yet more code that can be shared with mkfs, growfs. > */ >