Commit 200dada7 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong

xfs: devirtualize ->free_hdr_to_disk

Replace the ->free_hdr_to_disk dir ops method with a directly called
xfs_dir2_free_hdr_to_disk helper that takes care of the differences
between the v4 and v5 on-disk format.
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 5ba30919
...@@ -468,34 +468,6 @@ xfs_dir3_db_to_fdindex(struct xfs_da_geometry *geo, xfs_dir2_db_t db) ...@@ -468,34 +468,6 @@ xfs_dir3_db_to_fdindex(struct xfs_da_geometry *geo, xfs_dir2_db_t db)
return db % xfs_dir3_free_max_bests(geo); return db % xfs_dir3_free_max_bests(geo);
} }
static void
xfs_dir2_free_hdr_to_disk(
struct xfs_dir2_free *to,
struct xfs_dir3_icfree_hdr *from)
{
ASSERT(from->magic == XFS_DIR2_FREE_MAGIC);
to->hdr.magic = cpu_to_be32(from->magic);
to->hdr.firstdb = cpu_to_be32(from->firstdb);
to->hdr.nvalid = cpu_to_be32(from->nvalid);
to->hdr.nused = cpu_to_be32(from->nused);
}
static void
xfs_dir3_free_hdr_to_disk(
struct xfs_dir2_free *to,
struct xfs_dir3_icfree_hdr *from)
{
struct xfs_dir3_free_hdr *hdr3 = (struct xfs_dir3_free_hdr *)to;
ASSERT(from->magic == XFS_DIR3_FREE_MAGIC);
hdr3->hdr.magic = cpu_to_be32(from->magic);
hdr3->firstdb = cpu_to_be32(from->firstdb);
hdr3->nvalid = cpu_to_be32(from->nvalid);
hdr3->nused = cpu_to_be32(from->nused);
}
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,
...@@ -527,7 +499,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = { ...@@ -527,7 +499,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = {
.data_unused_p = xfs_dir2_data_unused_p, .data_unused_p = xfs_dir2_data_unused_p,
.free_hdr_size = sizeof(struct xfs_dir2_free_hdr), .free_hdr_size = sizeof(struct xfs_dir2_free_hdr),
.free_hdr_to_disk = xfs_dir2_free_hdr_to_disk,
.free_max_bests = xfs_dir2_free_max_bests, .free_max_bests = xfs_dir2_free_max_bests,
.free_bests_p = xfs_dir2_free_bests_p, .free_bests_p = xfs_dir2_free_bests_p,
.db_to_fdb = xfs_dir2_db_to_fdb, .db_to_fdb = xfs_dir2_db_to_fdb,
...@@ -565,7 +536,6 @@ static const struct xfs_dir_ops xfs_dir2_ftype_ops = { ...@@ -565,7 +536,6 @@ static const struct xfs_dir_ops xfs_dir2_ftype_ops = {
.data_unused_p = xfs_dir2_data_unused_p, .data_unused_p = xfs_dir2_data_unused_p,
.free_hdr_size = sizeof(struct xfs_dir2_free_hdr), .free_hdr_size = sizeof(struct xfs_dir2_free_hdr),
.free_hdr_to_disk = xfs_dir2_free_hdr_to_disk,
.free_max_bests = xfs_dir2_free_max_bests, .free_max_bests = xfs_dir2_free_max_bests,
.free_bests_p = xfs_dir2_free_bests_p, .free_bests_p = xfs_dir2_free_bests_p,
.db_to_fdb = xfs_dir2_db_to_fdb, .db_to_fdb = xfs_dir2_db_to_fdb,
...@@ -603,7 +573,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = { ...@@ -603,7 +573,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = {
.data_unused_p = xfs_dir3_data_unused_p, .data_unused_p = xfs_dir3_data_unused_p,
.free_hdr_size = sizeof(struct xfs_dir3_free_hdr), .free_hdr_size = sizeof(struct xfs_dir3_free_hdr),
.free_hdr_to_disk = xfs_dir3_free_hdr_to_disk,
.free_max_bests = xfs_dir3_free_max_bests, .free_max_bests = xfs_dir3_free_max_bests,
.free_bests_p = xfs_dir3_free_bests_p, .free_bests_p = xfs_dir3_free_bests_p,
.db_to_fdb = xfs_dir3_db_to_fdb, .db_to_fdb = xfs_dir3_db_to_fdb,
......
...@@ -73,8 +73,6 @@ struct xfs_dir_ops { ...@@ -73,8 +73,6 @@ struct xfs_dir_ops {
(*data_unused_p)(struct xfs_dir2_data_hdr *hdr); (*data_unused_p)(struct xfs_dir2_data_hdr *hdr);
int free_hdr_size; int free_hdr_size;
void (*free_hdr_to_disk)(struct xfs_dir2_free *to,
struct xfs_dir3_icfree_hdr *from);
int (*free_max_bests)(struct xfs_da_geometry *geo); int (*free_max_bests)(struct xfs_da_geometry *geo);
__be16 * (*free_bests_p)(struct xfs_dir2_free *free); __be16 * (*free_bests_p)(struct xfs_dir2_free *free);
xfs_dir2_db_t (*db_to_fdb)(struct xfs_da_geometry *geo, xfs_dir2_db_t (*db_to_fdb)(struct xfs_da_geometry *geo,
......
...@@ -244,6 +244,31 @@ xfs_dir2_free_hdr_from_disk( ...@@ -244,6 +244,31 @@ xfs_dir2_free_hdr_from_disk(
} }
} }
static void
xfs_dir2_free_hdr_to_disk(
struct xfs_mount *mp,
struct xfs_dir2_free *to,
struct xfs_dir3_icfree_hdr *from)
{
if (xfs_sb_version_hascrc(&mp->m_sb)) {
struct xfs_dir3_free *to3 = (struct xfs_dir3_free *)to;
ASSERT(from->magic == XFS_DIR3_FREE_MAGIC);
to3->hdr.hdr.magic = cpu_to_be32(from->magic);
to3->hdr.firstdb = cpu_to_be32(from->firstdb);
to3->hdr.nvalid = cpu_to_be32(from->nvalid);
to3->hdr.nused = cpu_to_be32(from->nused);
} else {
ASSERT(from->magic == XFS_DIR2_FREE_MAGIC);
to->hdr.magic = cpu_to_be32(from->magic);
to->hdr.firstdb = cpu_to_be32(from->firstdb);
to->hdr.nvalid = cpu_to_be32(from->nvalid);
to->hdr.nused = cpu_to_be32(from->nused);
}
}
int int
xfs_dir2_free_read( xfs_dir2_free_read(
struct xfs_trans *tp, struct xfs_trans *tp,
...@@ -302,7 +327,7 @@ xfs_dir3_free_get_buf( ...@@ -302,7 +327,7 @@ xfs_dir3_free_get_buf(
uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_meta_uuid); uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_meta_uuid);
} else } else
hdr.magic = XFS_DIR2_FREE_MAGIC; hdr.magic = XFS_DIR2_FREE_MAGIC;
dp->d_ops->free_hdr_to_disk(bp->b_addr, &hdr); xfs_dir2_free_hdr_to_disk(mp, bp->b_addr, &hdr);
*bpp = bp; *bpp = bp;
return 0; return 0;
} }
...@@ -420,7 +445,7 @@ xfs_dir2_leaf_to_node( ...@@ -420,7 +445,7 @@ xfs_dir2_leaf_to_node(
freehdr.nused = n; freehdr.nused = n;
freehdr.nvalid = be32_to_cpu(ltp->bestcount); freehdr.nvalid = be32_to_cpu(ltp->bestcount);
dp->d_ops->free_hdr_to_disk(fbp->b_addr, &freehdr); xfs_dir2_free_hdr_to_disk(dp->i_mount, fbp->b_addr, &freehdr);
xfs_dir2_free_log_bests(args, fbp, 0, freehdr.nvalid - 1); xfs_dir2_free_log_bests(args, fbp, 0, freehdr.nvalid - 1);
xfs_dir2_free_log_header(args, fbp); xfs_dir2_free_log_header(args, fbp);
...@@ -1182,7 +1207,7 @@ xfs_dir3_data_block_free( ...@@ -1182,7 +1207,7 @@ xfs_dir3_data_block_free(
logfree = 1; logfree = 1;
} }
dp->d_ops->free_hdr_to_disk(free, &freehdr); xfs_dir2_free_hdr_to_disk(dp->i_mount, free, &freehdr);
xfs_dir2_free_log_header(args, fbp); xfs_dir2_free_log_header(args, fbp);
/* /*
...@@ -1739,7 +1764,7 @@ xfs_dir2_node_add_datablk( ...@@ -1739,7 +1764,7 @@ xfs_dir2_node_add_datablk(
*/ */
if (bests[*findex] == cpu_to_be16(NULLDATAOFF)) { if (bests[*findex] == cpu_to_be16(NULLDATAOFF)) {
freehdr.nused++; freehdr.nused++;
dp->d_ops->free_hdr_to_disk(fbp->b_addr, &freehdr); xfs_dir2_free_hdr_to_disk(mp, fbp->b_addr, &freehdr);
xfs_dir2_free_log_header(args, fbp); xfs_dir2_free_log_header(args, fbp);
} }
......
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