diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-03-09 16:53:02 +0000 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-03-09 18:05:31 +0000 |
commit | 2fb545b840745f6d944d89872f1d7372821b30cc (patch) | |
tree | 1c40d7dd5d7e5976234c4c844ae010ecfd38a523 /daemon/ext2.c | |
parent | 4c9218658e4d4b769acaa41d999b4bce437fbc37 (diff) | |
download | libguestfs-2fb545b840745f6d944d89872f1d7372821b30cc.tar.gz libguestfs-2fb545b840745f6d944d89872f1d7372821b30cc.tar.xz libguestfs-2fb545b840745f6d944d89872f1d7372821b30cc.zip |
resize2fs: Run 'e2fsck -f' automatically if filesystem is not mounted.
Diffstat (limited to 'daemon/ext2.c')
-rw-r--r-- | daemon/ext2.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/daemon/ext2.c b/daemon/ext2.c index a427d7a1..09037fb1 100644 --- a/daemon/ext2.c +++ b/daemon/ext2.c @@ -187,6 +187,34 @@ do_get_e2uuid (const char *device) return do_vfs_uuid (device); } +/* If the filesystem is not mounted, run e2fsck -f on it unconditionally. */ +static int +if_not_mounted_run_e2fsck (const char *device) +{ + char *err; + int r, mounted; + char prog[] = "e2fsck"; + + if (e2prog (prog) == -1) + return -1; + + mounted = is_device_mounted (device); + if (mounted == -1) + return -1; + + if (!mounted) { + r = command (NULL, &err, prog, "-fy", device, NULL); + if (r == -1) { + reply_with_error ("%s", err); + free (err); + return -1; + } + free (err); + } + + return 0; +} + int do_resize2fs (const char *device) { @@ -197,6 +225,9 @@ do_resize2fs (const char *device) if (e2prog (prog) == -1) return -1; + if (if_not_mounted_run_e2fsck (device) == -1) + return -1; + r = command (NULL, &err, prog, device, NULL); if (r == -1) { reply_with_error ("%s", err); @@ -229,6 +260,9 @@ do_resize2fs_size (const char *device, int64_t size) } size /= 1024; + if (if_not_mounted_run_e2fsck (device) == -1) + return -1; + char buf[32]; snprintf (buf, sizeof buf, "%" PRIi64 "K", size); @@ -253,6 +287,9 @@ do_resize2fs_M (const char *device) if (e2prog (prog) == -1) return -1; + if (if_not_mounted_run_e2fsck (device) == -1) + return -1; + r = command (NULL, &err, prog, "-M", device, NULL); if (r == -1) { reply_with_error ("%s", err); |