diff mbox series

[13/34] xfs: devirtualize ->free_hdr_to_disk

Message ID 20191101220719.29100-14-hch@lst.de (mailing list archive)
State Superseded
Headers show
Series [01/34] xfs: move incore structures out of xfs_da_format.h | expand

Commit Message

Christoph Hellwig Nov. 1, 2019, 10:06 p.m. UTC
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: Christoph Hellwig <hch@lst.de>
---
 fs/xfs/libxfs/xfs_da_format.c | 31 -------------------------------
 fs/xfs/libxfs/xfs_dir2.h      |  2 --
 fs/xfs/libxfs/xfs_dir2_node.c | 33 +++++++++++++++++++++++++++++----
 3 files changed, 29 insertions(+), 37 deletions(-)

Comments

Darrick J. Wong Nov. 4, 2019, 8:08 p.m. UTC | #1
On Fri, Nov 01, 2019 at 03:06:58PM -0700, Christoph Hellwig wrote:
> 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: Christoph Hellwig <hch@lst.de>

Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> ---
>  fs/xfs/libxfs/xfs_da_format.c | 31 -------------------------------
>  fs/xfs/libxfs/xfs_dir2.h      |  2 --
>  fs/xfs/libxfs/xfs_dir2_node.c | 33 +++++++++++++++++++++++++++++----
>  3 files changed, 29 insertions(+), 37 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_da_format.c b/fs/xfs/libxfs/xfs_da_format.c
> index d0e541d9d335..b943d9443d55 100644
> --- a/fs/xfs/libxfs/xfs_da_format.c
> +++ b/fs/xfs/libxfs/xfs_da_format.c
> @@ -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);
>  }
>  
> -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 = {
>  	.sf_entsize = xfs_dir2_sf_entsize,
>  	.sf_nextentry = xfs_dir2_sf_nextentry,
> @@ -527,7 +499,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = {
>  	.data_unused_p = xfs_dir2_data_unused_p,
>  
>  	.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_bests_p = xfs_dir2_free_bests_p,
>  	.db_to_fdb = xfs_dir2_db_to_fdb,
> @@ -565,7 +536,6 @@ static const struct xfs_dir_ops xfs_dir2_ftype_ops = {
>  	.data_unused_p = xfs_dir2_data_unused_p,
>  
>  	.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_bests_p = xfs_dir2_free_bests_p,
>  	.db_to_fdb = xfs_dir2_db_to_fdb,
> @@ -603,7 +573,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = {
>  	.data_unused_p = xfs_dir3_data_unused_p,
>  
>  	.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_bests_p = xfs_dir3_free_bests_p,
>  	.db_to_fdb = xfs_dir3_db_to_fdb,
> diff --git a/fs/xfs/libxfs/xfs_dir2.h b/fs/xfs/libxfs/xfs_dir2.h
> index c3e6a6fb7e37..613a78281d03 100644
> --- a/fs/xfs/libxfs/xfs_dir2.h
> +++ b/fs/xfs/libxfs/xfs_dir2.h
> @@ -73,8 +73,6 @@ struct xfs_dir_ops {
>  		(*data_unused_p)(struct xfs_dir2_data_hdr *hdr);
>  
>  	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);
>  	__be16 * (*free_bests_p)(struct xfs_dir2_free *free);
>  	xfs_dir2_db_t (*db_to_fdb)(struct xfs_da_geometry *geo,
> diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c
> index 9e22710bb772..26032eba1e32 100644
> --- a/fs/xfs/libxfs/xfs_dir2_node.c
> +++ b/fs/xfs/libxfs/xfs_dir2_node.c
> @@ -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
>  xfs_dir2_free_read(
>  	struct xfs_trans	*tp,
> @@ -302,7 +327,7 @@ xfs_dir3_free_get_buf(
>  		uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_meta_uuid);
>  	} else
>  		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;
>  	return 0;
>  }
> @@ -418,7 +443,7 @@ xfs_dir2_leaf_to_node(
>  	freehdr.nused = n;
>  	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_header(args, fbp);
>  
> @@ -1176,7 +1201,7 @@ xfs_dir3_data_block_free(
>  		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);
>  
>  	/*
> @@ -1733,7 +1758,7 @@ xfs_dir2_node_add_datablk(
>  	 */
>  	if (bests[*findex] == cpu_to_be16(NULLDATAOFF)) {
>  		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);
>  	}
>  
> -- 
> 2.20.1
>
diff mbox series

Patch

diff --git a/fs/xfs/libxfs/xfs_da_format.c b/fs/xfs/libxfs/xfs_da_format.c
index d0e541d9d335..b943d9443d55 100644
--- a/fs/xfs/libxfs/xfs_da_format.c
+++ b/fs/xfs/libxfs/xfs_da_format.c
@@ -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);
 }
 
-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 = {
 	.sf_entsize = xfs_dir2_sf_entsize,
 	.sf_nextentry = xfs_dir2_sf_nextentry,
@@ -527,7 +499,6 @@  static const struct xfs_dir_ops xfs_dir2_ops = {
 	.data_unused_p = xfs_dir2_data_unused_p,
 
 	.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_bests_p = xfs_dir2_free_bests_p,
 	.db_to_fdb = xfs_dir2_db_to_fdb,
@@ -565,7 +536,6 @@  static const struct xfs_dir_ops xfs_dir2_ftype_ops = {
 	.data_unused_p = xfs_dir2_data_unused_p,
 
 	.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_bests_p = xfs_dir2_free_bests_p,
 	.db_to_fdb = xfs_dir2_db_to_fdb,
@@ -603,7 +573,6 @@  static const struct xfs_dir_ops xfs_dir3_ops = {
 	.data_unused_p = xfs_dir3_data_unused_p,
 
 	.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_bests_p = xfs_dir3_free_bests_p,
 	.db_to_fdb = xfs_dir3_db_to_fdb,
diff --git a/fs/xfs/libxfs/xfs_dir2.h b/fs/xfs/libxfs/xfs_dir2.h
index c3e6a6fb7e37..613a78281d03 100644
--- a/fs/xfs/libxfs/xfs_dir2.h
+++ b/fs/xfs/libxfs/xfs_dir2.h
@@ -73,8 +73,6 @@  struct xfs_dir_ops {
 		(*data_unused_p)(struct xfs_dir2_data_hdr *hdr);
 
 	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);
 	__be16 * (*free_bests_p)(struct xfs_dir2_free *free);
 	xfs_dir2_db_t (*db_to_fdb)(struct xfs_da_geometry *geo,
diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c
index 9e22710bb772..26032eba1e32 100644
--- a/fs/xfs/libxfs/xfs_dir2_node.c
+++ b/fs/xfs/libxfs/xfs_dir2_node.c
@@ -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
 xfs_dir2_free_read(
 	struct xfs_trans	*tp,
@@ -302,7 +327,7 @@  xfs_dir3_free_get_buf(
 		uuid_copy(&hdr3->hdr.uuid, &mp->m_sb.sb_meta_uuid);
 	} else
 		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;
 	return 0;
 }
@@ -418,7 +443,7 @@  xfs_dir2_leaf_to_node(
 	freehdr.nused = n;
 	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_header(args, fbp);
 
@@ -1176,7 +1201,7 @@  xfs_dir3_data_block_free(
 		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);
 
 	/*
@@ -1733,7 +1758,7 @@  xfs_dir2_node_add_datablk(
 	 */
 	if (bests[*findex] == cpu_to_be16(NULLDATAOFF)) {
 		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);
 	}