aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
authorGui-Dong Han <hanguidong02@gmail.com>2026-05-29 15:54:41 +0800
committerDominique Martinet <asmadeus@codewreck.org>2026-06-21 05:22:57 +0000
commitaa88278693cbfaf7a2acf961379973fbb63b165c (patch)
tree410f74d9355c679a014d366184c2008cb28d51de /net
parentcc8b15a2c435bd1caf19741ba85286846a115764 (diff)
downloadath-aa88278693cbfaf7a2acf961379973fbb63b165c.tar.gz
9p: Add missing read barrier in virtio zero-copy path
Commit 2b6e72ed747f ("9P: Add memory barriers to protect request fields over cb/rpc threads handoff") added a read barrier after p9_client_rpc() waits for req->status, pairing with the write barrier in p9_client_cb(). The virtio zero-copy wait path was missed. Add the same read barrier after the zero-copy wait before reading the completed request. Fixes: 2b6e72ed747f ("9P: Add memory barriers to protect request fields over cb/rpc threads handoff") Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com> Message-ID: <20260529075441.233369-1-hanguidong02@gmail.com> Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
Diffstat (limited to 'net')
-rw-r--r--net/9p/trans_virtio.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
index 4cdab7094b273..b0d0094ec8e2c 100644
--- a/net/9p/trans_virtio.c
+++ b/net/9p/trans_virtio.c
@@ -532,6 +532,11 @@ req_retry_pinned:
p9_debug(P9_DEBUG_TRANS, "virtio request kicked\n");
err = io_wait_event_killable(req->wq,
READ_ONCE(req->status) >= REQ_STATUS_RCVD);
+ /*
+ * Make sure our req is coherent with regard to updates in other
+ * threads - echoes to wmb() in the callback
+ */
+ smp_rmb();
// RERROR needs reply (== error string) in static data
if (READ_ONCE(req->status) == REQ_STATUS_RCVD &&
unlikely(req->rc.sdata[4] == P9_RERROR))