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

Wanlong Gao gaowanlong at cn.fujitsu.com
Mon Jan 16 10:05:09 UTC 2012


On 01/16/2012 05:54 PM, Matthew Booth wrote:

> 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.


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





More information about the Libguestfs mailing list