[LU-8351] ptlrpc_import_delay_req() refuses to delay blocking asts when import is not in LUSTRE_IMP_FULL yet Created: 29/Jun/16 Updated: 17/Dec/16 Resolved: 17/Dec/16 |
|
| Status: | Resolved |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | Lustre 2.10.0 |
| Type: | Bug | Priority: | Major |
| Reporter: | Artem Blagodarenko (Inactive) | Assignee: | Oleg Drokin |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | patch | ||
| Issue Links: |
|
||||
| Severity: | 3 | ||||
| Rank (Obsolete): | 9223372036854775807 | ||||
| Description |
|
ptlrpc_import_delay_req() refuses to delay blocking asts when import Solution: allow delays for blocking asts being resent. |
| Comments |
| Comment by Gerrit Updater [ 29/Jun/16 ] |
|
Artem Blagodarenko (artem.blagodarenko@seagate.com) uploaded a new patch: http://review.whamcloud.com/21065 |
| Comment by Vladimir Saveliev [ 08/Aug/16 ] |
I believe that all the above will remain as it is now. The only situation the patch is to address arises when a server handles reconnect from a client and when there is blocking ast for that client to be resend. The server enters target_handle_connect() and eventually rev_import_reconnect(), where the reverse import is set to LUSTRE_IMP_RECOVER, and then ptlrpc_import_recovery_state_machine() is called to do resends. if (imp->imp_state == LUSTRE_IMP_RECOVER) { struct ptlrpc_connection *conn = imp->imp_connection; rc = ptlrpc_resend(imp); if (rc) GOTO(out, rc); IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL); There is a import’s lock race window between ptlrpc_resend() and IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL). } else if (req->rq_send_state != imp->imp_state) { /* invalidate in progress - any requests should be drop */ if (atomic_read(&imp->imp_inval_count) != 0) { DEBUG_REQ(D_ERROR, req, "invalidate in flight"); *status = -EIO; } else if (imp->imp_dlm_fake || req->rq_no_delay) { *status = -EWOULDBLOCK; After that the request goes to interpret state and ldlm_handle_ast_error()->ldlm_failed_ast() evicts the client as req->rq_status is -EAGAIN.
The server is handling reconnect. The state of the reverse import is changed in rev_import_reconnect().
I do not know. The test is attached just to illustrate the problem. If you would like older servers testing to not fail you might want to just add the test to exception list. |
| Comment by Gerrit Updater [ 17/Dec/16 ] |
|
Oleg Drokin (oleg.drokin@intel.com) merged in patch https://review.whamcloud.com/21065/ |
| Comment by Peter Jones [ 17/Dec/16 ] |
|
Landed for 2.10 |