.data_entry_tag_p = xfs_dir2_data_entry_tag_p,
        .data_bestfree_p = xfs_dir2_data_bestfree_p,
 
-       .data_dotdot_offset = sizeof(struct xfs_dir2_data_hdr) +
-                               XFS_DIR2_DATA_ENTSIZE(1),
        .data_first_offset =  sizeof(struct xfs_dir2_data_hdr) +
                                XFS_DIR2_DATA_ENTSIZE(1) +
                                XFS_DIR2_DATA_ENTSIZE(2),
        .data_entry_tag_p = xfs_dir3_data_entry_tag_p,
        .data_bestfree_p = xfs_dir2_data_bestfree_p,
 
-       .data_dotdot_offset = sizeof(struct xfs_dir2_data_hdr) +
-                               XFS_DIR3_DATA_ENTSIZE(1),
        .data_first_offset =  sizeof(struct xfs_dir2_data_hdr) +
                                XFS_DIR3_DATA_ENTSIZE(1) +
                                XFS_DIR3_DATA_ENTSIZE(2),
        .data_entry_tag_p = xfs_dir3_data_entry_tag_p,
        .data_bestfree_p = xfs_dir3_data_bestfree_p,
 
-       .data_dotdot_offset = sizeof(struct xfs_dir3_data_hdr) +
-                               XFS_DIR3_DATA_ENTSIZE(1),
        .data_first_offset =  sizeof(struct xfs_dir3_data_hdr) +
                                XFS_DIR3_DATA_ENTSIZE(1) +
                                XFS_DIR3_DATA_ENTSIZE(2),
 
        struct xfs_dir2_data_free *
                (*data_bestfree_p)(struct xfs_dir2_data_hdr *hdr);
 
-       xfs_dir2_data_aoff_t data_dotdot_offset;
        xfs_dir2_data_aoff_t data_first_offset;
        size_t  data_entry_offset;
 
 
        dot_offset = xfs_dir2_db_off_to_dataptr(geo, geo->datablk,
                        dp->d_ops->data_entry_offset);
        dotdot_offset = xfs_dir2_db_off_to_dataptr(geo, geo->datablk,
-                                               dp->d_ops->data_dotdot_offset);
+                       dp->d_ops->data_entry_offset +
+                       dp->d_ops->data_entsize(sizeof(".") - 1));
 
        /*
         * Put . entry unless we're starting past it.