On 01/13/2012 02:55 PM, Wanlong Gao wrote:
From: Wanlong Gao<gaowanlong(a)cn.fujitsu.com>
Add a new api e2fsck with two options:
correct: same as '-p' option of e2fsck
forceall: same as '-y' option of e2fsck
Thanks for Rich's idea.
Signed-off-by: Wanlong Gao<gaowanlong(a)cn.fujitsu.com>
---
daemon/ext2.c | 42 ++++++++++++++++++++++++++++++++++++++++
generator/generator_actions.ml | 24 ++++++++++++++++++++++
src/MAX_PROC_NR | 2 +-
3 files changed, 67 insertions(+), 1 deletions(-)
diff --git a/daemon/ext2.c b/daemon/ext2.c
index c280ca2..b0dc6da 100644
--- a/daemon/ext2.c
+++ b/daemon/ext2.c
@@ -294,6 +294,48 @@ do_resize2fs_M (const char *device)
}
int
+do_e2fsck (const char *device,
+ int correct,
+ int forceall)
+{
+ const char *argv[MAX_ARGS];
+ char *err;
+ size_t i = 0;
+ int r;
+ char prog[] = "e2fsck";
+
+ if (e2prog (prog) == -1)
+ return -1;
+
+ if (correct&& forceall) {
^^^ As Rich noted, you need to test optargs_bitmask here.
+ reply_with_error("%s", "Only one of the options
may be specified");
+ return -1;
+ }
+
+ ADD_ARG (argv, i, prog);
+ ADD_ARG (argv, i, "-f");
+
+ if (correct)
+ ADD_ARG (argv, i, "-p");
+
+ if (forceall)
+ ADD_ARG (argv, i, "-y");
+
+ ADD_ARG (argv, i, device);
+ ADD_ARG (argv, i, NULL);
+
+ r = commandv (NULL,&err, argv);
+ if (r == -1 || r>= 2) {
+ reply_with_error ("%s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
do_e2fsck_f (const char *device)
{
char *err;
diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml
index fb82bb6..2e40c39 100644
--- a/generator/generator_actions.ml
+++ b/generator/generator_actions.ml
@@ -3454,6 +3454,8 @@ are activated or deactivated.");
["umount"; "/"];
["lvresize"; "/dev/VG/LV"; "20"];
["e2fsck_f"; "/dev/VG/LV"];
+ ["e2fsck"; "/dev/VG/LV"; "true";
"false"];
+ ["e2fsck"; "/dev/VG/LV"; "false";
"true"];
["resize2fs"; "/dev/VG/LV"];
["mount_options"; ""; "/dev/VG/LV";
"/"];
["cat"; "/new"]], "test content");
@@ -6597,6 +6599,28 @@ The usage of this device, for example C<filesystem> or
C<raid>.
=back");
+ ("e2fsck", (RErr, [Device "device"], [OBool "correct";
OBool "forceall"]), 304, [],
+ [], (* lvresize tests this *)
+ "check an ext2/ext3 filesystem",
+ "\
+This runs the ext2/ext3 filesystem checker on C<device>.
+Force to check the filesystem even if it appears to be clean.
Could we change the above text to:
This runs the ext2/ext3 filesystem checker on C<device>. It can take the
following optional arguments:
+
+=over 4
+
+=item C<correct>
+
+Automatically repair the file system. This option will cause e2fsck to automatically
+fix any filesystem problems that can be safely fixed without human intervention.
+This option may not be specified at the same time as the C<forceall> option.
+
+=item C<forceall>
+
+Assume an answer of 'yes' to all questions; allows e2fsck to be used
non-interactively.
+This option may not be specified at the same time as the C<correct> option.
+
+=back");
+
]
let all_functions = non_daemon_functions @ daemon_functions
diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR
index 8160622..873b744 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-303
+304
Matt
--
Matthew Booth, RHCA, RHCSS
Red Hat Engineering, Virtualisation Team
GPG ID: D33C3490
GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490