[XFS] dinode endianess annotations
Biggest bit is duplicating the dinode structure so we have one annotated for native endianess and one for disk endianess. The other significant change is that xfs_xlate_dinode_core is split into one helper per direction to allow for proper annotations, everything else is trivial. As a sidenode splitting out the incore dinode means we can move it into xfs_inode.h in a later patch and severely improving on the include hell in xfs. SGI-PV: 968563 SGI-Modid: xfs-linux-melb:xfs-kern:29476a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Tim Shimmin <tes@sgi.com>
This commit is contained in:
committed by
Tim Shimmin
parent
ddc6d3b32a
commit
347d1c0195
@ -57,7 +57,7 @@ xfs_bulkstat_one_iget(
|
||||
xfs_bstat_t *buf, /* return buffer */
|
||||
int *stat) /* BULKSTAT_RV_... */
|
||||
{
|
||||
xfs_dinode_core_t *dic; /* dinode core info pointer */
|
||||
xfs_icdinode_t *dic; /* dinode core info pointer */
|
||||
xfs_inode_t *ip; /* incore inode pointer */
|
||||
bhv_vnode_t *vp;
|
||||
int error;
|
||||
@ -151,37 +151,37 @@ xfs_bulkstat_one_dinode(
|
||||
* the new format. We don't change the version number so that we
|
||||
* can distinguish this from a real new format inode.
|
||||
*/
|
||||
if (INT_GET(dic->di_version, ARCH_CONVERT) == XFS_DINODE_VERSION_1) {
|
||||
buf->bs_nlink = INT_GET(dic->di_onlink, ARCH_CONVERT);
|
||||
if (dic->di_version == XFS_DINODE_VERSION_1) {
|
||||
buf->bs_nlink = be16_to_cpu(dic->di_onlink);
|
||||
buf->bs_projid = 0;
|
||||
} else {
|
||||
buf->bs_nlink = INT_GET(dic->di_nlink, ARCH_CONVERT);
|
||||
buf->bs_projid = INT_GET(dic->di_projid, ARCH_CONVERT);
|
||||
buf->bs_nlink = be32_to_cpu(dic->di_nlink);
|
||||
buf->bs_projid = be16_to_cpu(dic->di_projid);
|
||||
}
|
||||
|
||||
buf->bs_ino = ino;
|
||||
buf->bs_mode = INT_GET(dic->di_mode, ARCH_CONVERT);
|
||||
buf->bs_uid = INT_GET(dic->di_uid, ARCH_CONVERT);
|
||||
buf->bs_gid = INT_GET(dic->di_gid, ARCH_CONVERT);
|
||||
buf->bs_size = INT_GET(dic->di_size, ARCH_CONVERT);
|
||||
buf->bs_atime.tv_sec = INT_GET(dic->di_atime.t_sec, ARCH_CONVERT);
|
||||
buf->bs_atime.tv_nsec = INT_GET(dic->di_atime.t_nsec, ARCH_CONVERT);
|
||||
buf->bs_mtime.tv_sec = INT_GET(dic->di_mtime.t_sec, ARCH_CONVERT);
|
||||
buf->bs_mtime.tv_nsec = INT_GET(dic->di_mtime.t_nsec, ARCH_CONVERT);
|
||||
buf->bs_ctime.tv_sec = INT_GET(dic->di_ctime.t_sec, ARCH_CONVERT);
|
||||
buf->bs_ctime.tv_nsec = INT_GET(dic->di_ctime.t_nsec, ARCH_CONVERT);
|
||||
buf->bs_mode = be16_to_cpu(dic->di_mode);
|
||||
buf->bs_uid = be32_to_cpu(dic->di_uid);
|
||||
buf->bs_gid = be32_to_cpu(dic->di_gid);
|
||||
buf->bs_size = be64_to_cpu(dic->di_size);
|
||||
buf->bs_atime.tv_sec = be32_to_cpu(dic->di_atime.t_sec);
|
||||
buf->bs_atime.tv_nsec = be32_to_cpu(dic->di_atime.t_nsec);
|
||||
buf->bs_mtime.tv_sec = be32_to_cpu(dic->di_mtime.t_sec);
|
||||
buf->bs_mtime.tv_nsec = be32_to_cpu(dic->di_mtime.t_nsec);
|
||||
buf->bs_ctime.tv_sec = be32_to_cpu(dic->di_ctime.t_sec);
|
||||
buf->bs_ctime.tv_nsec = be32_to_cpu(dic->di_ctime.t_nsec);
|
||||
buf->bs_xflags = xfs_dic2xflags(dic);
|
||||
buf->bs_extsize = INT_GET(dic->di_extsize, ARCH_CONVERT) << mp->m_sb.sb_blocklog;
|
||||
buf->bs_extents = INT_GET(dic->di_nextents, ARCH_CONVERT);
|
||||
buf->bs_gen = INT_GET(dic->di_gen, ARCH_CONVERT);
|
||||
buf->bs_extsize = be32_to_cpu(dic->di_extsize) << mp->m_sb.sb_blocklog;
|
||||
buf->bs_extents = be32_to_cpu(dic->di_nextents);
|
||||
buf->bs_gen = be32_to_cpu(dic->di_gen);
|
||||
memset(buf->bs_pad, 0, sizeof(buf->bs_pad));
|
||||
buf->bs_dmevmask = INT_GET(dic->di_dmevmask, ARCH_CONVERT);
|
||||
buf->bs_dmstate = INT_GET(dic->di_dmstate, ARCH_CONVERT);
|
||||
buf->bs_aextents = INT_GET(dic->di_anextents, ARCH_CONVERT);
|
||||
buf->bs_dmevmask = be32_to_cpu(dic->di_dmevmask);
|
||||
buf->bs_dmstate = be16_to_cpu(dic->di_dmstate);
|
||||
buf->bs_aextents = be16_to_cpu(dic->di_anextents);
|
||||
|
||||
switch (INT_GET(dic->di_format, ARCH_CONVERT)) {
|
||||
switch (dic->di_format) {
|
||||
case XFS_DINODE_FMT_DEV:
|
||||
buf->bs_rdev = INT_GET(dip->di_u.di_dev, ARCH_CONVERT);
|
||||
buf->bs_rdev = be32_to_cpu(dip->di_u.di_dev);
|
||||
buf->bs_blksize = BLKDEV_IOSIZE;
|
||||
buf->bs_blocks = 0;
|
||||
break;
|
||||
@ -195,7 +195,7 @@ xfs_bulkstat_one_dinode(
|
||||
case XFS_DINODE_FMT_BTREE:
|
||||
buf->bs_rdev = 0;
|
||||
buf->bs_blksize = mp->m_sb.sb_blocksize;
|
||||
buf->bs_blocks = INT_GET(dic->di_nblocks, ARCH_CONVERT);
|
||||
buf->bs_blocks = be64_to_cpu(dic->di_nblocks);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -290,16 +290,15 @@ xfs_bulkstat_use_dinode(
|
||||
return 1;
|
||||
dip = (xfs_dinode_t *)
|
||||
xfs_buf_offset(bp, clustidx << mp->m_sb.sb_inodelog);
|
||||
if (INT_GET(dip->di_core.di_magic, ARCH_CONVERT) != XFS_DINODE_MAGIC ||
|
||||
!XFS_DINODE_GOOD_VERSION(
|
||||
INT_GET(dip->di_core.di_version, ARCH_CONVERT)))
|
||||
if (be16_to_cpu(dip->di_core.di_magic) != XFS_DINODE_MAGIC ||
|
||||
!XFS_DINODE_GOOD_VERSION(dip->di_core.di_version))
|
||||
return 0;
|
||||
if (flags & BULKSTAT_FG_QUICK) {
|
||||
*dipp = dip;
|
||||
return 1;
|
||||
}
|
||||
/* BULKSTAT_FG_INLINE: if attr fork is local, or not there, use it */
|
||||
aformat = INT_GET(dip->di_core.di_aformat, ARCH_CONVERT);
|
||||
aformat = dip->di_core.di_aformat;
|
||||
if ((XFS_CFORK_Q(&dip->di_core) == 0) ||
|
||||
(aformat == XFS_DINODE_FMT_LOCAL) ||
|
||||
(aformat == XFS_DINODE_FMT_EXTENTS && !dip->di_core.di_anextents)) {
|
||||
|
Reference in New Issue
Block a user