Commit 3d92c93b authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong

xfs: devirtualize ->db_to_fdb and ->db_to_fdindex

Now that the max bests value is in struct xfs_da_geometry both instances
of ->db_to_fdb and ->db_to_fdindex are identical.  Replace them with
local xfs_dir2_db_to_fdb and xfs_dir2_db_to_fdindex functions in
xfs_dir2_node.c.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 5893e4fe
...@@ -400,44 +400,6 @@ xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr) ...@@ -400,44 +400,6 @@ xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr)
((char *)hdr + sizeof(struct xfs_dir3_data_hdr)); ((char *)hdr + sizeof(struct xfs_dir3_data_hdr));
} }
/*
* Convert data space db to the corresponding free db.
*/
static xfs_dir2_db_t
xfs_dir2_db_to_fdb(struct xfs_da_geometry *geo, xfs_dir2_db_t db)
{
return xfs_dir2_byte_to_db(geo, XFS_DIR2_FREE_OFFSET) +
(db / geo->free_max_bests);
}
/*
* Convert data space db to the corresponding index in a free db.
*/
static int
xfs_dir2_db_to_fdindex(struct xfs_da_geometry *geo, xfs_dir2_db_t db)
{
return db % geo->free_max_bests;
}
/*
* Convert data space db to the corresponding free db.
*/
static xfs_dir2_db_t
xfs_dir3_db_to_fdb(struct xfs_da_geometry *geo, xfs_dir2_db_t db)
{
return xfs_dir2_byte_to_db(geo, XFS_DIR2_FREE_OFFSET) +
(db / geo->free_max_bests);
}
/*
* Convert data space db to the corresponding index in a free db.
*/
static int
xfs_dir3_db_to_fdindex(struct xfs_da_geometry *geo, xfs_dir2_db_t db)
{
return db % geo->free_max_bests;
}
static const struct xfs_dir_ops xfs_dir2_ops = { static const struct xfs_dir_ops xfs_dir2_ops = {
.sf_entsize = xfs_dir2_sf_entsize, .sf_entsize = xfs_dir2_sf_entsize,
.sf_nextentry = xfs_dir2_sf_nextentry, .sf_nextentry = xfs_dir2_sf_nextentry,
...@@ -467,9 +429,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = { ...@@ -467,9 +429,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = {
.data_first_entry_p = xfs_dir2_data_first_entry_p, .data_first_entry_p = xfs_dir2_data_first_entry_p,
.data_entry_p = xfs_dir2_data_entry_p, .data_entry_p = xfs_dir2_data_entry_p,
.data_unused_p = xfs_dir2_data_unused_p, .data_unused_p = xfs_dir2_data_unused_p,
.db_to_fdb = xfs_dir2_db_to_fdb,
.db_to_fdindex = xfs_dir2_db_to_fdindex,
}; };
static const struct xfs_dir_ops xfs_dir2_ftype_ops = { static const struct xfs_dir_ops xfs_dir2_ftype_ops = {
...@@ -501,9 +460,6 @@ static const struct xfs_dir_ops xfs_dir2_ftype_ops = { ...@@ -501,9 +460,6 @@ static const struct xfs_dir_ops xfs_dir2_ftype_ops = {
.data_first_entry_p = xfs_dir2_ftype_data_first_entry_p, .data_first_entry_p = xfs_dir2_ftype_data_first_entry_p,
.data_entry_p = xfs_dir2_data_entry_p, .data_entry_p = xfs_dir2_data_entry_p,
.data_unused_p = xfs_dir2_data_unused_p, .data_unused_p = xfs_dir2_data_unused_p,
.db_to_fdb = xfs_dir2_db_to_fdb,
.db_to_fdindex = xfs_dir2_db_to_fdindex,
}; };
static const struct xfs_dir_ops xfs_dir3_ops = { static const struct xfs_dir_ops xfs_dir3_ops = {
...@@ -535,9 +491,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = { ...@@ -535,9 +491,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = {
.data_first_entry_p = xfs_dir3_data_first_entry_p, .data_first_entry_p = xfs_dir3_data_first_entry_p,
.data_entry_p = xfs_dir3_data_entry_p, .data_entry_p = xfs_dir3_data_entry_p,
.data_unused_p = xfs_dir3_data_unused_p, .data_unused_p = xfs_dir3_data_unused_p,
.db_to_fdb = xfs_dir3_db_to_fdb,
.db_to_fdindex = xfs_dir3_db_to_fdindex,
}; };
/* /*
......
...@@ -71,11 +71,6 @@ struct xfs_dir_ops { ...@@ -71,11 +71,6 @@ struct xfs_dir_ops {
(*data_entry_p)(struct xfs_dir2_data_hdr *hdr); (*data_entry_p)(struct xfs_dir2_data_hdr *hdr);
struct xfs_dir2_data_unused * struct xfs_dir2_data_unused *
(*data_unused_p)(struct xfs_dir2_data_hdr *hdr); (*data_unused_p)(struct xfs_dir2_data_hdr *hdr);
xfs_dir2_db_t (*db_to_fdb)(struct xfs_da_geometry *geo,
xfs_dir2_db_t db);
int (*db_to_fdindex)(struct xfs_da_geometry *geo,
xfs_dir2_db_t db);
}; };
extern const struct xfs_dir_ops * extern const struct xfs_dir_ops *
......
...@@ -33,6 +33,25 @@ static int xfs_dir2_leafn_remove(xfs_da_args_t *args, struct xfs_buf *bp, ...@@ -33,6 +33,25 @@ static int xfs_dir2_leafn_remove(xfs_da_args_t *args, struct xfs_buf *bp,
int index, xfs_da_state_blk_t *dblk, int index, xfs_da_state_blk_t *dblk,
int *rval); int *rval);
/*
* Convert data space db to the corresponding free db.
*/
static xfs_dir2_db_t
xfs_dir2_db_to_fdb(struct xfs_da_geometry *geo, xfs_dir2_db_t db)
{
return xfs_dir2_byte_to_db(geo, XFS_DIR2_FREE_OFFSET) +
(db / geo->free_max_bests);
}
/*
* Convert data space db to the corresponding index in a free db.
*/
static int
xfs_dir2_db_to_fdindex(struct xfs_da_geometry *geo, xfs_dir2_db_t db)
{
return db % geo->free_max_bests;
}
/* /*
* Check internal consistency of a leafn block. * Check internal consistency of a leafn block.
*/ */
...@@ -680,7 +699,7 @@ xfs_dir2_leafn_lookup_for_addname( ...@@ -680,7 +699,7 @@ xfs_dir2_leafn_lookup_for_addname(
* Convert the data block to the free block * Convert the data block to the free block
* holding its freespace information. * holding its freespace information.
*/ */
newfdb = dp->d_ops->db_to_fdb(args->geo, newdb); newfdb = xfs_dir2_db_to_fdb(args->geo, newdb);
/* /*
* If it's not the one we have in hand, read it in. * If it's not the one we have in hand, read it in.
*/ */
...@@ -704,7 +723,7 @@ xfs_dir2_leafn_lookup_for_addname( ...@@ -704,7 +723,7 @@ xfs_dir2_leafn_lookup_for_addname(
/* /*
* Get the index for our entry. * Get the index for our entry.
*/ */
fi = dp->d_ops->db_to_fdindex(args->geo, curdb); fi = xfs_dir2_db_to_fdindex(args->geo, curdb);
/* /*
* If it has room, return it. * If it has room, return it.
*/ */
...@@ -1326,7 +1345,7 @@ xfs_dir2_leafn_remove( ...@@ -1326,7 +1345,7 @@ xfs_dir2_leafn_remove(
* Convert the data block number to a free block, * Convert the data block number to a free block,
* read in the free block. * read in the free block.
*/ */
fdb = dp->d_ops->db_to_fdb(args->geo, db); fdb = xfs_dir2_db_to_fdb(args->geo, db);
error = xfs_dir2_free_read(tp, dp, error = xfs_dir2_free_read(tp, dp,
xfs_dir2_db_to_da(args->geo, fdb), xfs_dir2_db_to_da(args->geo, fdb),
&fbp); &fbp);
...@@ -1346,7 +1365,7 @@ xfs_dir2_leafn_remove( ...@@ -1346,7 +1365,7 @@ xfs_dir2_leafn_remove(
/* /*
* Calculate which entry we need to fix. * Calculate which entry we need to fix.
*/ */
findex = dp->d_ops->db_to_fdindex(args->geo, db); findex = xfs_dir2_db_to_fdindex(args->geo, db);
longest = be16_to_cpu(bf[0].length); longest = be16_to_cpu(bf[0].length);
/* /*
* If the data block is now empty we can get rid of it * If the data block is now empty we can get rid of it
...@@ -1689,7 +1708,7 @@ xfs_dir2_node_add_datablk( ...@@ -1689,7 +1708,7 @@ xfs_dir2_node_add_datablk(
* Get the freespace block corresponding to the data block * Get the freespace block corresponding to the data block
* that was just allocated. * that was just allocated.
*/ */
fbno = dp->d_ops->db_to_fdb(args->geo, *dbno); fbno = xfs_dir2_db_to_fdb(args->geo, *dbno);
error = xfs_dir2_free_try_read(tp, dp, error = xfs_dir2_free_try_read(tp, dp,
xfs_dir2_db_to_da(args->geo, fbno), &fbp); xfs_dir2_db_to_da(args->geo, fbno), &fbp);
if (error) if (error)
...@@ -1704,11 +1723,11 @@ xfs_dir2_node_add_datablk( ...@@ -1704,11 +1723,11 @@ xfs_dir2_node_add_datablk(
if (error) if (error)
return error; return error;
if (dp->d_ops->db_to_fdb(args->geo, *dbno) != fbno) { if (xfs_dir2_db_to_fdb(args->geo, *dbno) != fbno) {
xfs_alert(mp, xfs_alert(mp,
"%s: dir ino %llu needed freesp block %lld for data block %lld, got %lld", "%s: dir ino %llu needed freesp block %lld for data block %lld, got %lld",
__func__, (unsigned long long)dp->i_ino, __func__, (unsigned long long)dp->i_ino,
(long long)dp->d_ops->db_to_fdb(args->geo, *dbno), (long long)xfs_dir2_db_to_fdb(args->geo, *dbno),
(long long)*dbno, (long long)fbno); (long long)*dbno, (long long)fbno);
if (fblk) { if (fblk) {
xfs_alert(mp, xfs_alert(mp,
...@@ -1737,7 +1756,7 @@ xfs_dir2_node_add_datablk( ...@@ -1737,7 +1756,7 @@ xfs_dir2_node_add_datablk(
} }
/* Set the freespace block index from the data block number. */ /* Set the freespace block index from the data block number. */
*findex = dp->d_ops->db_to_fdindex(args->geo, *dbno); *findex = xfs_dir2_db_to_fdindex(args->geo, *dbno);
/* Extend the freespace table if the new data block is off the end. */ /* Extend the freespace table if the new data block is off the end. */
if (*findex >= hdr->nvalid) { if (*findex >= hdr->nvalid) {
......
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