xfs: move the di_flags2 field to struct xfs_inode

In preparation of removing the historic icinode struct, move the flags2
field into the containing xfs_inode structure.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
Christoph Hellwig 2021-03-29 11:11:45 -07:00 committed by Darrick J. Wong
parent db07349da2
commit 3e09ab8fdc
13 changed files with 49 additions and 52 deletions

View file

@ -240,7 +240,7 @@ xfs_inode_from_disk(
inode_set_iversion_queried(inode, inode_set_iversion_queried(inode,
be64_to_cpu(from->di_changecount)); be64_to_cpu(from->di_changecount));
to->di_crtime = xfs_inode_from_disk_ts(from, from->di_crtime); to->di_crtime = xfs_inode_from_disk_ts(from, from->di_crtime);
to->di_flags2 = be64_to_cpu(from->di_flags2); ip->i_diflags2 = be64_to_cpu(from->di_flags2);
ip->i_cowextsize = be32_to_cpu(from->di_cowextsize); ip->i_cowextsize = be32_to_cpu(from->di_cowextsize);
} }
@ -319,7 +319,7 @@ xfs_inode_to_disk(
to->di_version = 3; to->di_version = 3;
to->di_changecount = cpu_to_be64(inode_peek_iversion(inode)); to->di_changecount = cpu_to_be64(inode_peek_iversion(inode));
to->di_crtime = xfs_inode_to_disk_ts(ip, from->di_crtime); to->di_crtime = xfs_inode_to_disk_ts(ip, from->di_crtime);
to->di_flags2 = cpu_to_be64(from->di_flags2); to->di_flags2 = cpu_to_be64(ip->i_diflags2);
to->di_cowextsize = cpu_to_be32(ip->i_cowextsize); to->di_cowextsize = cpu_to_be32(ip->i_cowextsize);
to->di_ino = cpu_to_be64(ip->i_ino); to->di_ino = cpu_to_be64(ip->i_ino);
to->di_lsn = cpu_to_be64(lsn); to->di_lsn = cpu_to_be64(lsn);

View file

@ -16,8 +16,6 @@ struct xfs_dinode;
* format specific structures at the appropriate time. * format specific structures at the appropriate time.
*/ */
struct xfs_icdinode { struct xfs_icdinode {
uint64_t di_flags2; /* more random flags */
struct timespec64 di_crtime; /* time created */ struct timespec64 di_crtime; /* time created */
}; };

View file

@ -138,7 +138,7 @@ xfs_trans_log_inode(
if ((flags & (XFS_ILOG_CORE | XFS_ILOG_TIMESTAMP)) && if ((flags & (XFS_ILOG_CORE | XFS_ILOG_TIMESTAMP)) &&
xfs_sb_version_hasbigtime(&ip->i_mount->m_sb) && xfs_sb_version_hasbigtime(&ip->i_mount->m_sb) &&
!xfs_inode_has_bigtime(ip)) { !xfs_inode_has_bigtime(ip)) {
ip->i_d.di_flags2 |= XFS_DIFLAG2_BIGTIME; ip->i_diflags2 |= XFS_DIFLAG2_BIGTIME;
flags |= XFS_ILOG_CORE; flags |= XFS_ILOG_CORE;
} }

View file

@ -1323,9 +1323,9 @@ xfs_swap_extent_rmap(
* rmap functions when we go to fix up the rmaps. The flags * rmap functions when we go to fix up the rmaps. The flags
* will be switch for reals later. * will be switch for reals later.
*/ */
tip_flags2 = tip->i_d.di_flags2; tip_flags2 = tip->i_diflags2;
if (ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK) if (ip->i_diflags2 & XFS_DIFLAG2_REFLINK)
tip->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK; tip->i_diflags2 |= XFS_DIFLAG2_REFLINK;
offset_fsb = 0; offset_fsb = 0;
end_fsb = XFS_B_TO_FSB(ip->i_mount, i_size_read(VFS_I(ip))); end_fsb = XFS_B_TO_FSB(ip->i_mount, i_size_read(VFS_I(ip)));
@ -1412,12 +1412,12 @@ xfs_swap_extent_rmap(
offset_fsb += ilen; offset_fsb += ilen;
} }
tip->i_d.di_flags2 = tip_flags2; tip->i_diflags2 = tip_flags2;
return 0; return 0;
out: out:
trace_xfs_swap_extent_rmap_error(ip, error, _RET_IP_); trace_xfs_swap_extent_rmap_error(ip, error, _RET_IP_);
tip->i_d.di_flags2 = tip_flags2; tip->i_diflags2 = tip_flags2;
return error; return error;
} }
@ -1715,13 +1715,13 @@ xfs_swap_extents(
goto out_trans_cancel; goto out_trans_cancel;
/* Do we have to swap reflink flags? */ /* Do we have to swap reflink flags? */
if ((ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK) ^ if ((ip->i_diflags2 & XFS_DIFLAG2_REFLINK) ^
(tip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK)) { (tip->i_diflags2 & XFS_DIFLAG2_REFLINK)) {
f = ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK; f = ip->i_diflags2 & XFS_DIFLAG2_REFLINK;
ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK;
ip->i_d.di_flags2 |= tip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK; ip->i_diflags2 |= tip->i_diflags2 & XFS_DIFLAG2_REFLINK;
tip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; tip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK;
tip->i_d.di_flags2 |= f & XFS_DIFLAG2_REFLINK; tip->i_diflags2 |= f & XFS_DIFLAG2_REFLINK;
} }
/* Swap the cow forks. */ /* Swap the cow forks. */

View file

@ -1159,9 +1159,9 @@ xfs_file_remap_range(
*/ */
cowextsize = 0; cowextsize = 0;
if (pos_in == 0 && len == i_size_read(inode_in) && if (pos_in == 0 && len == i_size_read(inode_in) &&
(src->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE) && (src->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) &&
pos_out == 0 && len >= i_size_read(inode_out) && pos_out == 0 && len >= i_size_read(inode_out) &&
!(dest->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE)) !(dest->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE))
cowextsize = src->i_cowextsize; cowextsize = src->i_cowextsize;
ret = xfs_reflink_update_dest(dest, pos_out + len, cowextsize, ret = xfs_reflink_update_dest(dest, pos_out + len, cowextsize,

View file

@ -63,7 +63,7 @@ xfs_inode_alloc(
memset(&ip->i_df, 0, sizeof(ip->i_df)); memset(&ip->i_df, 0, sizeof(ip->i_df));
ip->i_flags = 0; ip->i_flags = 0;
ip->i_delayed_blks = 0; ip->i_delayed_blks = 0;
ip->i_d.di_flags2 = mp->m_ino_geo.new_diflags2; ip->i_diflags2 = mp->m_ino_geo.new_diflags2;
ip->i_nblocks = 0; ip->i_nblocks = 0;
ip->i_forkoff = 0; ip->i_forkoff = 0;
ip->i_sick = 0; ip->i_sick = 0;

View file

@ -80,7 +80,7 @@ xfs_get_cowextsz_hint(
xfs_extlen_t a, b; xfs_extlen_t a, b;
a = 0; a = 0;
if (ip->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE) if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE)
a = ip->i_cowextsize; a = ip->i_cowextsize;
b = xfs_get_extsz_hint(ip); b = xfs_get_extsz_hint(ip);
@ -654,9 +654,7 @@ uint
xfs_ip2xflags( xfs_ip2xflags(
struct xfs_inode *ip) struct xfs_inode *ip)
{ {
struct xfs_icdinode *dic = &ip->i_d; return _xfs_dic2xflags(ip->i_diflags, ip->i_diflags2, XFS_IFORK_Q(ip));
return _xfs_dic2xflags(ip->i_diflags, dic->di_flags2, XFS_IFORK_Q(ip));
} }
/* /*
@ -752,12 +750,12 @@ xfs_inode_inherit_flags2(
struct xfs_inode *ip, struct xfs_inode *ip,
const struct xfs_inode *pip) const struct xfs_inode *pip)
{ {
if (pip->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE) { if (pip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) {
ip->i_d.di_flags2 |= XFS_DIFLAG2_COWEXTSIZE; ip->i_diflags2 |= XFS_DIFLAG2_COWEXTSIZE;
ip->i_cowextsize = pip->i_cowextsize; ip->i_cowextsize = pip->i_cowextsize;
} }
if (pip->i_d.di_flags2 & XFS_DIFLAG2_DAX) if (pip->i_diflags2 & XFS_DIFLAG2_DAX)
ip->i_d.di_flags2 |= XFS_DIFLAG2_DAX; ip->i_diflags2 |= XFS_DIFLAG2_DAX;
} }
/* /*
@ -862,7 +860,7 @@ xfs_init_new_inode(
case S_IFDIR: case S_IFDIR:
if (pip && (pip->i_diflags & XFS_DIFLAG_ANY)) if (pip && (pip->i_diflags & XFS_DIFLAG_ANY))
xfs_inode_inherit_flags(ip, pip); xfs_inode_inherit_flags(ip, pip);
if (pip && (pip->i_d.di_flags2 & XFS_DIFLAG2_ANY)) if (pip && (pip->i_diflags2 & XFS_DIFLAG2_ANY))
xfs_inode_inherit_flags2(ip, pip); xfs_inode_inherit_flags2(ip, pip);
/* FALLTHROUGH */ /* FALLTHROUGH */
case S_IFLNK: case S_IFLNK:
@ -1346,7 +1344,7 @@ xfs_itruncate_clear_reflink_flags(
dfork = XFS_IFORK_PTR(ip, XFS_DATA_FORK); dfork = XFS_IFORK_PTR(ip, XFS_DATA_FORK);
cfork = XFS_IFORK_PTR(ip, XFS_COW_FORK); cfork = XFS_IFORK_PTR(ip, XFS_COW_FORK);
if (dfork->if_bytes == 0 && cfork->if_bytes == 0) if (dfork->if_bytes == 0 && cfork->if_bytes == 0)
ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK;
if (cfork->if_bytes == 0) if (cfork->if_bytes == 0)
xfs_inode_clear_cowblocks_tag(ip); xfs_inode_clear_cowblocks_tag(ip);
} }
@ -2612,7 +2610,7 @@ xfs_ifree(
VFS_I(ip)->i_mode = 0; /* mark incore inode as free */ VFS_I(ip)->i_mode = 0; /* mark incore inode as free */
ip->i_diflags = 0; ip->i_diflags = 0;
ip->i_d.di_flags2 = ip->i_mount->m_ino_geo.new_diflags2; ip->i_diflags2 = ip->i_mount->m_ino_geo.new_diflags2;
ip->i_forkoff = 0; /* mark the attr fork not in use */ ip->i_forkoff = 0; /* mark the attr fork not in use */
ip->i_df.if_format = XFS_DINODE_FMT_EXTENTS; ip->i_df.if_format = XFS_DINODE_FMT_EXTENTS;
if (xfs_iflags_test(ip, XFS_IPRESERVE_DM_FIELDS)) if (xfs_iflags_test(ip, XFS_IPRESERVE_DM_FIELDS))

View file

@ -65,6 +65,7 @@ typedef struct xfs_inode {
}; };
uint8_t i_forkoff; /* attr fork offset >> 3 */ uint8_t i_forkoff; /* attr fork offset >> 3 */
uint16_t i_diflags; /* XFS_DIFLAG_... */ uint16_t i_diflags; /* XFS_DIFLAG_... */
uint64_t i_diflags2; /* XFS_DIFLAG2_... */
struct xfs_icdinode i_d; /* most of ondisk inode */ struct xfs_icdinode i_d; /* most of ondisk inode */
@ -193,7 +194,7 @@ xfs_get_initial_prid(struct xfs_inode *dp)
static inline bool xfs_is_reflink_inode(struct xfs_inode *ip) static inline bool xfs_is_reflink_inode(struct xfs_inode *ip)
{ {
return ip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK; return ip->i_diflags2 & XFS_DIFLAG2_REFLINK;
} }
static inline bool xfs_is_metadata_inode(struct xfs_inode *ip) static inline bool xfs_is_metadata_inode(struct xfs_inode *ip)
@ -215,7 +216,7 @@ static inline bool xfs_inode_has_cow_data(struct xfs_inode *ip)
static inline bool xfs_inode_has_bigtime(struct xfs_inode *ip) static inline bool xfs_inode_has_bigtime(struct xfs_inode *ip)
{ {
return ip->i_d.di_flags2 & XFS_DIFLAG2_BIGTIME; return ip->i_diflags2 & XFS_DIFLAG2_BIGTIME;
} }
/* /*

View file

@ -387,7 +387,7 @@ xfs_inode_to_log_dinode(
to->di_version = 3; to->di_version = 3;
to->di_changecount = inode_peek_iversion(inode); to->di_changecount = inode_peek_iversion(inode);
to->di_crtime = xfs_inode_to_log_dinode_ts(ip, from->di_crtime); to->di_crtime = xfs_inode_to_log_dinode_ts(ip, from->di_crtime);
to->di_flags2 = from->di_flags2; to->di_flags2 = ip->i_diflags2;
to->di_cowextsize = ip->i_cowextsize; to->di_cowextsize = ip->i_cowextsize;
to->di_ino = ip->i_ino; to->di_ino = ip->i_ino;
to->di_lsn = lsn; to->di_lsn = lsn;

View file

@ -1123,7 +1123,7 @@ xfs_fill_fsxattr(
simple_fill_fsxattr(fa, xfs_ip2xflags(ip)); simple_fill_fsxattr(fa, xfs_ip2xflags(ip));
fa->fsx_extsize = XFS_FSB_TO_B(mp, ip->i_extsize); fa->fsx_extsize = XFS_FSB_TO_B(mp, ip->i_extsize);
if (ip->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE) if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE)
fa->fsx_cowextsize = XFS_FSB_TO_B(mp, ip->i_cowextsize); fa->fsx_cowextsize = XFS_FSB_TO_B(mp, ip->i_cowextsize);
fa->fsx_projid = ip->i_projid; fa->fsx_projid = ip->i_projid;
if (ifp && (ifp->if_flags & XFS_IFEXTENTS)) if (ifp && (ifp->if_flags & XFS_IFEXTENTS))
@ -1197,7 +1197,7 @@ xfs_flags2diflags2(
unsigned int xflags) unsigned int xflags)
{ {
uint64_t di_flags2 = uint64_t di_flags2 =
(ip->i_d.di_flags2 & (XFS_DIFLAG2_REFLINK | (ip->i_diflags2 & (XFS_DIFLAG2_REFLINK |
XFS_DIFLAG2_BIGTIME)); XFS_DIFLAG2_BIGTIME));
if (xflags & FS_XFLAG_DAX) if (xflags & FS_XFLAG_DAX)
@ -1215,7 +1215,7 @@ xfs_ioctl_setattr_xflags(
struct fsxattr *fa) struct fsxattr *fa)
{ {
struct xfs_mount *mp = ip->i_mount; struct xfs_mount *mp = ip->i_mount;
uint64_t di_flags2; uint64_t i_flags2;
/* Can't change realtime flag if any extents are allocated. */ /* Can't change realtime flag if any extents are allocated. */
if ((ip->i_df.if_nextents || ip->i_delayed_blks) && if ((ip->i_df.if_nextents || ip->i_delayed_blks) &&
@ -1231,19 +1231,19 @@ xfs_ioctl_setattr_xflags(
/* Clear reflink if we are actually able to set the rt flag. */ /* Clear reflink if we are actually able to set the rt flag. */
if ((fa->fsx_xflags & FS_XFLAG_REALTIME) && xfs_is_reflink_inode(ip)) if ((fa->fsx_xflags & FS_XFLAG_REALTIME) && xfs_is_reflink_inode(ip))
ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK;
/* Don't allow us to set DAX mode for a reflinked file for now. */ /* Don't allow us to set DAX mode for a reflinked file for now. */
if ((fa->fsx_xflags & FS_XFLAG_DAX) && xfs_is_reflink_inode(ip)) if ((fa->fsx_xflags & FS_XFLAG_DAX) && xfs_is_reflink_inode(ip))
return -EINVAL; return -EINVAL;
/* diflags2 only valid for v3 inodes. */ /* diflags2 only valid for v3 inodes. */
di_flags2 = xfs_flags2diflags2(ip, fa->fsx_xflags); i_flags2 = xfs_flags2diflags2(ip, fa->fsx_xflags);
if (di_flags2 && !xfs_sb_version_has_v3inode(&mp->m_sb)) if (i_flags2 && !xfs_sb_version_has_v3inode(&mp->m_sb))
return -EINVAL; return -EINVAL;
ip->i_diflags = xfs_flags2diflags(ip, fa->fsx_xflags); ip->i_diflags = xfs_flags2diflags(ip, fa->fsx_xflags);
ip->i_d.di_flags2 = di_flags2; ip->i_diflags2 = i_flags2;
xfs_diflags_to_iflags(ip, false); xfs_diflags_to_iflags(ip, false);
xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG);
@ -1268,9 +1268,9 @@ xfs_ioctl_setattr_prepare_dax(
return; return;
if (((fa->fsx_xflags & FS_XFLAG_DAX) && if (((fa->fsx_xflags & FS_XFLAG_DAX) &&
!(ip->i_d.di_flags2 & XFS_DIFLAG2_DAX)) || !(ip->i_diflags2 & XFS_DIFLAG2_DAX)) ||
(!(fa->fsx_xflags & FS_XFLAG_DAX) && (!(fa->fsx_xflags & FS_XFLAG_DAX) &&
(ip->i_d.di_flags2 & XFS_DIFLAG2_DAX))) (ip->i_diflags2 & XFS_DIFLAG2_DAX)))
d_mark_dontcache(inode); d_mark_dontcache(inode);
} }
@ -1526,7 +1526,7 @@ xfs_ioctl_setattr(
ip->i_extsize = 0; ip->i_extsize = 0;
if (xfs_sb_version_has_v3inode(&mp->m_sb)) { if (xfs_sb_version_has_v3inode(&mp->m_sb)) {
if (ip->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE) if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE)
ip->i_cowextsize = XFS_B_TO_FSB(mp, fa->fsx_cowextsize); ip->i_cowextsize = XFS_B_TO_FSB(mp, fa->fsx_cowextsize);
else else
ip->i_cowextsize = 0; ip->i_cowextsize = 0;
@ -1575,7 +1575,7 @@ xfs_ioc_getxflags(
{ {
unsigned int flags; unsigned int flags;
flags = xfs_di2lxflags(ip->i_diflags, ip->i_d.di_flags2); flags = xfs_di2lxflags(ip->i_diflags, ip->i_diflags2);
if (copy_to_user(arg, &flags, sizeof(flags))) if (copy_to_user(arg, &flags, sizeof(flags)))
return -EFAULT; return -EFAULT;
return 0; return 0;

View file

@ -1286,7 +1286,7 @@ xfs_inode_should_enable_dax(
return false; return false;
if (ip->i_mount->m_flags & XFS_MOUNT_DAX_ALWAYS) if (ip->i_mount->m_flags & XFS_MOUNT_DAX_ALWAYS)
return true; return true;
if (ip->i_d.di_flags2 & XFS_DIFLAG2_DAX) if (ip->i_diflags2 & XFS_DIFLAG2_DAX)
return true; return true;
return false; return false;
} }

View file

@ -113,7 +113,7 @@ xfs_bulkstat_one_int(
if (xfs_sb_version_has_v3inode(&mp->m_sb)) { if (xfs_sb_version_has_v3inode(&mp->m_sb)) {
buf->bs_btime = dic->di_crtime.tv_sec; buf->bs_btime = dic->di_crtime.tv_sec;
buf->bs_btime_nsec = dic->di_crtime.tv_nsec; buf->bs_btime_nsec = dic->di_crtime.tv_nsec;
if (dic->di_flags2 & XFS_DIFLAG2_COWEXTSIZE) if (ip->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE)
buf->bs_cowextsize_blks = ip->i_cowextsize; buf->bs_cowextsize_blks = ip->i_cowextsize;
} }

View file

@ -874,7 +874,7 @@ xfs_reflink_set_inode_flag(
if (!xfs_is_reflink_inode(src)) { if (!xfs_is_reflink_inode(src)) {
trace_xfs_reflink_set_inode_flag(src); trace_xfs_reflink_set_inode_flag(src);
xfs_trans_ijoin(tp, src, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, src, XFS_ILOCK_EXCL);
src->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK; src->i_diflags2 |= XFS_DIFLAG2_REFLINK;
xfs_trans_log_inode(tp, src, XFS_ILOG_CORE); xfs_trans_log_inode(tp, src, XFS_ILOG_CORE);
xfs_ifork_init_cow(src); xfs_ifork_init_cow(src);
} else } else
@ -886,7 +886,7 @@ xfs_reflink_set_inode_flag(
if (!xfs_is_reflink_inode(dest)) { if (!xfs_is_reflink_inode(dest)) {
trace_xfs_reflink_set_inode_flag(dest); trace_xfs_reflink_set_inode_flag(dest);
xfs_trans_ijoin(tp, dest, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, dest, XFS_ILOCK_EXCL);
dest->i_d.di_flags2 |= XFS_DIFLAG2_REFLINK; dest->i_diflags2 |= XFS_DIFLAG2_REFLINK;
xfs_trans_log_inode(tp, dest, XFS_ILOG_CORE); xfs_trans_log_inode(tp, dest, XFS_ILOG_CORE);
xfs_ifork_init_cow(dest); xfs_ifork_init_cow(dest);
} else } else
@ -935,7 +935,7 @@ xfs_reflink_update_dest(
if (cowextsize) { if (cowextsize) {
dest->i_cowextsize = cowextsize; dest->i_cowextsize = cowextsize;
dest->i_d.di_flags2 |= XFS_DIFLAG2_COWEXTSIZE; dest->i_diflags2 |= XFS_DIFLAG2_COWEXTSIZE;
} }
xfs_trans_log_inode(tp, dest, XFS_ILOG_CORE); xfs_trans_log_inode(tp, dest, XFS_ILOG_CORE);
@ -1455,7 +1455,7 @@ xfs_reflink_clear_inode_flag(
/* Clear the inode flag. */ /* Clear the inode flag. */
trace_xfs_reflink_unset_inode_flag(ip); trace_xfs_reflink_unset_inode_flag(ip);
ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK; ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK;
xfs_inode_clear_cowblocks_tag(ip); xfs_inode_clear_cowblocks_tag(ip);
xfs_trans_log_inode(*tpp, ip, XFS_ILOG_CORE); xfs_trans_log_inode(*tpp, ip, XFS_ILOG_CORE);