]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: disable modification for CRC enabled filessytems.
authorDave Chinner <dchinner@redhat.com>
Fri, 7 Jun 2013 00:25:50 +0000 (10:25 +1000)
committerBen Myers <bpm@sgi.com>
Tue, 6 Aug 2013 20:19:00 +0000 (15:19 -0500)
xfs_db does not have the IO infrastructure to calculate metadata
CRCs after modifying metadata. Hence xfs_db can only run in
read-only mode on filesystems with version 5 superblocks.

To fix this, xfs_db needs to have it's IO engine converted to use
the buffer based IO provided by libxfs rather than rolling it's own
IO routines. That is future work, so until this conversion is done,
only allow xfs_db to run in read-only mode on v5 filesystems.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
db/init.c

index 0e9e1a2b7af09f488b60d43b41c8c1fd164aed25..1033f3a71d4e00b090a7d5b17567150e52f1a03c 100644 (file)
--- a/db/init.c
+++ b/db/init.c
@@ -132,6 +132,21 @@ init(
                        exit(EXIT_FAILURE);
        }
 
+       /*
+        * Don't allow modifications to CRC enabled filesystems until we support
+        * CRC recalculation in the IO path. Unless, of course, the user is in
+        * the process of hitting us with a big hammer.
+        */
+       if (XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_5 &&
+           !(x.isreadonly & LIBXFS_ISREADONLY)) {
+               fprintf(stderr, 
+       _("%s: modifications to %s are not supported in thi version.\n"
+       "Use \"-r\" to run %s in read-only mode on this filesystem .\n"),
+                       progname, fsdevice, progname);
+               if (!force)
+                       exit(EXIT_FAILURE);
+       }
+
        mp = libxfs_mount(&xmount, sbp, x.ddev, x.logdev, x.rtdev,
                                LIBXFS_MOUNT_ROOTINOS | LIBXFS_MOUNT_DEBUGGER);
        if (!mp) {