xfs: don't propagate RTINHERIT -> REALTIME when there is no rtdev
authorDarrick J. Wong <darrick.wong@oracle.com>
Sun, 13 Sep 2020 17:16:41 +0000 (10:16 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 16 Sep 2020 03:52:43 +0000 (20:52 -0700)
While running generic/042 with -drtinherit=1 set in MKFS_OPTIONS, I
observed that the kernel will gladly set the realtime flag on any file
created on the loopback filesystem even though that filesystem doesn't
actually have a realtime device attached.  This leads to verifier
failures and doesn't make any sense, so be smarter about this.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_inode.c

index 0eab647..6f66f88 100644 (file)
@@ -717,7 +717,8 @@ xfs_inode_inherit_flags(
                if (pip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
                        di_flags |= XFS_DIFLAG_PROJINHERIT;
        } else if (S_ISREG(mode)) {
-               if (pip->i_d.di_flags & XFS_DIFLAG_RTINHERIT)
+               if ((pip->i_d.di_flags & XFS_DIFLAG_RTINHERIT) &&
+                   xfs_sb_version_hasrealtime(&ip->i_mount->m_sb))
                        di_flags |= XFS_DIFLAG_REALTIME;
                if (pip->i_d.di_flags & XFS_DIFLAG_EXTSZINHERIT) {
                        di_flags |= XFS_DIFLAG_EXTSIZE;