From: yehu Date: Wed, 26 Feb 2020 02:56:09 +0000 (+0800) Subject: msg/async/rdma: add return value check after qp created X-Git-Tag: wip-pdonnell-testing-20200918.022351~1712^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c67cc1d815b494fdf3afac797cc7410b98fe4f9a;p=ceph-ci.git msg/async/rdma: add return value check after qp created Signed-off-by: Chunsong Feng Signed-off-by: yehu --- diff --git a/src/msg/async/rdma/RDMAConnectedSocketImpl.cc b/src/msg/async/rdma/RDMAConnectedSocketImpl.cc index c897f94f4d5..721fcabbc64 100644 --- a/src/msg/async/rdma/RDMAConnectedSocketImpl.cc +++ b/src/msg/async/rdma/RDMAConnectedSocketImpl.cc @@ -58,6 +58,10 @@ RDMAConnectedSocketImpl::RDMAConnectedSocketImpl(CephContext *cct, shared_ptr_conf->ms_async_rdma_cm) { qp = ib->create_queue_pair(cct, dispatcher->get_tx_cq(), dispatcher->get_rx_cq(), IBV_QPT_RC, NULL); + if (!qp) { + lderr(cct) << __func__ << " queue pair create failed" << dendl; + return; + } local_qpn = qp->get_local_qp_number(); notify_fd = eventfd(0, EFD_CLOEXEC|EFD_NONBLOCK); dispatcher->register_qp(qp, this); diff --git a/src/msg/async/rdma/RDMAServerSocketImpl.cc b/src/msg/async/rdma/RDMAServerSocketImpl.cc index cc85832eddd..26449abfb6b 100644 --- a/src/msg/async/rdma/RDMAServerSocketImpl.cc +++ b/src/msg/async/rdma/RDMAServerSocketImpl.cc @@ -113,6 +113,13 @@ int RDMAServerSocketImpl::accept(ConnectedSocket *sock, const SocketOptions &opt RDMAConnectedSocketImpl* server; //Worker* w = dispatcher->get_stack()->get_worker(); server = new RDMAConnectedSocketImpl(cct, ib, dispatcher, dynamic_cast(w)); + if (!server->get_qp()) { + lderr(cct) << __func__ << " server->qp is null" << dendl; + // cann't use delete server here, destructor will fail. + server->cleanup(); + ::close(sd); + return -1; + } server->set_accept_fd(sd); ldout(cct, 20) << __func__ << " accepted a new QP, tcp_fd: " << sd << dendl; std::unique_ptr csi(server); diff --git a/src/msg/async/rdma/RDMAStack.h b/src/msg/async/rdma/RDMAStack.h index 45a043d2e23..5e80d9dcab1 100644 --- a/src/msg/async/rdma/RDMAStack.h +++ b/src/msg/async/rdma/RDMAStack.h @@ -221,6 +221,7 @@ class RDMAConnectedSocketImpl : public ConnectedSocketImpl { const char* get_qp_state() { return Infiniband::qp_state_string(qp->get_state()); } uint32_t get_peer_qpn () const { return peer_qpn; } uint32_t get_local_qpn () const { return local_qpn; } + Infiniband::QueuePair* get_qp () const { return qp; } ssize_t submit(bool more); int activate(); void fin();