mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
xfs: allow inodes to have the realtime and reflink flags
Now that we can share blocks between realtime files, allow this combination. Signed-off-by: "Darrick J. Wong" <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
5519251da0
commit
c3d3605f96
|
|
@ -748,7 +748,8 @@ xfs_dinode_verify(
|
|||
return __this_address;
|
||||
|
||||
/* don't let reflink and realtime mix */
|
||||
if ((flags2 & XFS_DIFLAG2_REFLINK) && (flags & XFS_DIFLAG_REALTIME))
|
||||
if ((flags2 & XFS_DIFLAG2_REFLINK) && (flags & XFS_DIFLAG_REALTIME) &&
|
||||
!xfs_has_rtreflink(mp))
|
||||
return __this_address;
|
||||
|
||||
/* COW extent size hint validation */
|
||||
|
|
|
|||
|
|
@ -360,8 +360,9 @@ xchk_inode_flags2(
|
|||
if ((flags2 & XFS_DIFLAG2_REFLINK) && !S_ISREG(mode))
|
||||
goto bad;
|
||||
|
||||
/* realtime and reflink make no sense, currently */
|
||||
if ((flags & XFS_DIFLAG_REALTIME) && (flags2 & XFS_DIFLAG2_REFLINK))
|
||||
/* realtime and reflink don't always go together */
|
||||
if ((flags & XFS_DIFLAG_REALTIME) && (flags2 & XFS_DIFLAG2_REFLINK) &&
|
||||
!xfs_has_rtreflink(mp))
|
||||
goto bad;
|
||||
|
||||
/* no bigtime iflag without the bigtime feature */
|
||||
|
|
|
|||
|
|
@ -564,8 +564,6 @@ xrep_dinode_flags(
|
|||
flags2 |= XFS_DIFLAG2_REFLINK;
|
||||
else
|
||||
flags2 &= ~(XFS_DIFLAG2_REFLINK | XFS_DIFLAG2_COWEXTSIZE);
|
||||
if (flags & XFS_DIFLAG_REALTIME)
|
||||
flags2 &= ~XFS_DIFLAG2_REFLINK;
|
||||
if (!xfs_has_bigtime(mp))
|
||||
flags2 &= ~XFS_DIFLAG2_BIGTIME;
|
||||
if (!xfs_has_large_extent_counts(mp))
|
||||
|
|
@ -1790,10 +1788,6 @@ xrep_inode_flags(
|
|||
/* DAX only applies to files and dirs. */
|
||||
if (!(S_ISREG(mode) || S_ISDIR(mode)))
|
||||
sc->ip->i_diflags2 &= ~XFS_DIFLAG2_DAX;
|
||||
|
||||
/* No reflink files on the realtime device. */
|
||||
if (sc->ip->i_diflags & XFS_DIFLAG_REALTIME)
|
||||
sc->ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -541,10 +541,6 @@ xfs_ioctl_setattr_xflags(
|
|||
if (mp->m_sb.sb_rblocks == 0 || mp->m_sb.sb_rextsize == 0 ||
|
||||
xfs_extlen_to_rtxmod(mp, ip->i_extsize))
|
||||
return -EINVAL;
|
||||
|
||||
/* Clear reflink if we are actually able to set the rt flag. */
|
||||
if (xfs_is_reflink_inode(ip))
|
||||
ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK;
|
||||
}
|
||||
|
||||
/* diflags2 only valid for v3 inodes. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user