--- /dev/null
+#! /bin/sh
+# FS QA Test No. 122
+#
+# pv#952498
+# Keep an eye on some of the xfs type sizes
+# Motivation from differing ondisk types for 32 and 64 bit word versions.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved.
+#-----------------------------------------------------------------------
+#
+# creator
+owner=tes@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1 # failure is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment
+. ./common.rc
+
+# real QA test starts here
+_supported_fs xfs
+_supported_os Linux
+
+cprog=$tmp.get_structs.c
+oprog=$tmp.get_structs
+
+cat >$cprog <<EOF
+#include <stdio.h>
+#include <xfs/libxlog.h>
+EOF
+
+cat >$tmp.ignore <<EOF
+xfs_buf_cancel_t
+xfs_swapext_t
+xfs_dirops_t
+xfs_efi_log_item_t
+xfs_efd_log_item_t
+xfs_iocore_t
+xfs_ihash_t
+xfs_chashlist_t
+xfs_chash_t
+xfs_iptr_t
+xfs_dmops_t
+xfs_qmops_t
+xfs_ioops_t
+xfs_mod_sb_t
+xfs_dqtrx_t
+xfs_dqtrxops_t
+xfs_ail_entry_t
+xfs_item_ops_t
+xfs_log_busy_slot_t
+xfs_log_busy_chunk_t
+xfs_inode_log_format_t
+xfs_efi_log_format_t
+xfs_efd_log_format_t
+xfs_perag_busy_t
+xfs_perag_t
+xfs_alloc_arg_t
+xfs_attr_list_context_t
+xfs_attr_sf_sort_t
+xfs_bmbt_irec_t
+xfs_bmap_free_item_t
+xfs_bmap_free_t
+xfs_bmalloca_t
+xfs_btree_cur_t
+xfs_buf_log_item_t
+xfs_da_args_t
+xfs_dabuf_t
+xfs_da_state_blk_t
+xfs_da_state_path_t
+xfs_da_state_t
+xfs_dinode_t
+xfs_dir2_block_t
+xfs_dir2_data_entry_t
+xfs_dir2_data_union_t
+xfs_dir2_data_t
+xfs_dir2_put_args_t
+xfs_dir_put_args_t
+xfs_dir_sf_sort_t
+xfs_extent_t
+xfs_flock64_t
+xfs_fsop_geom_v1_t
+xfs_growfs_data_t
+xfs_growfs_rt_t
+xfs_bstime_t
+xfs_bstat_t
+xfs_fsop_bulkreq_t
+xfs_inogrp_t
+xfs_fsop_handlereq_t
+xfs_fsop_setdm_handlereq_t
+xfs_fsop_attrlist_handlereq_t
+xfs_attr_multiop_t
+xfs_fsop_attrmulti_handlereq_t
+xfs_imap_t
+xfs_ifork_t
+xfs_inode_t
+xfs_inode_log_item_t
+xfs_log_iovec_t
+xfs_log_callback_t
+xfs_mount_t
+xfs_sb_t
+xfs_log_item_t
+xfs_log_item_desc_t
+xfs_log_item_chunk_t
+xfs_trans_t
+xfs_dirent_t
+xfs_fsop_getparents_handlereq_t
+EOF
+
+echo 'int main(int argc, char *argv[]) {' >>$cprog
+
+#
+# Printfs of typedef sizes
+#
+cat /usr/include/xfs/xfs*.h | indent |\
+sed -e 's/__attribute__ *[(][(]packed[)][)]//' |\
+tee shit |\
+egrep '} *xfs_.*_t' |\
+egrep -v -f $tmp.ignore |\
+awk '{sub(/[;,]/,"",$2); print "printf(\"sizeof(", $2, ") = %d\\n\", sizeof(", $2, "));"}' \
+>>$cprog
+
+#
+# Look at offsets of key ones which differ in lengths
+#
+
+# xfs_sb_t
+cat /usr/include/xfs/xfs*.h | indent |\
+awk '
+ /typedef struct xfs_sb/ { structon = 1; next }
+ structon && $2 ~ /^sb_/ { sub(/[;,]/,"",$2)
+ print "printf(\"offsetof(xfs_sb_t,", $2, ") = %d\\n\", offsetof(xfs_sb_t,", $2, "));"; next}
+ structon && /}/ { structon = 0; next}
+'>>$cprog
+
+echo 'return 0; }' >>$cprog
+
+# create and run program
+cc -o $oprog $cprog
+eval $oprog
+
+status=0
--- /dev/null
+QA output created by 122
+sizeof( xfs_agf_t ) = 60
+sizeof( xfs_agi_t ) = 296
+sizeof( xfs_agfl_t ) = 4
+sizeof( xfs_alloc_rec_t ) = 8
+sizeof( xfs_alloc_rec_incore_t ) = 8
+sizeof( xfs_alloctype_t ) = 4
+sizeof( xfs_attr_leaf_map_t ) = 4
+sizeof( xfs_attr_leaf_hdr_t ) = 32
+sizeof( xfs_attr_leaf_entry_t ) = 8
+sizeof( xfs_attr_leaf_name_local_t ) = 4
+sizeof( xfs_attr_leaf_name_remote_t ) = 12
+sizeof( xfs_attr_leafblock_t ) = 56
+sizeof( xfs_attr_inactive_list_t ) = 8
+sizeof( xfs_attr_shortform_t ) = 8
+sizeof( xfs_bmdr_block_t ) = 4
+sizeof( xfs_bmbt_rec_32_t ) = 16
+sizeof( xfs_bmbt_rec_64_t ) = 16
+sizeof( xfs_exntfmt_t ) = 4
+sizeof( xfs_exntst_t ) = 4
+sizeof( xfs_bmbt_key_t ) = 8
+sizeof( xfs_btree_sblock_t ) = 16
+sizeof( xfs_btree_lblock_t ) = 24
+sizeof( xfs_btree_hdr_t ) = 8
+sizeof( xfs_btree_block_t ) = 24
+sizeof( xfs_buf_log_format_v1_t ) = 20
+sizeof( xfs_buf_log_format_t ) = 24
+sizeof( xfs_da_blkinfo_t ) = 12
+sizeof( xfs_da_intnode_t ) = 24
+sizeof( xfs_timestamp_t ) = 8
+sizeof( xfs_dinode_core_t ) = 96
+sizeof( xfs_dinode_fmt_t ) = 4
+sizeof( xfs_dir2_data_free_t ) = 4
+sizeof( xfs_dir2_data_hdr_t ) = 16
+sizeof( xfs_dir2_data_unused_t ) = 6
+sizeof( xfs_dir2_leaf_hdr_t ) = 16
+sizeof( xfs_dir2_leaf_entry_t ) = 8
+sizeof( xfs_dir2_leaf_tail_t ) = 4
+sizeof( xfs_dir2_leaf_t ) = 32
+sizeof( xfs_dir2_free_hdr_t ) = 16
+sizeof( xfs_dir2_free_t ) = 20
+sizeof( xfs_dir2_ino8_t ) = 8
+sizeof( xfs_dir2_ino4_t ) = 4
+sizeof( xfs_dir2_inou_t ) = 8
+sizeof( xfs_dir2_sf_off_t ) = 2
+sizeof( xfs_dir2_sf_hdr_t ) = 10
+sizeof( xfs_dir2_sf_entry_t ) = 12
+sizeof( xfs_dir2_sf_t ) = 22
+sizeof( xfs_dir_leaf_map_t ) = 4
+sizeof( xfs_dir_leaf_hdr_t ) = 32
+sizeof( xfs_dir_leaf_entry_t ) = 8
+sizeof( xfs_dir_leaf_name_t ) = 9
+sizeof( xfs_dir_leafblock_t ) = 52
+sizeof( xfs_dircook_t ) = 8
+sizeof( xfs_dir_sf_hdr_t ) = 9
+sizeof( xfs_dir_sf_entry_t ) = 10
+sizeof( xfs_dir_shortform_t ) = 19
+sizeof( xfs_fsop_geom_t ) = 112
+sizeof( xfs_fsop_counts_t ) = 32
+sizeof( xfs_fsop_resblks_t ) = 16
+sizeof( xfs_growfs_log_t ) = 8
+sizeof( xfs_error_injection_t ) = 8
+sizeof( xfs_attrlist_cursor_t ) = 16
+sizeof( xfs_fsid_t ) = 8
+sizeof( xfs_fid_t ) = 16
+sizeof( xfs_fid2_t ) = 16
+sizeof( xfs_handle_t ) = 24
+sizeof( xfs_inobt_rec_t ) = 16
+sizeof( xfs_inobt_key_t ) = 4
+sizeof( xfs_trans_reservations_t ) = 84
+sizeof( xfs_disk_dquot_t ) = 104
+sizeof( xfs_dqblk_t ) = 136
+sizeof( xfs_dq_logformat_t ) = 24
+sizeof( xfs_qoff_logformat_t ) = 20
+sizeof( xfs_sb_field_t ) = 4
+sizeof( xfs_trans_header_t ) = 16
+sizeof( xfs_lookup_t ) = 4
+sizeof( xfs_btnum_t ) = 4
+offsetof(xfs_sb_t, sb_magicnum ) = 0
+offsetof(xfs_sb_t, sb_blocksize ) = 4
+offsetof(xfs_sb_t, sb_dblocks ) = 8
+offsetof(xfs_sb_t, sb_rblocks ) = 16
+offsetof(xfs_sb_t, sb_rextents ) = 24
+offsetof(xfs_sb_t, sb_uuid ) = 32
+offsetof(xfs_sb_t, sb_logstart ) = 48
+offsetof(xfs_sb_t, sb_rootino ) = 56
+offsetof(xfs_sb_t, sb_rbmino ) = 64
+offsetof(xfs_sb_t, sb_rsumino ) = 72
+offsetof(xfs_sb_t, sb_rextsize ) = 80
+offsetof(xfs_sb_t, sb_agblocks ) = 84
+offsetof(xfs_sb_t, sb_agcount ) = 88
+offsetof(xfs_sb_t, sb_rbmblocks ) = 92
+offsetof(xfs_sb_t, sb_logblocks ) = 96
+offsetof(xfs_sb_t, sb_versionnum ) = 100
+offsetof(xfs_sb_t, sb_sectsize ) = 102
+offsetof(xfs_sb_t, sb_inodesize ) = 104
+offsetof(xfs_sb_t, sb_inopblock ) = 106
+offsetof(xfs_sb_t, sb_fname[12] ) = 120
+offsetof(xfs_sb_t, sb_blocklog ) = 120
+offsetof(xfs_sb_t, sb_sectlog ) = 121
+offsetof(xfs_sb_t, sb_inodelog ) = 122
+offsetof(xfs_sb_t, sb_inopblog ) = 123
+offsetof(xfs_sb_t, sb_agblklog ) = 124
+offsetof(xfs_sb_t, sb_rextslog ) = 125
+offsetof(xfs_sb_t, sb_inprogress ) = 126
+offsetof(xfs_sb_t, sb_imax_pct ) = 127
+offsetof(xfs_sb_t, sb_icount ) = 128
+offsetof(xfs_sb_t, sb_ifree ) = 136
+offsetof(xfs_sb_t, sb_fdblocks ) = 144
+offsetof(xfs_sb_t, sb_frextents ) = 152
+offsetof(xfs_sb_t, sb_uquotino ) = 160
+offsetof(xfs_sb_t, sb_gquotino ) = 168
+offsetof(xfs_sb_t, sb_qflags ) = 176
+offsetof(xfs_sb_t, sb_flags ) = 178
+offsetof(xfs_sb_t, sb_shared_vn ) = 179
+offsetof(xfs_sb_t, sb_inoalignmt ) = 180
+offsetof(xfs_sb_t, sb_unit ) = 184
+offsetof(xfs_sb_t, sb_width ) = 188
+offsetof(xfs_sb_t, sb_dirblklog ) = 192
+offsetof(xfs_sb_t, sb_logsectlog ) = 193
+offsetof(xfs_sb_t, sb_logsectsize ) = 194
+offsetof(xfs_sb_t, sb_logsunit ) = 196
+offsetof(xfs_sb_t, sb_features2 ) = 200