]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuAgentGetFSInfo: expose 'report_unsupported' argument
authorPeter Krempa <pkrempa@redhat.com>
Mon, 16 Mar 2020 07:37:13 +0000 (08:37 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 25 Mar 2020 12:13:18 +0000 (13:13 +0100)
Use qemuAgentCommandFull so that callers of qemuAgentGetFSInfo can
suppress error reports if the function is not supported by the guest
agent.

Since this patch removes the last use of
qemuAgentErrorCommandUnsupported the whole function is deleted as well.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_agent.c
src/qemu/qemu_agent.h
src/qemu/qemu_driver.c
tests/qemuagenttest.c

index 0d87d78ee5cbaafa061a46d9e4a2502273adfbbf..95a7d9b373dccfd74fa418765fd89d8296451cb2 100644 (file)
@@ -993,31 +993,6 @@ qemuAgentStringifyErrorClass(const char *klass)
         return "unknown QEMU command error";
 }
 
-/* Checks whether the agent reply msg is an error caused by an unsupported
- * command.
- *
- * Returns true when reply is CommandNotFound or CommandDisabled
- *         false otherwise
- */
-static bool
-qemuAgentErrorCommandUnsupported(virJSONValuePtr reply)
-{
-    const char *klass;
-    virJSONValuePtr error;
-
-    if (!reply)
-        return false;
-
-    error = virJSONValueObjectGet(reply, "error");
-
-    if (!error)
-        return false;
-
-    klass = virJSONValueObjectGetString(error, "class");
-    return STREQ_NULLABLE(klass, "CommandNotFound") ||
-        STREQ_NULLABLE(klass, "CommandDisabled");
-}
-
 /* Ignoring OOM in this method, since we're already reporting
  * a more important error
  *
@@ -1959,12 +1934,14 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
 }
 
 /* Returns: number of entries in '@info' on success
- *          -2 when agent command is not supported by the agent
- *          -1 otherwise
+ *          -2 when agent command is not supported by the agent and
+ *             'report_unsupported' is false (libvirt error is not reported)
+ *          -1 otherwise (libvirt error is reported)
  */
 int
 qemuAgentGetFSInfo(qemuAgentPtr agent,
-                   qemuAgentFSInfoPtr **info)
+                   qemuAgentFSInfoPtr **info,
+                   bool report_unsupported)
 {
     size_t i;
     int ret = -1;
@@ -1973,16 +1950,15 @@ qemuAgentGetFSInfo(qemuAgentPtr agent,
     virJSONValuePtr data;
     size_t ndata = 0;
     qemuAgentFSInfoPtr *info_ret = NULL;
+    int rc;
 
     cmd = qemuAgentMakeCommand("guest-get-fsinfo", NULL);
     if (!cmd)
         return ret;
 
-    if (qemuAgentCommand(agent, cmd, &reply, agent->timeout) < 0) {
-        if (qemuAgentErrorCommandUnsupported(reply))
-            ret = -2;
-        goto cleanup;
-    }
+    if ((rc = qemuAgentCommandFull(agent, cmd, &reply, agent->timeout,
+                                   report_unsupported)) < 0)
+        return rc;
 
     if (!(data = virJSONValueObjectGet(reply, "return"))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
index 361a67aaee90acbe8a1d89084e1c0a63b3c93a6f..2eeb376a689f4ae3eaa6222e8d1283e8066560b2 100644 (file)
@@ -98,7 +98,9 @@ int qemuAgentShutdown(qemuAgentPtr mon,
 int qemuAgentFSFreeze(qemuAgentPtr mon,
                       const char **mountpoints, unsigned int nmountpoints);
 int qemuAgentFSThaw(qemuAgentPtr mon);
-int qemuAgentGetFSInfo(qemuAgentPtr mon, qemuAgentFSInfoPtr **info);
+int qemuAgentGetFSInfo(qemuAgentPtr mon,
+                       qemuAgentFSInfoPtr **info,
+                       bool report_unsupported);
 
 int qemuAgentSuspend(qemuAgentPtr mon,
                      unsigned int target);
index d2fb8d124b6559e5378b5645a67651f388fc1309..97c71f913e222a9118cc590e742bebb42db455b1 100644 (file)
@@ -21883,7 +21883,7 @@ qemuDomainGetFSInfoAgent(virQEMUDriverPtr driver,
         goto endjob;
 
     agent = qemuDomainObjEnterAgent(vm);
-    ret = qemuAgentGetFSInfo(agent, info);
+    ret = qemuAgentGetFSInfo(agent, info, true);
     qemuDomainObjExitAgent(vm, agent);
 
  endjob:
@@ -23041,7 +23041,7 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
         goto exitagent;
 
     if (supportedTypes & VIR_DOMAIN_GUEST_INFO_FILESYSTEM) {
-        rc = qemuAgentGetFSInfo(agent, &agentfsinfo);
+        rc = qemuAgentGetFSInfo(agent, &agentfsinfo, true);
         if (rc < 0) {
             if (!(rc == -2 && types == 0))
                 goto exitagent;
index 7ea330892bb278929563c367417d8ebd85b5af72..42ef81ac9ae34552712479950856065dcea4283d 100644 (file)
@@ -254,7 +254,7 @@ testQemuAgentGetFSInfo(const void *data)
         goto cleanup;
 
     if ((ninfo = qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test),
-                                    &info)) < 0)
+                                    &info, true)) < 0)
         goto cleanup;
 
     if (ninfo != 3) {
@@ -326,7 +326,7 @@ testQemuAgentGetFSInfo(const void *data)
                                "}") < 0)
         goto cleanup;
 
-    if (qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test), &info) >= 0) {
+    if (qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test), &info, true) >= 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        "agent get-fsinfo command should have failed");
         goto cleanup;