diff --git a/src/client/msgr_rdma.cpp b/src/client/msgr_rdma.cpp index e60bca46..1a8831e3 100644 --- a/src/client/msgr_rdma.cpp +++ b/src/client/msgr_rdma.cpp @@ -574,7 +574,7 @@ static void try_send_rdma_wr(osd_client_t *cl, ibv_sge *sge, int op_sge) int osd_messenger_t::try_send_rdma_copy(osd_client_t *cl, uint8_t *dst, int dst_len) { int total_dst_len = dst_len; - while (dst_len > 0 && cl->write_ops.size()) + while (dst_len > 0 && (cl->write_op || cl->write_ops.size())) { if (!cl->write_op) { @@ -767,7 +767,6 @@ void osd_messenger_t::handle_rdma_events(msgr_rdma_context_t *rdma_context) } } } while (event_count > 0); - handle_immediate_ops(); } void osd_messenger_t::destroy_rdma_conn(msgr_rdma_connection_t *rdma_conn) diff --git a/src/client/msgr_receive.cpp b/src/client/msgr_receive.cpp index 17afee69..ca60b6a3 100644 --- a/src/client/msgr_receive.cpp +++ b/src/client/msgr_receive.cpp @@ -76,6 +76,7 @@ void osd_messenger_t::read_requests() } } read_ready_clients.clear(); + handle_immediate_ops(); } void osd_messenger_t::handle_read(int result, osd_client_t *cl) @@ -111,7 +112,8 @@ void osd_messenger_t::handle_read(int result, osd_client_t *cl) full_read = result >= cl->read_iov.iov_len; if (!handle_read_buffer(cl, cl->in_buf, result)) { - handle_immediate_ops(); + if (set_immediate_ops.size()) + ringloop->wakeup(); return; } } @@ -154,7 +156,8 @@ void osd_messenger_t::handle_read(int result, osd_client_t *cl) { read_ready_clients.push_back(cl->client_id); } - handle_immediate_ops(); + if (set_immediate_ops.size()) + ringloop->wakeup(); } void osd_messenger_t::handle_immediate_ops() diff --git a/src/client/msgr_send.cpp b/src/client/msgr_send.cpp index 623f2af4..1edb67e3 100644 --- a/src/client/msgr_send.cpp +++ b/src/client/msgr_send.cpp @@ -52,7 +52,7 @@ void osd_messenger_t::outbox_push(osd_op_t *cur_op) if (!ringloop) { // FIXME: It's worse because it doesn't allow batching - while (cl->write_ops.size()) + while (cl->write_op || cl->write_ops.size()) { try_send(cl); }