diff mbox series

[29/52] migration/rdma: Plug a memory leak and improve a message

Message ID 20230918144206.560120-30-armbru@redhat.com
State New
Headers show
Series migration/rdma: Error handling fixes | expand

Commit Message

Markus Armbruster Sept. 18, 2023, 2:41 p.m. UTC
When migration capability @rdma-pin-all is true, but the server cannot
honor it, qemu_rdma_connect() calls macro ERROR(), then returns
success.

ERROR() sets an error.  Since qemu_rdma_connect() returns success, its
caller rdma_start_outgoing_migration() duly assumes @errp is still
clear.  The Error object leaks.

ERROR() additionally reports the situation to the user as an error:

    RDMA ERROR: Server cannot support pinning all memory. Will register memory dynamically.

Is this an error or not?  It actually isn't; we disable @rdma-pin-all
and carry on.  "Correcting" the user's configuration decisions that
way feels problematic, but that's a topic for another day.

Replace ERROR() by warn_report().  This plugs the memory leak, and
emits a clearer message to the user.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 migration/rdma.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Li Zhijian Sept. 25, 2023, 6:31 a.m. UTC | #1
On 18/09/2023 22:41, Markus Armbruster wrote:
> When migration capability @rdma-pin-all is true, but the server cannot
> honor it, qemu_rdma_connect() calls macro ERROR(), then returns
> success.
> 
> ERROR() sets an error.  Since qemu_rdma_connect() returns success, its
> caller rdma_start_outgoing_migration() duly assumes @errp is still
> clear.  The Error object leaks.
> 
> ERROR() additionally reports the situation to the user as an error:
> 
>      RDMA ERROR: Server cannot support pinning all memory. Will register memory dynamically.
> 
> Is this an error or not?  It actually isn't; we disable @rdma-pin-all
> and carry on.  "Correcting" the user's configuration decisions that
> way feels problematic, but that's a topic for another day.
> 
> Replace ERROR() by warn_report().  This plugs the memory leak, and
> emits a clearer message to the user.
> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>


Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>

> ---
>   migration/rdma.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/migration/rdma.c b/migration/rdma.c
> index 6c643a1b30..d52de857c5 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -2586,8 +2586,8 @@ static int qemu_rdma_connect(RDMAContext *rdma, bool return_path,
>        * and disable them otherwise.
>        */
>       if (rdma->pin_all && !(cap.flags & RDMA_CAPABILITY_PIN_ALL)) {
> -        ERROR(errp, "Server cannot support pinning all memory. "
> -                        "Will register memory dynamically.");
> +        warn_report("RDMA: Server cannot support pinning all memory. "
> +                    "Will register memory dynamically.");
>           rdma->pin_all = false;
>       }
>
diff mbox series

Patch

diff --git a/migration/rdma.c b/migration/rdma.c
index 6c643a1b30..d52de857c5 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -2586,8 +2586,8 @@  static int qemu_rdma_connect(RDMAContext *rdma, bool return_path,
      * and disable them otherwise.
      */
     if (rdma->pin_all && !(cap.flags & RDMA_CAPABILITY_PIN_ALL)) {
-        ERROR(errp, "Server cannot support pinning all memory. "
-                        "Will register memory dynamically.");
+        warn_report("RDMA: Server cannot support pinning all memory. "
+                    "Will register memory dynamically.");
         rdma->pin_all = false;
     }