Whamcloud - gitweb
libext2fs: openfs() musn't allow bigalloc without EXT2_FLAGS_64BITS
authorDarrick J. Wong <darrick.wong@oracle.com>
Sat, 12 Oct 2013 01:20:54 +0000 (21:20 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 12 Oct 2013 01:36:00 +0000 (21:36 -0400)
Currently, only the new 64-bit bitmap implementation supports the
block<->cluster conversions that bigalloc requires.  Therefore, if we
have a bigalloc filesystem, require EXT2_FLAGS_64BITS be passed in to
ext2fs_open().  This does not mean that bigalloc file systems have to
be 64-bits; just that the userspace utilities have to be able to use
the new 64-bit capable library functions.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Lukas Czerner <lczerner@redhat.com>
lib/ext2fs/openfs.c

index 113b80e..9fe1645 100644 (file)
@@ -253,6 +253,18 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                retval = EXT2_ET_CORRUPT_SUPERBLOCK;
                goto cleanup;
        }
+
+       /*
+        * bigalloc requires cluster-aware bitfield operations, which at the
+        * moment means we need EXT2_FLAG_64BITS.
+        */
+       if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+                                      EXT4_FEATURE_RO_COMPAT_BIGALLOC) &&
+           !(flags & EXT2_FLAG_64BITS)) {
+               retval = EXT2_ET_CANT_USE_LEGACY_BITMAPS;
+               goto cleanup;
+       }
+
        if (!EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
                                        EXT4_FEATURE_RO_COMPAT_BIGALLOC) &&
            (fs->super->s_log_block_size != fs->super->s_log_cluster_size)) {