xfs: replace inode fork size macros with functions
Replace the shouty macros here with typechecked helper functions. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
932b42c66c
commit
c01147d929
@ -590,7 +590,7 @@ xfs_attr_shortform_bytesfit(
|
|||||||
* to real extents, or the delalloc conversion will take care of the
|
* to real extents, or the delalloc conversion will take care of the
|
||||||
* literal area rebalancing.
|
* literal area rebalancing.
|
||||||
*/
|
*/
|
||||||
if (bytes <= XFS_IFORK_ASIZE(dp))
|
if (bytes <= xfs_inode_attr_fork_size(dp))
|
||||||
return dp->i_forkoff;
|
return dp->i_forkoff;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -880,7 +880,7 @@ xfs_bmap_add_attrfork_btree(
|
|||||||
|
|
||||||
mp = ip->i_mount;
|
mp = ip->i_mount;
|
||||||
|
|
||||||
if (XFS_BMAP_BMDR_SPACE(block) <= XFS_IFORK_DSIZE(ip))
|
if (XFS_BMAP_BMDR_SPACE(block) <= xfs_inode_data_fork_size(ip))
|
||||||
*flags |= XFS_ILOG_DBROOT;
|
*flags |= XFS_ILOG_DBROOT;
|
||||||
else {
|
else {
|
||||||
cur = xfs_bmbt_init_cursor(mp, tp, ip, XFS_DATA_FORK);
|
cur = xfs_bmbt_init_cursor(mp, tp, ip, XFS_DATA_FORK);
|
||||||
@ -920,7 +920,7 @@ xfs_bmap_add_attrfork_extents(
|
|||||||
int error; /* error return value */
|
int error; /* error return value */
|
||||||
|
|
||||||
if (ip->i_df.if_nextents * sizeof(struct xfs_bmbt_rec) <=
|
if (ip->i_df.if_nextents * sizeof(struct xfs_bmbt_rec) <=
|
||||||
XFS_IFORK_DSIZE(ip))
|
xfs_inode_data_fork_size(ip))
|
||||||
return 0;
|
return 0;
|
||||||
cur = NULL;
|
cur = NULL;
|
||||||
error = xfs_bmap_extents_to_btree(tp, ip, &cur, 0, flags,
|
error = xfs_bmap_extents_to_btree(tp, ip, &cur, 0, flags,
|
||||||
@ -951,7 +951,7 @@ xfs_bmap_add_attrfork_local(
|
|||||||
{
|
{
|
||||||
struct xfs_da_args dargs; /* args for dir/attr code */
|
struct xfs_da_args dargs; /* args for dir/attr code */
|
||||||
|
|
||||||
if (ip->i_df.if_bytes <= XFS_IFORK_DSIZE(ip))
|
if (ip->i_df.if_bytes <= xfs_inode_data_fork_size(ip))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (S_ISDIR(VFS_I(ip)->i_mode)) {
|
if (S_ISDIR(VFS_I(ip)->i_mode)) {
|
||||||
|
@ -564,7 +564,7 @@ xfs_bmbt_init_cursor(
|
|||||||
if (xfs_has_crc(mp))
|
if (xfs_has_crc(mp))
|
||||||
cur->bc_flags |= XFS_BTREE_CRC_BLOCKS;
|
cur->bc_flags |= XFS_BTREE_CRC_BLOCKS;
|
||||||
|
|
||||||
cur->bc_ino.forksize = XFS_IFORK_SIZE(ip, whichfork);
|
cur->bc_ino.forksize = xfs_inode_fork_size(ip, whichfork);
|
||||||
cur->bc_ino.ip = ip;
|
cur->bc_ino.ip = ip;
|
||||||
cur->bc_ino.allocated = 0;
|
cur->bc_ino.allocated = 0;
|
||||||
cur->bc_ino.flags = 0;
|
cur->bc_ino.flags = 0;
|
||||||
|
@ -193,7 +193,7 @@ xfs_dir_isempty(
|
|||||||
ASSERT(S_ISDIR(VFS_I(dp)->i_mode));
|
ASSERT(S_ISDIR(VFS_I(dp)->i_mode));
|
||||||
if (dp->i_disk_size == 0) /* might happen during shutdown. */
|
if (dp->i_disk_size == 0) /* might happen during shutdown. */
|
||||||
return 1;
|
return 1;
|
||||||
if (dp->i_disk_size > XFS_IFORK_DSIZE(dp))
|
if (dp->i_disk_size > xfs_inode_data_fork_size(dp))
|
||||||
return 0;
|
return 0;
|
||||||
sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
|
sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
|
||||||
return !sfp->count;
|
return !sfp->count;
|
||||||
|
@ -842,7 +842,7 @@ xfs_dir2_block_removename(
|
|||||||
* See if the size as a shortform is good enough.
|
* See if the size as a shortform is good enough.
|
||||||
*/
|
*/
|
||||||
size = xfs_dir2_block_sfsize(dp, hdr, &sfh);
|
size = xfs_dir2_block_sfsize(dp, hdr, &sfh);
|
||||||
if (size > XFS_IFORK_DSIZE(dp))
|
if (size > xfs_inode_data_fork_size(dp))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1055,7 +1055,7 @@ xfs_dir2_leaf_to_block(
|
|||||||
* Now see if the resulting block can be shrunken to shortform.
|
* Now see if the resulting block can be shrunken to shortform.
|
||||||
*/
|
*/
|
||||||
size = xfs_dir2_block_sfsize(dp, hdr, &sfh);
|
size = xfs_dir2_block_sfsize(dp, hdr, &sfh);
|
||||||
if (size > XFS_IFORK_DSIZE(dp))
|
if (size > xfs_inode_data_fork_size(dp))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return xfs_dir2_block_to_sf(args, dbp, size, &sfh);
|
return xfs_dir2_block_to_sf(args, dbp, size, &sfh);
|
||||||
|
@ -237,7 +237,7 @@ xfs_dir2_block_sfsize(
|
|||||||
(i8count ? /* inumber */
|
(i8count ? /* inumber */
|
||||||
count * XFS_INO64_SIZE :
|
count * XFS_INO64_SIZE :
|
||||||
count * XFS_INO32_SIZE);
|
count * XFS_INO32_SIZE);
|
||||||
if (size > XFS_IFORK_DSIZE(dp))
|
if (size > xfs_inode_data_fork_size(dp))
|
||||||
return size; /* size value is a failure */
|
return size; /* size value is a failure */
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -406,7 +406,7 @@ xfs_dir2_sf_addname(
|
|||||||
* Won't fit as shortform any more (due to size),
|
* Won't fit as shortform any more (due to size),
|
||||||
* or the pick routine says it won't (due to offset values).
|
* or the pick routine says it won't (due to offset values).
|
||||||
*/
|
*/
|
||||||
if (new_isize > XFS_IFORK_DSIZE(dp) ||
|
if (new_isize > xfs_inode_data_fork_size(dp) ||
|
||||||
(pick =
|
(pick =
|
||||||
xfs_dir2_sf_addname_pick(args, objchange, &sfep, &offset)) == 0) {
|
xfs_dir2_sf_addname_pick(args, objchange, &sfep, &offset)) == 0) {
|
||||||
/*
|
/*
|
||||||
@ -1031,7 +1031,7 @@ xfs_dir2_sf_replace_needblock(
|
|||||||
newsize = dp->i_df.if_bytes + (sfp->count + 1) * XFS_INO64_DIFF;
|
newsize = dp->i_df.if_bytes + (sfp->count + 1) * XFS_INO64_DIFF;
|
||||||
|
|
||||||
return inum > XFS_DIR2_MAX_SHORT_INUM &&
|
return inum > XFS_DIR2_MAX_SHORT_INUM &&
|
||||||
sfp->i8count == 0 && newsize > XFS_IFORK_DSIZE(dp);
|
sfp->i8count == 0 && newsize > xfs_inode_data_fork_size(dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -407,7 +407,7 @@ xfs_iroot_realloc(
|
|||||||
(int)new_size);
|
(int)new_size);
|
||||||
ifp->if_broot_bytes = (int)new_size;
|
ifp->if_broot_bytes = (int)new_size;
|
||||||
ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <=
|
ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <=
|
||||||
XFS_IFORK_SIZE(ip, whichfork));
|
xfs_inode_fork_size(ip, whichfork));
|
||||||
memmove(np, op, cur_max * (uint)sizeof(xfs_fsblock_t));
|
memmove(np, op, cur_max * (uint)sizeof(xfs_fsblock_t));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -461,7 +461,7 @@ xfs_iroot_realloc(
|
|||||||
ifp->if_broot_bytes = (int)new_size;
|
ifp->if_broot_bytes = (int)new_size;
|
||||||
if (ifp->if_broot)
|
if (ifp->if_broot)
|
||||||
ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <=
|
ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <=
|
||||||
XFS_IFORK_SIZE(ip, whichfork));
|
xfs_inode_fork_size(ip, whichfork));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,7 +491,7 @@ xfs_idata_realloc(
|
|||||||
int64_t new_size = ifp->if_bytes + byte_diff;
|
int64_t new_size = ifp->if_bytes + byte_diff;
|
||||||
|
|
||||||
ASSERT(new_size >= 0);
|
ASSERT(new_size >= 0);
|
||||||
ASSERT(new_size <= XFS_IFORK_SIZE(ip, whichfork));
|
ASSERT(new_size <= xfs_inode_fork_size(ip, whichfork));
|
||||||
|
|
||||||
if (byte_diff == 0)
|
if (byte_diff == 0)
|
||||||
return;
|
return;
|
||||||
@ -614,7 +614,7 @@ xfs_iflush_fork(
|
|||||||
if ((iip->ili_fields & dataflag[whichfork]) &&
|
if ((iip->ili_fields & dataflag[whichfork]) &&
|
||||||
(ifp->if_bytes > 0)) {
|
(ifp->if_bytes > 0)) {
|
||||||
ASSERT(ifp->if_u1.if_data != NULL);
|
ASSERT(ifp->if_u1.if_data != NULL);
|
||||||
ASSERT(ifp->if_bytes <= XFS_IFORK_SIZE(ip, whichfork));
|
ASSERT(ifp->if_bytes <= xfs_inode_fork_size(ip, whichfork));
|
||||||
memcpy(cp, ifp->if_u1.if_data, ifp->if_bytes);
|
memcpy(cp, ifp->if_u1.if_data, ifp->if_bytes);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -633,7 +633,7 @@ xfs_iflush_fork(
|
|||||||
(ifp->if_broot_bytes > 0)) {
|
(ifp->if_broot_bytes > 0)) {
|
||||||
ASSERT(ifp->if_broot != NULL);
|
ASSERT(ifp->if_broot != NULL);
|
||||||
ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <=
|
ASSERT(XFS_BMAP_BMDR_SPACE(ifp->if_broot) <=
|
||||||
XFS_IFORK_SIZE(ip, whichfork));
|
xfs_inode_fork_size(ip, whichfork));
|
||||||
xfs_bmbt_to_bmdr(mp, ifp->if_broot, ifp->if_broot_bytes,
|
xfs_bmbt_to_bmdr(mp, ifp->if_broot, ifp->if_broot_bytes,
|
||||||
(xfs_bmdr_block_t *)cp,
|
(xfs_bmdr_block_t *)cp,
|
||||||
XFS_DFORK_SIZE(dip, mp, whichfork));
|
XFS_DFORK_SIZE(dip, mp, whichfork));
|
||||||
|
@ -77,21 +77,8 @@ struct xfs_ifork {
|
|||||||
/*
|
/*
|
||||||
* Fork handling.
|
* Fork handling.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define XFS_IFORK_BOFF(ip) ((int)((ip)->i_forkoff << 3))
|
|
||||||
|
|
||||||
#define XFS_IFORK_DSIZE(ip) \
|
|
||||||
(xfs_inode_has_attr_fork(ip) ? XFS_IFORK_BOFF(ip) : XFS_LITINO((ip)->i_mount))
|
|
||||||
#define XFS_IFORK_ASIZE(ip) \
|
|
||||||
(xfs_inode_has_attr_fork(ip) ? XFS_LITINO((ip)->i_mount) - XFS_IFORK_BOFF(ip) : 0)
|
|
||||||
#define XFS_IFORK_SIZE(ip,w) \
|
|
||||||
((w) == XFS_DATA_FORK ? \
|
|
||||||
XFS_IFORK_DSIZE(ip) : \
|
|
||||||
((w) == XFS_ATTR_FORK ? \
|
|
||||||
XFS_IFORK_ASIZE(ip) : \
|
|
||||||
0))
|
|
||||||
#define XFS_IFORK_MAXEXT(ip, w) \
|
#define XFS_IFORK_MAXEXT(ip, w) \
|
||||||
(XFS_IFORK_SIZE(ip, w) / sizeof(xfs_bmbt_rec_t))
|
(xfs_inode_fork_size(ip, w) / sizeof(xfs_bmbt_rec_t))
|
||||||
|
|
||||||
static inline bool xfs_ifork_has_extents(struct xfs_ifork *ifp)
|
static inline bool xfs_ifork_has_extents(struct xfs_ifork *ifp)
|
||||||
{
|
{
|
||||||
|
@ -52,8 +52,8 @@ xchk_symlink(
|
|||||||
|
|
||||||
/* Inline symlink? */
|
/* Inline symlink? */
|
||||||
if (ifp->if_format == XFS_DINODE_FMT_LOCAL) {
|
if (ifp->if_format == XFS_DINODE_FMT_LOCAL) {
|
||||||
if (len > XFS_IFORK_DSIZE(ip) ||
|
if (len > xfs_inode_data_fork_size(ip) ||
|
||||||
len > strnlen(ifp->if_u1.if_data, XFS_IFORK_DSIZE(ip)))
|
len > strnlen(ifp->if_u1.if_data, xfs_inode_data_fork_size(ip)))
|
||||||
xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, 0);
|
xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, 0);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -1321,7 +1321,7 @@ xfs_swap_extents_check_format(
|
|||||||
*/
|
*/
|
||||||
if (tifp->if_format == XFS_DINODE_FMT_BTREE) {
|
if (tifp->if_format == XFS_DINODE_FMT_BTREE) {
|
||||||
if (xfs_inode_has_attr_fork(ip) &&
|
if (xfs_inode_has_attr_fork(ip) &&
|
||||||
XFS_BMAP_BMDR_SPACE(tifp->if_broot) > XFS_IFORK_BOFF(ip))
|
XFS_BMAP_BMDR_SPACE(tifp->if_broot) > xfs_inode_fork_boff(ip))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (tifp->if_nextents <= XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK))
|
if (tifp->if_nextents <= XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -1330,7 +1330,7 @@ xfs_swap_extents_check_format(
|
|||||||
/* Reciprocal target->temp btree format checks */
|
/* Reciprocal target->temp btree format checks */
|
||||||
if (ifp->if_format == XFS_DINODE_FMT_BTREE) {
|
if (ifp->if_format == XFS_DINODE_FMT_BTREE) {
|
||||||
if (xfs_inode_has_attr_fork(tip) &&
|
if (xfs_inode_has_attr_fork(tip) &&
|
||||||
XFS_BMAP_BMDR_SPACE(ip->i_df.if_broot) > XFS_IFORK_BOFF(tip))
|
XFS_BMAP_BMDR_SPACE(ip->i_df.if_broot) > xfs_inode_fork_boff(tip))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (ifp->if_nextents <= XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK))
|
if (ifp->if_nextents <= XFS_IFORK_MAXEXT(tip, XFS_DATA_FORK))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -102,6 +102,41 @@ xfs_ifork_ptr(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned int xfs_inode_fork_boff(struct xfs_inode *ip)
|
||||||
|
{
|
||||||
|
return ip->i_forkoff << 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned int xfs_inode_data_fork_size(struct xfs_inode *ip)
|
||||||
|
{
|
||||||
|
if (xfs_inode_has_attr_fork(ip))
|
||||||
|
return xfs_inode_fork_boff(ip);
|
||||||
|
|
||||||
|
return XFS_LITINO(ip->i_mount);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned int xfs_inode_attr_fork_size(struct xfs_inode *ip)
|
||||||
|
{
|
||||||
|
if (xfs_inode_has_attr_fork(ip))
|
||||||
|
return XFS_LITINO(ip->i_mount) - xfs_inode_fork_boff(ip);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned int
|
||||||
|
xfs_inode_fork_size(
|
||||||
|
struct xfs_inode *ip,
|
||||||
|
int whichfork)
|
||||||
|
{
|
||||||
|
switch (whichfork) {
|
||||||
|
case XFS_DATA_FORK:
|
||||||
|
return xfs_inode_data_fork_size(ip);
|
||||||
|
case XFS_ATTR_FORK:
|
||||||
|
return xfs_inode_attr_fork_size(ip);
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Convert from vfs inode to xfs inode */
|
/* Convert from vfs inode to xfs inode */
|
||||||
static inline struct xfs_inode *XFS_I(struct inode *inode)
|
static inline struct xfs_inode *XFS_I(struct inode *inode)
|
||||||
{
|
{
|
||||||
|
@ -57,7 +57,7 @@ xfs_inode_item_data_fork_size(
|
|||||||
ip->i_df.if_nextents > 0 &&
|
ip->i_df.if_nextents > 0 &&
|
||||||
ip->i_df.if_bytes > 0) {
|
ip->i_df.if_bytes > 0) {
|
||||||
/* worst case, doesn't subtract delalloc extents */
|
/* worst case, doesn't subtract delalloc extents */
|
||||||
*nbytes += XFS_IFORK_DSIZE(ip);
|
*nbytes += xfs_inode_data_fork_size(ip);
|
||||||
*nvecs += 1;
|
*nvecs += 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -98,7 +98,7 @@ xfs_inode_item_attr_fork_size(
|
|||||||
ip->i_af.if_nextents > 0 &&
|
ip->i_af.if_nextents > 0 &&
|
||||||
ip->i_af.if_bytes > 0) {
|
ip->i_af.if_bytes > 0) {
|
||||||
/* worst case, doesn't subtract unused space */
|
/* worst case, doesn't subtract unused space */
|
||||||
*nbytes += XFS_IFORK_ASIZE(ip);
|
*nbytes += xfs_inode_attr_fork_size(ip);
|
||||||
*nvecs += 1;
|
*nvecs += 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -112,7 +112,7 @@ xfs_bulkstat_one_int(
|
|||||||
|
|
||||||
xfs_bulkstat_health(ip, buf);
|
xfs_bulkstat_health(ip, buf);
|
||||||
buf->bs_aextents = xfs_ifork_nextents(&ip->i_af);
|
buf->bs_aextents = xfs_ifork_nextents(&ip->i_af);
|
||||||
buf->bs_forkoff = XFS_IFORK_BOFF(ip);
|
buf->bs_forkoff = xfs_inode_fork_boff(ip);
|
||||||
buf->bs_version = XFS_BULKSTAT_VERSION_V5;
|
buf->bs_version = XFS_BULKSTAT_VERSION_V5;
|
||||||
|
|
||||||
if (xfs_has_v3inodes(mp)) {
|
if (xfs_has_v3inodes(mp)) {
|
||||||
|
@ -256,7 +256,7 @@ xfs_symlink(
|
|||||||
/*
|
/*
|
||||||
* If the symlink will fit into the inode, write it inline.
|
* If the symlink will fit into the inode, write it inline.
|
||||||
*/
|
*/
|
||||||
if (pathlen <= XFS_IFORK_DSIZE(ip)) {
|
if (pathlen <= xfs_inode_data_fork_size(ip)) {
|
||||||
xfs_init_local_fork(ip, XFS_DATA_FORK, target_path, pathlen);
|
xfs_init_local_fork(ip, XFS_DATA_FORK, target_path, pathlen);
|
||||||
|
|
||||||
ip->i_disk_size = pathlen;
|
ip->i_disk_size = pathlen;
|
||||||
|
@ -2171,7 +2171,7 @@ DECLARE_EVENT_CLASS(xfs_swap_extent_class,
|
|||||||
__entry->format = ip->i_df.if_format;
|
__entry->format = ip->i_df.if_format;
|
||||||
__entry->nex = ip->i_df.if_nextents;
|
__entry->nex = ip->i_df.if_nextents;
|
||||||
__entry->broot_size = ip->i_df.if_broot_bytes;
|
__entry->broot_size = ip->i_df.if_broot_bytes;
|
||||||
__entry->fork_off = XFS_IFORK_BOFF(ip);
|
__entry->fork_off = xfs_inode_fork_boff(ip);
|
||||||
),
|
),
|
||||||
TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %llu, "
|
TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %llu, "
|
||||||
"broot size %d, forkoff 0x%x",
|
"broot size %d, forkoff 0x%x",
|
||||||
|
Loading…
Reference in New Issue
Block a user