int inode_u_size( void *obj, int startoff, int idx) { xfs_dinode_t *dip; ASSERT(startoff == 0); ASSERT(idx == 0); dip = obj; switch (dip->di_format) { case XFS_DINODE_FMT_DEV: return bitsz(xfs_dev_t); case XFS_DINODE_FMT_LOCAL: return bitize((int)be64_to_cpu(dip->di_size)); case XFS_DINODE_FMT_EXTENTS: return (int)be32_to_cpu(dip->di_nextents) * bitsz(xfs_bmbt_rec_t); case XFS_DINODE_FMT_BTREE: return bitize((int)XFS_DFORK_DSIZE(dip, mp)); case XFS_DINODE_FMT_UUID: return bitsz(uuid_t); default: return 0; } }
int inode_a_size( void *obj, int startoff, int idx) { xfs_attr_shortform_t *asf; xfs_dinode_t *dip; ASSERT(startoff == 0); ASSERT(idx == 0); dip = obj; switch (dip->di_aformat) { case XFS_DINODE_FMT_LOCAL: asf = (xfs_attr_shortform_t *)XFS_DFORK_APTR(dip); return bitize(be16_to_cpu(asf->hdr.totsize)); case XFS_DINODE_FMT_EXTENTS: return (int)be16_to_cpu(dip->di_anextents) * bitsz(xfs_bmbt_rec_t); case XFS_DINODE_FMT_BTREE: return bitize((int)XFS_DFORK_ASIZE(dip, mp)); default: return 0; } }
int inode_size( void *obj, int startoff, int idx) { return bitize(mp->m_sb.sb_inodesize); }
/*ARGSUSED*/ int sb_size( void *obj, int startoff, int idx) { return bitize(mp->m_sb.sb_sectsize); }
/*ARGSUSED*/ int dir_size( void *obj, int startoff, int idx) { return bitize(mp->m_sb.sb_blocksize); }
/*ARGSUSED*/ int dir2_sf_hdr_size( void *obj, int startoff, int idx) { xfs_dir2_sf_t *sf; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); return bitize(xfs_dir2_sf_hdr_size(sf->hdr.i8count)); }
/*ARGSUSED*/ static int dir2_sf_entry_inumber_offset( void *obj, int startoff, int idx) { xfs_dir2_sf_entry_t *e; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); e = (xfs_dir2_sf_entry_t *)((char *)obj + byteize(startoff)); return bitize((int)((char *)xfs_dir2_sf_inumberp(e) - (char *)e)); }
/*ARGSUSED*/ static int attr_sf_entry_value_offset( void *obj, int startoff, int idx) { xfs_attr_sf_entry_t *e; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); e = (xfs_attr_sf_entry_t *)((char *)obj + byteize(startoff)); return bitize((int)((char *)&e->nameval[e->namelen] - (char *)e)); }
static int inode_u_offset( void *obj, int startoff, int idx) { xfs_dinode_t *dip; ASSERT(startoff == 0); ASSERT(idx == 0); dip = obj; return bitize((int)((char *)XFS_DFORK_DPTR(dip) - (char *)dip)); }
/*ARGSUSED*/ static int dir_leaf_namelist_offset( void *obj, int startoff, int idx) { xfs_dir_leafblock_t *block; xfs_dir_leaf_entry_t *e; ASSERT(startoff == 0); block = obj; e = &block->entries[idx]; return bitize(INT_GET(e->nameidx, ARCH_CONVERT)); }
/*ARGSUSED*/ int dir2_inou_size( void *obj, int startoff, int idx) { xfs_dir2_sf_t *sf; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); sf = &((xfs_dinode_t *)obj)->di_u.di_dir2sf; return bitize(sf->hdr.i8count ? (uint)sizeof(xfs_dir2_ino8_t) : (uint)sizeof(xfs_dir2_ino4_t)); }
/*ARGSUSED*/ int dir_leaf_name_size( void *obj, int startoff, int idx) { xfs_dir_leafblock_t *block; xfs_dir_leaf_entry_t *e; ASSERT(startoff == 0); block = obj; if (INT_GET(block->hdr.info.magic, ARCH_CONVERT) != XFS_DIR_LEAF_MAGIC) return 0; e = &block->entries[idx]; return bitize((int)XFS_DIR_LEAF_ENTSIZE_BYENTRY(e)); }
/* * Get the offset of the record at idx in a btree block. */ static int btblock_rec_offset( void *obj, int startoff, int idx) { struct xfs_btree_block *block = obj; struct xfs_db_btree *bt = block_to_bt(block); int offset; ASSERT(startoff == 0); ASSERT(block->bb_level == 0); offset = bt->block_len + (idx - 1) * bt->rec_len; return bitize(offset); }
static int bnobt_rec_offset( void *obj, int startoff, int idx) { xfs_alloc_block_t *block; xfs_alloc_rec_t *rp; ASSERT(startoff == 0); block = obj; ASSERT(INT_GET(block->bb_level, ARCH_CONVERT) == 0); rp = XFS_BTREE_REC_ADDR(mp->m_sb.sb_blocksize, xfs_alloc, block, idx, XFS_BTREE_BLOCK_MAXRECS(mp->m_sb.sb_blocksize, xfs_alloc, 1)); return bitize((int)((char *)rp - (char *)block)); }
static int dir2_sf_list_offset( void *obj, int startoff, int idx) { xfs_dir2_sf_entry_t *e; int i; xfs_dir2_sf_t *sf; ASSERT(bitoffs(startoff) == 0); sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); e = xfs_dir2_sf_firstentry(sf); for (i = 0; i < idx; i++) e = xfs_dir2_sf_nextentry(sf, e); return bitize((int)((char *)e - (char *)sf)); }
int attr_sf_entry_size( void *obj, int startoff, int idx) { xfs_attr_sf_entry_t *e; int i; xfs_attr_shortform_t *sf; ASSERT(bitoffs(startoff) == 0); sf = (xfs_attr_shortform_t *)((char *)obj + byteize(startoff)); e = &sf->list[0]; for (i = 0; i < idx; i++) e = XFS_ATTR_SF_NEXTENTRY(e); return bitize((int)XFS_ATTR_SF_ENTSIZE(e)); }
/*ARGSUSED*/ int dir2sf_size( void *obj, int startoff, int idx) { xfs_dir2_sf_entry_t *e; int i; xfs_dir2_sf_t *sf; ASSERT(bitoffs(startoff) == 0); ASSERT(idx == 0); sf = (xfs_dir2_sf_t *)((char *)obj + byteize(startoff)); e = xfs_dir2_sf_firstentry(sf); for (i = 0; i < sf->hdr.count; i++) e = xfs_dir2_sf_nextentry(sf, e); return bitize((int)((char *)e - (char *)sf)); }
/* * Get the offset of the ptr at idx in a btree block. */ static int btblock_ptr_offset( void *obj, int startoff, int idx) { struct xfs_btree_block *block = obj; struct xfs_db_btree *bt = block_to_bt(block); int offset; int maxrecs; ASSERT(startoff == 0); ASSERT(block->bb_level != 0); maxrecs = btblock_maxrecs(bt, mp->m_sb.sb_blocksize); offset = bt->block_len + maxrecs * bt->key_len + (idx - 1) * bt->ptr_len; return bitize(offset); }
{ struct xfs_dsymlink_hdr *hdr = obj; ASSERT(startoff == 0); if (hdr->sl_magic != cpu_to_be32(XFS_SYMLINK_MAGIC)) return 0; return be32_to_cpu(hdr->sl_bytes) + sizeof(*hdr); } const struct field symlink_crc_hfld[] = { { "", FLDT_SYMLINK_CRC, OI(0), C1, 0, TYP_NONE }, { NULL } }; #define OFF(f) bitize(offsetof(struct xfs_dsymlink_hdr, sl_ ## f)) #define SZOF(f) bitize(sizeof(struct xfs_dsymlink_hdr)) const struct field symlink_crc_flds[] = { { "magic", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE }, { "offset", FLDT_UINT32D, OI(OFF(offset)), C1, 0, TYP_NONE }, { "bytes", FLDT_UINT32D, OI(OFF(bytes)), C1, 0, TYP_NONE }, { "crc", FLDT_CRC, OI(OFF(crc)), C1, 0, TYP_NONE }, { "uuid", FLDT_UUID, OI(OFF(uuid)), C1, 0, TYP_NONE }, { "owner", FLDT_INO, OI(OFF(owner)), C1, 0, TYP_NONE }, { "bno", FLDT_DFSBNO, OI(OFF(blkno)), C1, 0, TYP_BMAPBTD }, { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, { "data", FLDT_CHARNS, OI(bitize(sizeof(struct xfs_dsymlink_hdr))), symlink_count, FLD_COUNT, TYP_NONE }, { NULL } };