]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs: devirtualize ->free_hdr_to_disk
authorChristoph Hellwig <hch@lst.de>
Wed, 22 Jan 2020 16:29:41 +0000 (11:29 -0500)
committerEric Sandeen <sandeen@redhat.com>
Wed, 22 Jan 2020 16:29:41 +0000 (11:29 -0500)
Source kernel commit: 200dada70008a1204ddd3d95250d23d6477e20e6

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>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_da_format.c
libxfs/xfs_dir2.h
libxfs/xfs_dir2_node.c

index b22c95dffefc9acf16615da17e328ebdcf1aff39..89f314e3bd1d6337c585148f5a51351b7246a001 100644 (file)
@@ -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,
index c3e6a6fb7e3788702161620399304a2bd197a17e..613a78281d03ece289a1876a827affb13ab1e58e 100644 (file)
@@ -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,
index e3f574cbc22ff7177a61703839d8285c8a6b6e5e..ed5e27074d9e7ca1acc06d84643355af2544c58c 100644 (file)
@@ -241,6 +241,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,
@@ -299,7 +324,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;
 }
@@ -417,7 +442,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);
 
@@ -1179,7 +1204,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);
 
        /*
@@ -1736,7 +1761,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);
        }