Patchwork [05/10] qemu-ga: build_fs_mount_list(): take an Error argument

login
register
mail settings
Submitter Luiz Capitulino
Date Nov. 27, 2012, 1:01 p.m.
Message ID <1354021324-31561-6-git-send-email-lcapitulino@redhat.com>
Download mbox | patch
Permalink /patch/202228/
State New
Headers show

Comments

Luiz Capitulino - Nov. 27, 2012, 1:01 p.m.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 qga/commands-posix.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)
Michael Roth - Nov. 28, 2012, 7:34 p.m.
On Tue, Nov 27, 2012 at 11:01:59AM -0200, Luiz Capitulino wrote:
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
>  qga/commands-posix.c | 30 ++++++++++++++++--------------
>  1 file changed, 16 insertions(+), 14 deletions(-)
> 
> diff --git a/qga/commands-posix.c b/qga/commands-posix.c
> index b3a3f26..59bb32d 100644
> --- a/qga/commands-posix.c
> +++ b/qga/commands-posix.c
> @@ -371,7 +371,7 @@ static void free_fs_mount_list(FsMountList *mounts)
>  /*
>   * Walk the mount table and build a list of local file systems
>   */
> -static int build_fs_mount_list(FsMountList *mounts)
> +static void build_fs_mount_list(FsMountList *mounts, Error **err)
>  {
>      struct mntent *ment;
>      FsMount *mount;
> @@ -380,8 +380,8 @@ static int build_fs_mount_list(FsMountList *mounts)
> 
>      fp = setmntent(mtab, "r");
>      if (!fp) {
> -        g_warning("fsfreeze: unable to read mtab");
> -        return -1;
> +        error_setg_errno(err, errno, "failed to open mtab file: '%s'", mtab);
> +        return;

I don't see anything about errno getting set in the glibc documentation. Can
we confirm? Otherwise error_setg() is probably sufficient here.

<snip>

> 
> -- 
> 1.8.0
>

Patch

diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index b3a3f26..59bb32d 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -371,7 +371,7 @@  static void free_fs_mount_list(FsMountList *mounts)
 /*
  * Walk the mount table and build a list of local file systems
  */
-static int build_fs_mount_list(FsMountList *mounts)
+static void build_fs_mount_list(FsMountList *mounts, Error **err)
 {
     struct mntent *ment;
     FsMount *mount;
@@ -380,8 +380,8 @@  static int build_fs_mount_list(FsMountList *mounts)
 
     fp = setmntent(mtab, "r");
     if (!fp) {
-        g_warning("fsfreeze: unable to read mtab");
-        return -1;
+        error_setg_errno(err, errno, "failed to open mtab file: '%s'", mtab);
+        return;
     }
 
     while ((ment = getmntent(fp))) {
@@ -405,8 +405,6 @@  static int build_fs_mount_list(FsMountList *mounts)
     }
 
     endmntent(fp);
-
-    return 0;
 }
 #endif
 
@@ -433,15 +431,17 @@  int64_t qmp_guest_fsfreeze_freeze(Error **err)
     int ret = 0, i = 0;
     FsMountList mounts;
     struct FsMount *mount;
+    Error *local_err = NULL;
     int fd;
     char err_msg[512];
 
     slog("guest-fsfreeze called");
 
     QTAILQ_INIT(&mounts);
-    ret = build_fs_mount_list(&mounts);
-    if (ret < 0) {
-        return ret;
+    build_fs_mount_list(&mounts, &local_err);
+    if (error_is_set(&local_err)) {
+        error_propagate(err, local_err);
+        return -1;
     }
 
     /* cannot risk guest agent blocking itself on a write in this state */
@@ -498,12 +498,12 @@  int64_t qmp_guest_fsfreeze_thaw(Error **err)
     FsMountList mounts;
     FsMount *mount;
     int fd, i = 0, logged;
+    Error *local_err = NULL;
 
     QTAILQ_INIT(&mounts);
-    ret = build_fs_mount_list(&mounts);
-    if (ret) {
-        error_set(err, QERR_QGA_COMMAND_FAILED,
-                  "failed to enumerate filesystems");
+    build_fs_mount_list(&mounts, &local_err);
+    if (error_is_set(&local_err)) {
+        error_propagate(err, local_err);
         return 0;
     }
 
@@ -568,6 +568,7 @@  void qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **err)
     FsMountList mounts;
     struct FsMount *mount;
     int fd;
+    Error *local_err = NULL;
     char err_msg[512];
     struct fstrim_range r = {
         .start = 0,
@@ -578,8 +579,9 @@  void qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **err)
     slog("guest-fstrim called");
 
     QTAILQ_INIT(&mounts);
-    ret = build_fs_mount_list(&mounts);
-    if (ret < 0) {
+    build_fs_mount_list(&mounts, &local_err);
+    if (error_is_set(&local_err)) {
+        error_propagate(err, local_err);
         return;
     }