<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
hello,</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
is it still possible for this replacement patch( version 2 will be sent out soon) go to HCI 8 release? </div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
i'd prefer we keep a single code base. </div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Regards,</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Liu Kui</div>
<hr style="display: inline-block; width: 98%;">
<div id="divRplyFwdMsg" class="elementToProof">
<div class="elementToProof" style="direction: ltr; font-family: Calibri, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<b>From:</b> Konstantin Khorenko <khorenko@virtuozzo.com><br>
<b>Sent:</b> 15 September 2026 02:50<br>
<b>To:</b> Kui Liu <kui.liu@virtuozzo.com><br>
<b>Cc:</b> Alexey Kuznetsov <kuznet@virtuozzo.com>; Andrey Zaitsev <azaitsev@virtuozzo.com>; devel@openvz.org <devel@openvz.org><br>
<b>Subject:</b> Re: [PATCH VZ10] fs/fuse kio: fix RPC response drop for large messages sent over RDMA</div>
<div class="elementToProof" style="direction: ltr;"> </div>
</div>
<div class="elementToProof" style="font-size: 11pt;">Liu, also please let me know if this patch replacement (ok, replacement with some next fixed version you send soon)<br>
is a must for HCI 8 release or we can release the HCI 8 kernel as is and change the patch later in next releases.<br>
<br>
--<br>
Best regards,<br>
<br>
Konstantin Khorenko,<br>
Virtuozzo Linux Kernel Team<br>
<br>
On 9/14/26 12:40, Liu Kui wrote:<br>
> When a large message is sent via RDMA READ, it is completed with<br>
> rio_msg_sent() - which moves the request onto the RPC pending queue<br>
> where the response lookup can find it - only after both the<br>
> RDMA_READ_REQ TX completion and the peer's RDMA_READ_ACK have been<br>
> observed. However these two events are independent and not ordered:<br>
> the ACK, and even the response to the request, can arrive before the<br>
> local TX completion is polled. When that happens, the response finds<br>
> no matching request on the RPC pending queue and is dropped, stalling<br>
> the request until the RPC timeout logic kicks in.<br>
><br>
> Fix it by completing the message in rio_handle_rx_read_ack() as soon<br>
> as the RDMA_READ_ACK arrives. Messages in a single RX queue are<br>
> guaranteed to be delivered in order, so the ACK is always processed<br>
> before the response, and the request is therefore on the RPC pending<br>
> queue by the time its response arrives. This is also what the comment<br>
> in rio_submit() has promised all along.<br>
><br>
> The tx buffer is still recycled only after both events have been seen.<br>
> A TX send failure is handled by the connection abort logic as before.<br>
> The same applies to an error status carried in the RDMA_READ_ACK:<br>
> since the request msg has already been added to the rpc's pending<br>
> queue, the rio abort triggers an rpc abort, which completes the msg<br>
> with the same PCS_ERR_NET_ABORT error as before.<br>
><br>
> <a href="https://virtuozzo.atlassian.net/browse/VSTOR-141673" id="OWA0720ed24-e51d-8427-daf8-45f32021e523" class="OWAAutoLink" data-auth="NotApplicable">
https://virtuozzo.atlassian.net/browse/VSTOR-141673</a><br>
><br>
> Signed-off-by: Liu Kui <kui.liu@virtuozzo.com><br>
> ---<br>
> fs/fuse/kio/pcs/pcs_rdma_io.c | 9 +--------<br>
> 1 file changed, 1 insertion(+), 8 deletions(-)<br>
><br>
> diff --git a/fs/fuse/kio/pcs/pcs_rdma_io.c b/fs/fuse/kio/pcs/pcs_rdma_io.c<br>
> index 1c464e0e60f3..14beab8fda8c 100644<br>
> --- a/fs/fuse/kio/pcs/pcs_rdma_io.c<br>
> +++ b/fs/fuse/kio/pcs/pcs_rdma_io.c<br>
> @@ -797,7 +797,6 @@ static inline void rio_kick_write_queue(struct pcs_rdmaio *rio)<br>
> <br>
> static void rio_handle_tx(struct pcs_rdmaio *rio, struct rio_tx *tx, int ok)<br>
> {<br>
> - struct pcs_msg *msg = tx->msg;<br>
> u64 xid = tx->xid;<br>
> <br>
> /* override remote success if we already aborted */<br>
> @@ -825,13 +824,6 @@ static void rio_handle_tx(struct pcs_rdmaio *rio, struct rio_tx *tx, int ok)<br>
> default:<br>
> BUG();<br>
> }<br>
> -<br>
> - if (msg) {<br>
> - if (!ok)<br>
> - pcs_set_local_error(&msg->error, PCS_ERR_NET_ABORT);<br>
> -<br>
> - rio_msg_sent(rio, NULL, msg, 1);<br>
> - }<br>
> }<br>
> <br>
> /*<br>
> @@ -931,6 +923,7 @@ static int rio_handle_rx_read_ack(struct pcs_rdmaio *rio,<br>
> <br>
> list_for_each_entry(tx, &rio->active_txs, list)<br>
> if (tx->xid == rack->xid) {<br>
> + rio_msg_sent(rio, NULL, tx->msg, 1);<br>
> list_del(&tx->list);<br>
> rio_handle_tx(rio, tx, !rack->status);<br>
> return 0;<br>
<br>
</div>
</body>
</html>