On 01/16/2012 05:54 PM, Matthew Booth wrote:
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.
yes, you may miss the V2 patch which I have already fixed within it.
Thanks
-Wanlong Gao
> + 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