[Libguestfs] [PATCH 2/3] NEW API: add a new api e2fsck

Matthew Booth mbooth at redhat.com
Mon Jan 16 09:54:08 UTC 2012


On 01/13/2012 02:55 PM, Wanlong Gao wrote:
>
> From: Wanlong Gao<gaowanlong at 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 at 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




More information about the Libguestfs mailing list