Details
-
Bug
-
Resolution: Fixed
-
Blocker
-
None
-
None
-
3
-
15943
Description
Although very liketly, but there is no guarantee that request_out_callback will happen before reply_in_callback, if a request got reply before got request_out_callback(), then ptlrpc_unregister_reply() will return false because request has not been unlinked and req:;rq_req_unlink is not set to false.
static inline int ptlrpc_client_recv_or_unlink(struct ptlrpc_request *req) { int rc; spin_lock(&req->rq_lock); ...... rc = req->rq_receiving_reply ; rc = rc || req->rq_req_unlink || req->rq_reply_unlink; spin_unlock(&req->rq_lock); return rc; }
After this, even request_in_callback() happened, there is no wakeup for this request, ptlrpcd or app thread will keep waiting.