From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Padmanabh Ratnakar <padmanabh.ratnakar@Emulex.Com>
Cc: Meghana Cheripady <meghana.cheripady@Emulex.Com>,
quintela@redhat.com, qemu-devel@nongnu.org, mrhines@us.ibm.com,
amit.shah@redhat.com
Subject: Re: [Qemu-devel] [PATCH] rdma: Fix cleanup in error paths
Date: Wed, 25 Mar 2015 10:39:37 +0000 [thread overview]
Message-ID: <20150325103937.GC2313@work-vm> (raw)
In-Reply-To: <4bc35b66-3d20-411a-a6d1-6f3263a13758@CMEXHTCAS2.ad.emulex.com>
> As part of commit e325b49a320b493cc5d69e263751ff716dc458fe,
> order in which resources are destroyed was changed for fixing
> a seg fault. Due to this change, CQ will never get destroyed as
> CQ should be destroyed after QP destruction. Seg fault is caused
> improper cleanup when connection fails. Fixing cleanup after
> connection failure and order in which resources are destroyed
> in qemu_rdma_cleanup() routine.
Do you have a test case that triggers the seg fault?
> Signed-off-by: Meghana Cheripady <meghana.cheripady@emulex.com>
> Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
> ---
> migration/rdma.c | 22 ++++++++--------------
> 1 files changed, 8 insertions(+), 14 deletions(-)
>
> diff --git a/migration/rdma.c b/migration/rdma.c
> index e6c3a67..77e3444 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -2194,6 +2194,10 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
> }
> }
>
> + if (rdma->qp) {
> + rdma_destroy_qp(rdma->cm_id);
> + rdma->qp = NULL;
> + }
OK, that makes sense, the manpage for rdma_destroy_qp says
'Users must destroy any QP associated with an rdma_cm_id before destroying the ID.'
so it's probably good to have this early.
> if (rdma->cq) {
> ibv_destroy_cq(rdma->cq);
> rdma->cq = NULL;
> @@ -2206,18 +2210,14 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
> ibv_dealloc_pd(rdma->pd);
> rdma->pd = NULL;
> }
> - if (rdma->listen_id) {
> - rdma_destroy_id(rdma->listen_id);
> - rdma->listen_id = NULL;
> - }
> if (rdma->cm_id) {
> - if (rdma->qp) {
> - rdma_destroy_qp(rdma->cm_id);
> - rdma->qp = NULL;
> - }
> rdma_destroy_id(rdma->cm_id);
> rdma->cm_id = NULL;
> }
> + if (rdma->listen_id) {
> + rdma_destroy_id(rdma->listen_id);
> + rdma->listen_id = NULL;
> + }
Can you explain this reorder - why is the order of listen_id and cm_id important?
is that a failure on the destination?
> if (rdma->channel) {
> rdma_destroy_event_channel(rdma->channel);
> rdma->channel = NULL;
> @@ -2309,8 +2309,6 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp)
> if (ret) {
> perror("rdma_connect");
> ERROR(errp, "connecting to destination!");
> - rdma_destroy_id(rdma->cm_id);
> - rdma->cm_id = NULL;
> goto err_rdma_source_connect;
> }
>
> @@ -2319,8 +2317,6 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp)
> perror("rdma_get_cm_event after rdma_connect");
> ERROR(errp, "connecting to destination!");
> rdma_ack_cm_event(cm_event);
> - rdma_destroy_id(rdma->cm_id);
> - rdma->cm_id = NULL;
> goto err_rdma_source_connect;
> }
>
> @@ -2328,8 +2324,6 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp)
> perror("rdma_get_cm_event != EVENT_ESTABLISHED after rdma_connect");
> ERROR(errp, "connecting to destination!");
> rdma_ack_cm_event(cm_event);
> - rdma_destroy_id(rdma->cm_id);
> - rdma->cm_id = NULL;
> goto err_rdma_source_connect;
> }
> rdma->connected = true;
> --
> 1.7.1
Dave
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2015-03-25 10:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-26 2:08 [Qemu-devel] [PATCH] rdma: Fix cleanup in error paths Padmanabh Ratnakar
2015-03-25 10:39 ` Dr. David Alan Gilbert [this message]
2015-03-25 13:50 ` Padmanabh Ratnakar
2015-03-25 11:20 ` Juan Quintela
2015-03-25 13:54 ` Padmanabh Ratnakar
2015-03-25 14:12 ` 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=20150325103937.GC2313@work-vm \
--to=dgilbert@redhat.com \
--cc=amit.shah@redhat.com \
--cc=meghana.cheripady@Emulex.Com \
--cc=mrhines@us.ibm.com \
--cc=padmanabh.ratnakar@Emulex.Com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.