diff options
| author | Gui-Dong Han <hanguidong02@gmail.com> | 2026-05-29 15:54:41 +0800 |
|---|---|---|
| committer | Dominique Martinet <asmadeus@codewreck.org> | 2026-06-21 05:22:57 +0000 |
| commit | aa88278693cbfaf7a2acf961379973fbb63b165c (patch) | |
| tree | 410f74d9355c679a014d366184c2008cb28d51de /net | |
| parent | cc8b15a2c435bd1caf19741ba85286846a115764 (diff) | |
| download | ath-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.c | 5 |
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)) |
