]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
resize2fs: Do not fail if EXT4_IOC_RESIZE_FS ioctl doesn't exist
authorLukas Czerner <lczerner@redhat.com>
Sun, 16 Oct 2011 22:18:51 +0000 (18:18 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 16 Oct 2011 22:18:51 +0000 (18:18 -0400)
Commit 9f6ba888f027ba added support for new online resize ioctl
EXT4_IOC_RESIZE_FS. It is also trying to avoid failure when this
ioctl() is not supported by the kernel however it is checking wrong
error code (EINVAL).

When the ioctl does not exist, errno is set to ENOTTY, so we should
check for that, rather than EINVAL which means that ioctl arguments
are not valid. So change the code to check for ENOTTY and allow
resize2fs to try to use the old approach. Also add some comments.

Addresses-Red-Hat-Bugzilla: #746284
Addresses-Debian-Bug: #644989

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
resize/online.c

index 77290c28c648fe1621a110ea2ef1f941aff9667d..1a77839e4e3ca0aeadff50ee056738e515e03614 100644 (file)
@@ -72,7 +72,12 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
        }
 
        if (ioctl(fd, EXT4_IOC_RESIZE_FS, new_size)) {
-               if (errno != EINVAL) {
+               /*
+                * If kernel does not support EXT4_IOC_RESIZE_FS, use the
+                * old online resize. Note that the old approach does not
+                * handle >32 bit file systems
+                */
+               if (errno != ENOTTY) {
                        if (errno == EPERM)
                                com_err(program_name, 0,
                                _("Permission denied to resize filesystem"));