xfs: move the node header size to struct xfs_da_geometry
authorChristoph Hellwig <hch@lst.de>
Fri, 8 Nov 2019 22:57:49 +0000 (14:57 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Mon, 11 Nov 2019 00:54:19 +0000 (16:54 -0800)
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>
fs/xfs/libxfs/xfs_da_btree.c
fs/xfs/libxfs/xfs_da_btree.h
fs/xfs/libxfs/xfs_da_format.c
fs/xfs/libxfs/xfs_dir2.c
fs/xfs/libxfs/xfs_dir2.h
fs/xfs/xfs_iops.c
fs/xfs/xfs_mount.h

index 6ffecab..34928c9 100644 (file)
@@ -414,7 +414,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;
@@ -922,12 +922,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)));
 
        /*
@@ -998,7 +999,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.
@@ -1428,7 +1430,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.
@@ -1501,7 +1503,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 4955c1f..396b76a 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 f896d37..68dff1d 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 452d04a..98cc063 100644 (file)
@@ -99,16 +99,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),
@@ -125,6 +122,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
@@ -133,7 +134,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;
 
@@ -143,7 +144,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 6eee4c1..87fe876 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
index 4c7962c..21e6d08 100644 (file)
@@ -1323,7 +1323,6 @@ xfs_setup_inode(
                lockdep_set_class(&ip->i_lock.mr_lock, &xfs_dir_ilock_class);
                ip->d_ops = ip->i_mount->m_dir_inode_ops;
        } else {
-               ip->d_ops = ip->i_mount->m_nondir_inode_ops;
                lockdep_set_class(&ip->i_lock.mr_lock, &xfs_nondir_ilock_class);
        }
 
index 0481e6d..9719f2a 100644 (file)
@@ -157,7 +157,6 @@ typedef struct xfs_mount {
        uint8_t                 m_sectbb_log;   /* sectlog - BBSHIFT */
        const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */
        const struct xfs_dir_ops *m_dir_inode_ops; /* vector of dir inode ops */
-       const struct xfs_dir_ops *m_nondir_inode_ops; /* !dir inode ops */
        uint                    m_chsize;       /* size of next field */
        atomic_t                m_active_trans; /* number trans frozen */
        struct xfs_mru_cache    *m_filestream;  /* per-mount filestream data */