]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
resize2fs: use Direct I/O when reading the superblock for online resizes
authorTheodore Ts'o <tytso@mit.edu>
Thu, 15 Jun 2023 04:17:01 +0000 (00:17 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 15 Jun 2023 04:17:01 +0000 (00:17 -0400)
If the file system is mounted, the superblock can be changing while
resize2fs is trying to read the superblock, resulting in checksum
failures.  One way of avoiding this problem is read the superblock
using Direct I/O, since the kernel makes sure that what gets written
to disk is self-consistent.

Suggested-by: Krister Johansen <kjlx@templeofstupid.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
resize/main.c

index 94f5ec6d6ce46688d4b0f0c524d0a52404691fe6..f914c0507e9794b515281c3e2d8ac631dde7df14 100644 (file)
@@ -409,6 +409,8 @@ int main (int argc, char ** argv)
 
        if (!(mount_flags & EXT2_MF_MOUNTED) && !print_min_size)
                io_flags = EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE;
+       if (mount_flags & EXT2_MF_MOUNTED)
+               io_flags |= EXT2_FLAG_DIRECT_IO;
 
        io_flags |= EXT2_FLAG_64BITS | EXT2_FLAG_THREADS;
        if (undo_file) {