From fdaf7c88ff35d8d1e42a2ff4086a0ae3252d1a6f Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Mon, 11 May 2026 16:28:03 +0300 Subject: [PATCH] Fix RDMA send buffer wraparound - could only lead to slower sending but not to corruption because the bug was canceled by send_out_pos >= send_done_pos check --- src/client/msgr_rdma.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/client/msgr_rdma.cpp b/src/client/msgr_rdma.cpp index 62d5d4ee..812e1a56 100644 --- a/src/client/msgr_rdma.cpp +++ b/src/client/msgr_rdma.cpp @@ -612,7 +612,9 @@ void osd_messenger_t::try_send_rdma(osd_client_t *cl) while (!rc->send_out_full && copied > 0 && rc->cur_send < rc->max_send) { dst = (uint8_t*)rc->send_out.buf + rc->send_out_pos; - dst_len = (rc->send_out_pos < rc->send_out_size ? rc->send_out_size-rc->send_out_pos : rc->send_done_pos-rc->send_out_pos); + dst_len = (rc->send_out_pos >= rc->send_done_pos + ? rc->send_out_size-rc->send_out_pos + : rc->send_done_pos-rc->send_out_pos); if (dst_len > rc->max_msg) dst_len = rc->max_msg; copied = try_send_rdma_copy(cl, dst, dst_len); @@ -622,7 +624,7 @@ void osd_messenger_t::try_send_rdma(osd_client_t *cl) if (rc->send_out_pos == rc->send_out_size) rc->send_out_pos = 0; assert(rc->send_out_pos < rc->send_out_size); - if (rc->send_out_pos >= rc->send_done_pos) + if (rc->send_out_pos == rc->send_done_pos) rc->send_out_full = true; ibv_sge sge = { .addr = (uintptr_t)dst,