]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libxfs: disallow filesystems with reverse mapping and reflink and realtime
authorDarrick J. Wong <darrick.wong@oracle.com>
Wed, 30 Sep 2020 16:45:13 +0000 (12:45 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 30 Sep 2020 16:45:13 +0000 (12:45 -0400)
Neither the kernel nor the code in xfsprogs support filesystems that
have (either reverse mapping btrees or reflink) enabled and a realtime
volume configured.  The kernel rejects such combinations and mkfs
refuses to format such a config, but xfsprogs doesn't check and can do
Bad Things, so port those checks before someone shreds their filesystem.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/init.c

index cb8967bc77d44f47e390e62f6f916f1fd2d5c4f5..330c645190d968c959e2454818a49d9ca3bebe26 100644 (file)
@@ -428,6 +428,21 @@ rtmount_init(
        sbp = &mp->m_sb;
        if (sbp->sb_rblocks == 0)
                return 0;
+
+       if (xfs_sb_version_hasreflink(sbp)) {
+               fprintf(stderr,
+       _("%s: Reflink not compatible with realtime device. Please try a newer xfsprogs.\n"),
+                               progname);
+               return -1;
+       }
+
+       if (xfs_sb_version_hasrmapbt(sbp)) {
+               fprintf(stderr,
+       _("%s: Reverse mapping btree not compatible with realtime device. Please try a newer xfsprogs.\n"),
+                               progname);
+               return -1;
+       }
+
        if (mp->m_rtdev_targp->dev == 0 && !(flags & LIBXFS_MOUNT_DEBUGGER)) {
                fprintf(stderr, _("%s: filesystem has a realtime subvolume\n"),
                        progname);