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: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
5893e4feb0
commit
3d92c93b70
|
@ -400,44 +400,6 @@ xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *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 = {
|
||||
.sf_entsize = xfs_dir2_sf_entsize,
|
||||
.sf_nextentry = xfs_dir2_sf_nextentry,
|
||||
|
@ -467,9 +429,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = {
|
|||
.data_first_entry_p = xfs_dir2_data_first_entry_p,
|
||||
.data_entry_p = xfs_dir2_data_entry_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 = {
|
||||
|
@ -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_entry_p = xfs_dir2_data_entry_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 = {
|
||||
|
@ -535,9 +491,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = {
|
|||
.data_first_entry_p = xfs_dir3_data_first_entry_p,
|
||||
.data_entry_p = xfs_dir3_data_entry_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 {
|
|||
(*data_entry_p)(struct xfs_dir2_data_hdr *hdr);
|
||||
struct xfs_dir2_data_unused *
|
||||
(*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 *
|
||||
|
|
|
@ -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 *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.
|
||||
*/
|
||||
|
@ -680,7 +699,7 @@ xfs_dir2_leafn_lookup_for_addname(
|
|||
* Convert the data block to the free block
|
||||
* 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.
|
||||
*/
|
||||
|
@ -704,7 +723,7 @@ xfs_dir2_leafn_lookup_for_addname(
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
@ -1326,7 +1345,7 @@ xfs_dir2_leafn_remove(
|
|||
* Convert the data block number to a 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,
|
||||
xfs_dir2_db_to_da(args->geo, fdb),
|
||||
&fbp);
|
||||
|
@ -1346,7 +1365,7 @@ xfs_dir2_leafn_remove(
|
|||
/*
|
||||
* 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);
|
||||
/*
|
||||
* If the data block is now empty we can get rid of it
|
||||
|
@ -1689,7 +1708,7 @@ xfs_dir2_node_add_datablk(
|
|||
* Get the freespace block corresponding to the data block
|
||||
* 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,
|
||||
xfs_dir2_db_to_da(args->geo, fbno), &fbp);
|
||||
if (error)
|
||||
|
@ -1704,11 +1723,11 @@ xfs_dir2_node_add_datablk(
|
|||
if (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,
|
||||
"%s: dir ino %llu needed freesp block %lld for data block %lld, got %lld",
|
||||
__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);
|
||||
if (fblk) {
|
||||
xfs_alert(mp,
|
||||
|
@ -1737,7 +1756,7 @@ xfs_dir2_node_add_datablk(
|
|||
}
|
||||
|
||||
/* 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. */
|
||||
if (*findex >= hdr->nvalid) {
|
||||
|
|
Loading…
Reference in New Issue