mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-28 12:53:14 +01:00
9p: Add missing read barrier in virtio zero-copy path
Commit2b6e72ed74("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:2b6e72ed74("9P: Add memory barriers to protect request fields over cb/rpc threads handoff") Signed-off-by: Gui-Dong Han <[email protected]> Message-ID: <[email protected]> Signed-off-by: Dominique Martinet <[email protected]>
This commit is contained in:
1 parent
cc8b15a2c4
commit
aa88278693
1 file changed
+5
@@ -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))
|
||||
|
||||
Reference in new issue
Block a user