From: "Michael R. Hines" <mrhines@linux.vnet.ibm.com>
To: Isaku Yamahata <yamahata@private.email.ne.jp>
Cc: owasserm@redhat.com, quintela@redhat.com, mrhines@us.ibm.com,
qemu-devel@nongnu.org, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH] rdma: clean up of qemu_rdma_cleanup()
Date: Thu, 22 Aug 2013 10:27:19 -0400 [thread overview]
Message-ID: <52161FC7.5030806@linux.vnet.ibm.com> (raw)
In-Reply-To: <1f3a31a10f23b1dfafc4e178d6a4b0f07e384700.1376359935.git.yamahata@private.email.ne.jp>
On 08/12/2013 10:12 PM, Isaku Yamahata wrote:
> - It can't be determined by RDMAContext::cm_id != NULL if the connection
> is established or not.
> - RDMAContext::cm_id is leaked and not destroyed because it is set to NULL
> too early.
> - RDMAContext::qp is created by rdma_create_qp() so that it should be destroyed
> by rdma_destroy_qp(). not ibv_destroy_qp()
>
> Cc: Michael R. Hines <mrhines@us.ibm.com>
> Signed-off-by: Isaku Yamahata <yamahata@private.email.ne.jp>
> ---
> migration-rdma.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/migration-rdma.c b/migration-rdma.c
> index 3d1266f..e71c10a 100644
> --- a/migration-rdma.c
> +++ b/migration-rdma.c
> @@ -356,6 +356,7 @@ typedef struct RDMAContext {
> */
> struct rdma_cm_id *cm_id; /* connection manager ID */
> struct rdma_cm_id *listen_id;
> + bool connected;
>
> struct ibv_context *verbs;
> struct rdma_event_channel *channel;
> @@ -2192,7 +2193,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
> struct rdma_cm_event *cm_event;
> int ret, idx;
>
> - if (rdma->cm_id) {
> + if (rdma->cm_id && rdma->connected) {
> if (rdma->error_state) {
> RDMAControlHeader head = { .len = 0,
> .type = RDMA_CONTROL_ERROR,
> @@ -2211,7 +2212,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
> }
> }
> DDPRINTF("Disconnected.\n");
> - rdma->cm_id = NULL;
> + rdma->connected = false;
> }
>
> g_free(rdma->block);
> @@ -2233,7 +2234,7 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
> }
>
> if (rdma->qp) {
> - ibv_destroy_qp(rdma->qp);
> + rdma_destroy_qp(rdma->cm_id);
> rdma->qp = NULL;
> }
> if (rdma->cq) {
> @@ -2370,6 +2371,7 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp)
> rdma->cm_id = NULL;
> goto err_rdma_source_connect;
> }
> + rdma->connected = true;
>
> memcpy(&cap, cm_event->param.conn.private_data, sizeof(cap));
> network_to_caps(&cap);
> @@ -2904,6 +2906,7 @@ static int qemu_rdma_accept(RDMAContext *rdma)
> }
>
> rdma_ack_cm_event(cm_event);
> + rdma->connected = true;
>
> ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY);
> if (ret) {
I have applied this to my tree. Thanks.
- Michael
next prev parent reply other threads:[~2013-08-22 14:27 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-13 2:12 [Qemu-devel] [PATCH] rdma: clean up of qemu_rdma_cleanup() Isaku Yamahata
2013-08-22 14:27 ` Michael R. Hines [this message]
2013-09-18 13:02 ` Juan Quintela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52161FC7.5030806@linux.vnet.ibm.com \
--to=mrhines@linux.vnet.ibm.com \
--cc=mrhines@us.ibm.com \
--cc=owasserm@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=yamahata@private.email.ne.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).