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;
         */
        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)));
 
        /*
        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.
        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.
        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.
 
        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 */
 
        .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,
        .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,
        .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,
        .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
                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;
-}
 
        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),
        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
        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;
 
        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;
 
 
        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);
 
 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
 
                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);
        }
 
 
        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 */