]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs: move the node header size to struct xfs_da_geometry
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: 3b34441309f364bba59a6ee5d1aa32206456142f

Move the node header size field to struct xfs_da_geometry, and remove
the now unused non-directory dir ops infrastructure.

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>
db/metadump.c
libxfs/xfs_da_btree.c
libxfs/xfs_da_btree.h
libxfs/xfs_da_format.c
libxfs/xfs_dir2.c
libxfs/xfs_dir2.h

index 1ace309e687cf9013ca1e7905c2a9c39efa9514c..bdec7bb22e76741d3cadb5c44a9272f1bf248150 100644 (file)
@@ -1882,7 +1882,18 @@ process_single_fsb_objects(
                                int used;
 
                                libxfs_da3_node_hdr_from_disk(mp, &hdr, node);
-                               used = M_DIROPS(mp)->node_hdr_size;
+                               switch (btype) {
+                               case TYP_DIR2:
+                                       used = mp->m_dir_geo->node_hdr_size;
+                                       break;
+                               case TYP_ATTR:
+                                       used = mp->m_attr_geo->node_hdr_size;
+                                       break;
+                               default:
+                                       /* unknown type, don't zero anything */
+                                       used = mp->m_sb.sb_blocksize;
+                                       break;
+                               }
 
                                used += hdr.count
                                        * sizeof(struct xfs_da_node_entry);
index 0fc4dabd63ee84edb84428d743eccbd4c431e33b..f52e738e5d15269cfa0dd1454415a87c5a5ec230 100644 (file)
@@ -411,7 +411,7 @@ xfs_da3_node_create(
 
        xfs_da3_node_hdr_to_disk(dp->i_mount, node, &ichdr);
        xfs_trans_log_buf(tp, bp,
-               XFS_DA_LOGRANGE(node, &node->hdr, dp->d_ops->node_hdr_size));
+               XFS_DA_LOGRANGE(node, &node->hdr, args->geo->node_hdr_size));
 
        *bpp = bp;
        return 0;
@@ -919,12 +919,13 @@ xfs_da3_node_rebalance(
         */
        xfs_da3_node_hdr_to_disk(dp->i_mount, node1, &nodehdr1);
        xfs_trans_log_buf(tp, blk1->bp,
-               XFS_DA_LOGRANGE(node1, &node1->hdr, dp->d_ops->node_hdr_size));
+               XFS_DA_LOGRANGE(node1, &node1->hdr,
+                               state->args->geo->node_hdr_size));
 
        xfs_da3_node_hdr_to_disk(dp->i_mount, node2, &nodehdr2);
        xfs_trans_log_buf(tp, blk2->bp,
                XFS_DA_LOGRANGE(node2, &node2->hdr,
-                               dp->d_ops->node_hdr_size +
+                               state->args->geo->node_hdr_size +
                                (sizeof(btree2[0]) * nodehdr2.count)));
 
        /*
@@ -995,7 +996,8 @@ xfs_da3_node_add(
        nodehdr.count += 1;
        xfs_da3_node_hdr_to_disk(dp->i_mount, node, &nodehdr);
        xfs_trans_log_buf(state->args->trans, oldblk->bp,
-               XFS_DA_LOGRANGE(node, &node->hdr, dp->d_ops->node_hdr_size));
+               XFS_DA_LOGRANGE(node, &node->hdr,
+                               state->args->geo->node_hdr_size));
 
        /*
         * Copy the last hash value from the oldblk to propagate upwards.
@@ -1425,7 +1427,7 @@ xfs_da3_node_remove(
        nodehdr.count -= 1;
        xfs_da3_node_hdr_to_disk(dp->i_mount, node, &nodehdr);
        xfs_trans_log_buf(state->args->trans, drop_blk->bp,
-           XFS_DA_LOGRANGE(node, &node->hdr, dp->d_ops->node_hdr_size));
+           XFS_DA_LOGRANGE(node, &node->hdr, state->args->geo->node_hdr_size));
 
        /*
         * Copy the last hash value from the block to propagate upwards.
@@ -1498,7 +1500,7 @@ xfs_da3_node_unbalance(
        xfs_da3_node_hdr_to_disk(dp->i_mount, save_node, &save_hdr);
        xfs_trans_log_buf(tp, save_blk->bp,
                XFS_DA_LOGRANGE(save_node, &save_node->hdr,
-                               dp->d_ops->node_hdr_size));
+                               state->args->geo->node_hdr_size));
 
        /*
         * Save the last hashval in the remaining block for upward propagation.
index 4955c1fb8b0da628fc7c70328db752b028fb900b..396b76ac02d6c947037328389731e4f9f12dde5f 100644 (file)
@@ -22,6 +22,7 @@ struct xfs_da_geometry {
        unsigned int    fsbcount;       /* da block size in filesystem blocks */
        uint8_t         fsblog;         /* log2 of _filesystem_ block size */
        uint8_t         blklog;         /* log2 of da block size */
+       unsigned int    node_hdr_size;  /* danode header size in bytes */
        unsigned int    node_ents;      /* # of entries in a danode */
        unsigned int    magicpct;       /* 37% of block size in bytes */
        xfs_dablk_t     datablk;        /* blockno of dir data v2 */
index 4e807a4cc9c4ddf8e4aa96d081ea4396934f4f67..436ea2d7fca00c53ea30dc7bc8ac19e5dcae70b4 100644 (file)
@@ -652,8 +652,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = {
        .leaf_max_ents = xfs_dir2_max_leaf_ents,
        .leaf_ents_p = xfs_dir2_leaf_ents_p,
 
-       .node_hdr_size = sizeof(struct xfs_da_node_hdr),
-
        .free_hdr_size = sizeof(struct xfs_dir2_free_hdr),
        .free_hdr_to_disk = xfs_dir2_free_hdr_to_disk,
        .free_hdr_from_disk = xfs_dir2_free_hdr_from_disk,
@@ -699,8 +697,6 @@ static const struct xfs_dir_ops xfs_dir2_ftype_ops = {
        .leaf_max_ents = xfs_dir2_max_leaf_ents,
        .leaf_ents_p = xfs_dir2_leaf_ents_p,
 
-       .node_hdr_size = sizeof(struct xfs_da_node_hdr),
-
        .free_hdr_size = sizeof(struct xfs_dir2_free_hdr),
        .free_hdr_to_disk = xfs_dir2_free_hdr_to_disk,
        .free_hdr_from_disk = xfs_dir2_free_hdr_from_disk,
@@ -746,8 +742,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = {
        .leaf_max_ents = xfs_dir3_max_leaf_ents,
        .leaf_ents_p = xfs_dir3_leaf_ents_p,
 
-       .node_hdr_size = sizeof(struct xfs_da3_node_hdr),
-
        .free_hdr_size = sizeof(struct xfs_dir3_free_hdr),
        .free_hdr_to_disk = xfs_dir3_free_hdr_to_disk,
        .free_hdr_from_disk = xfs_dir3_free_hdr_from_disk,
@@ -757,14 +751,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = {
        .db_to_fdindex = xfs_dir3_db_to_fdindex,
 };
 
-static const struct xfs_dir_ops xfs_dir2_nondir_ops = {
-       .node_hdr_size = sizeof(struct xfs_da_node_hdr),
-};
-
-static const struct xfs_dir_ops xfs_dir3_nondir_ops = {
-       .node_hdr_size = sizeof(struct xfs_da3_node_hdr),
-};
-
 /*
  * Return the ops structure according to the current config.  If we are passed
  * an inode, then that overrides the default config we use which is based on
@@ -785,17 +771,3 @@ xfs_dir_get_ops(
                return &xfs_dir2_ftype_ops;
        return &xfs_dir2_ops;
 }
-
-const struct xfs_dir_ops *
-xfs_nondir_get_ops(
-       struct xfs_mount        *mp,
-       struct xfs_inode        *dp)
-{
-       if (dp)
-               return dp->d_ops;
-       if (mp->m_nondir_inode_ops)
-               return mp->m_nondir_inode_ops;
-       if (xfs_sb_version_hascrc(&mp->m_sb))
-               return &xfs_dir3_nondir_ops;
-       return &xfs_dir2_nondir_ops;
-}
index f34a55de8609f8696e432ac3cd86af8942e02a47..168a7b7a1899e2129bdcd675f7d4d22cbccd5f77 100644 (file)
@@ -97,16 +97,13 @@ xfs_da_mount(
        struct xfs_mount        *mp)
 {
        struct xfs_da_geometry  *dageo;
-       int                     nodehdr_size;
 
 
        ASSERT(mp->m_sb.sb_versionnum & XFS_SB_VERSION_DIRV2BIT);
        ASSERT(xfs_dir2_dirblock_bytes(&mp->m_sb) <= XFS_MAX_BLOCKSIZE);
 
        mp->m_dir_inode_ops = xfs_dir_get_ops(mp, NULL);
-       mp->m_nondir_inode_ops = xfs_nondir_get_ops(mp, NULL);
 
-       nodehdr_size = mp->m_dir_inode_ops->node_hdr_size;
        mp->m_dir_geo = kmem_zalloc(sizeof(struct xfs_da_geometry),
                                    KM_MAYFAIL);
        mp->m_attr_geo = kmem_zalloc(sizeof(struct xfs_da_geometry),
@@ -123,6 +120,10 @@ xfs_da_mount(
        dageo->fsblog = mp->m_sb.sb_blocklog;
        dageo->blksize = xfs_dir2_dirblock_bytes(&mp->m_sb);
        dageo->fsbcount = 1 << mp->m_sb.sb_dirblklog;
+       if (xfs_sb_version_hascrc(&mp->m_sb))
+               dageo->node_hdr_size = sizeof(struct xfs_da3_node_hdr);
+       else
+               dageo->node_hdr_size = sizeof(struct xfs_da_node_hdr);
 
        /*
         * Now we've set up the block conversion variables, we can calculate the
@@ -131,7 +132,7 @@ xfs_da_mount(
        dageo->datablk = xfs_dir2_byte_to_da(dageo, XFS_DIR2_DATA_OFFSET);
        dageo->leafblk = xfs_dir2_byte_to_da(dageo, XFS_DIR2_LEAF_OFFSET);
        dageo->freeblk = xfs_dir2_byte_to_da(dageo, XFS_DIR2_FREE_OFFSET);
-       dageo->node_ents = (dageo->blksize - nodehdr_size) /
+       dageo->node_ents = (dageo->blksize - dageo->node_hdr_size) /
                                (uint)sizeof(xfs_da_node_entry_t);
        dageo->magicpct = (dageo->blksize * 37) / 100;
 
@@ -141,7 +142,8 @@ xfs_da_mount(
        dageo->fsblog = mp->m_sb.sb_blocklog;
        dageo->blksize = 1 << dageo->blklog;
        dageo->fsbcount = 1;
-       dageo->node_ents = (dageo->blksize - nodehdr_size) /
+       dageo->node_hdr_size = mp->m_dir_geo->node_hdr_size;
+       dageo->node_ents = (dageo->blksize - dageo->node_hdr_size) /
                                (uint)sizeof(xfs_da_node_entry_t);
        dageo->magicpct = (dageo->blksize * 37) / 100;
 
index 6eee4c1b20dad81cafa9a7255c65ee120c26b90b..87fe876e90edda98da97b7b35a343da2de694d7d 100644 (file)
@@ -81,8 +81,6 @@ struct xfs_dir_ops {
        struct xfs_dir2_leaf_entry *
                (*leaf_ents_p)(struct xfs_dir2_leaf *lp);
 
-       int     node_hdr_size;
-
        int     free_hdr_size;
        void    (*free_hdr_to_disk)(struct xfs_dir2_free *to,
                                    struct xfs_dir3_icfree_hdr *from);
@@ -98,8 +96,6 @@ struct xfs_dir_ops {
 
 extern const struct xfs_dir_ops *
        xfs_dir_get_ops(struct xfs_mount *mp, struct xfs_inode *dp);
-extern const struct xfs_dir_ops *
-       xfs_nondir_get_ops(struct xfs_mount *mp, struct xfs_inode *dp);
 
 /*
  * Generic directory interface routines