xfs: move the fork format fields into struct xfs_ifork
Both the data and attr fork have a format that is stored in the legacy idinode. Move it into the xfs_ifork structure instead, where it uses up padding. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:

committed by
Darrick J. Wong

parent
daf83964a3
commit
f7e67b20ec
@@ -538,7 +538,7 @@ xfs_attr_shortform_bytesfit(
|
||||
/* rounded down */
|
||||
offset = (XFS_LITINO(mp) - bytes) >> 3;
|
||||
|
||||
if (dp->i_d.di_format == XFS_DINODE_FMT_DEV) {
|
||||
if (dp->i_df.if_format == XFS_DINODE_FMT_DEV) {
|
||||
minforkoff = roundup(sizeof(xfs_dev_t), 8) >> 3;
|
||||
return (offset >= minforkoff) ? minforkoff : 0;
|
||||
}
|
||||
@@ -566,7 +566,7 @@ xfs_attr_shortform_bytesfit(
|
||||
|
||||
dsize = dp->i_df.if_bytes;
|
||||
|
||||
switch (dp->i_d.di_format) {
|
||||
switch (dp->i_df.if_format) {
|
||||
case XFS_DINODE_FMT_EXTENTS:
|
||||
/*
|
||||
* If there is no attr fork and the data fork is extents,
|
||||
@@ -635,22 +635,19 @@ xfs_sbversion_add_attr2(xfs_mount_t *mp, xfs_trans_t *tp)
|
||||
* Create the initial contents of a shortform attribute list.
|
||||
*/
|
||||
void
|
||||
xfs_attr_shortform_create(xfs_da_args_t *args)
|
||||
xfs_attr_shortform_create(
|
||||
struct xfs_da_args *args)
|
||||
{
|
||||
xfs_attr_sf_hdr_t *hdr;
|
||||
xfs_inode_t *dp;
|
||||
struct xfs_ifork *ifp;
|
||||
struct xfs_inode *dp = args->dp;
|
||||
struct xfs_ifork *ifp = dp->i_afp;
|
||||
struct xfs_attr_sf_hdr *hdr;
|
||||
|
||||
trace_xfs_attr_sf_create(args);
|
||||
|
||||
dp = args->dp;
|
||||
ASSERT(dp != NULL);
|
||||
ifp = dp->i_afp;
|
||||
ASSERT(ifp != NULL);
|
||||
ASSERT(ifp->if_bytes == 0);
|
||||
if (dp->i_d.di_aformat == XFS_DINODE_FMT_EXTENTS) {
|
||||
if (ifp->if_format == XFS_DINODE_FMT_EXTENTS) {
|
||||
ifp->if_flags &= ~XFS_IFEXTENTS; /* just in case */
|
||||
dp->i_d.di_aformat = XFS_DINODE_FMT_LOCAL;
|
||||
ifp->if_format = XFS_DINODE_FMT_LOCAL;
|
||||
ifp->if_flags |= XFS_IFINLINE;
|
||||
} else {
|
||||
ASSERT(ifp->if_flags & XFS_IFINLINE);
|
||||
@@ -722,7 +719,6 @@ xfs_attr_fork_remove(
|
||||
|
||||
xfs_idestroy_fork(ip, XFS_ATTR_FORK);
|
||||
ip->i_d.di_forkoff = 0;
|
||||
ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS;
|
||||
|
||||
ASSERT(ip->i_afp == NULL);
|
||||
|
||||
@@ -775,7 +771,7 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
|
||||
totsize -= size;
|
||||
if (totsize == sizeof(xfs_attr_sf_hdr_t) &&
|
||||
(mp->m_flags & XFS_MOUNT_ATTR2) &&
|
||||
(dp->i_d.di_format != XFS_DINODE_FMT_BTREE) &&
|
||||
(dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
|
||||
!(args->op_flags & XFS_DA_OP_ADDNAME)) {
|
||||
xfs_attr_fork_remove(dp, args->trans);
|
||||
} else {
|
||||
@@ -785,7 +781,7 @@ xfs_attr_shortform_remove(xfs_da_args_t *args)
|
||||
ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) ||
|
||||
(args->op_flags & XFS_DA_OP_ADDNAME) ||
|
||||
!(mp->m_flags & XFS_MOUNT_ATTR2) ||
|
||||
dp->i_d.di_format == XFS_DINODE_FMT_BTREE);
|
||||
dp->i_df.if_format == XFS_DINODE_FMT_BTREE);
|
||||
xfs_trans_log_inode(args->trans, dp,
|
||||
XFS_ILOG_CORE | XFS_ILOG_ADATA);
|
||||
}
|
||||
@@ -962,7 +958,7 @@ xfs_attr_shortform_allfit(
|
||||
+ be16_to_cpu(name_loc->valuelen);
|
||||
}
|
||||
if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) &&
|
||||
(dp->i_d.di_format != XFS_DINODE_FMT_BTREE) &&
|
||||
(dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
|
||||
(bytes == sizeof(struct xfs_attr_sf_hdr)))
|
||||
return -1;
|
||||
return xfs_attr_shortform_bytesfit(dp, bytes);
|
||||
@@ -981,7 +977,7 @@ xfs_attr_shortform_verify(
|
||||
int i;
|
||||
int64_t size;
|
||||
|
||||
ASSERT(ip->i_d.di_aformat == XFS_DINODE_FMT_LOCAL);
|
||||
ASSERT(ip->i_afp->if_format == XFS_DINODE_FMT_LOCAL);
|
||||
ifp = XFS_IFORK_PTR(ip, XFS_ATTR_FORK);
|
||||
sfp = (struct xfs_attr_shortform *)ifp->if_u1.if_data;
|
||||
size = ifp->if_bytes;
|
||||
@@ -1085,7 +1081,7 @@ xfs_attr3_leaf_to_shortform(
|
||||
|
||||
if (forkoff == -1) {
|
||||
ASSERT(dp->i_mount->m_flags & XFS_MOUNT_ATTR2);
|
||||
ASSERT(dp->i_d.di_format != XFS_DINODE_FMT_BTREE);
|
||||
ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_BTREE);
|
||||
xfs_attr_fork_remove(dp, args->trans);
|
||||
goto out;
|
||||
}
|
||||
|
Reference in New Issue
Block a user