[lustre-devel] [PATCH 393/622] lustre: fld: let's caller to retry FLD_QUERY
James Simmons
jsimmons at infradead.org
Thu Feb 27 13:14:21 PST 2020
From: Hongchao Zhang <hongchao at whamcloud.com>
In fld_client_rpc(), if the FLD_QUERY request between MDTs fails
with -EWOUDBLOCK because the connection is lost, return -EAGAIN
to notify the caller to retry.
WC-bug-id: https://jira.whamcloud.com/browse/LU-11761
Lustre-commit: e3f6111dfd1c ("LU-11761 fld: let's caller to retry FLD_QUERY")
Signed-off-by: Hongchao Zhang <hongchao at whamcloud.com>
Reviewed-on: https://review.whamcloud.com/34962
Reviewed-by: Andreas Dilger <adilger at whamcloud.com>
Reviewed-by: Lai Siyao <lai.siyao at whamcloud.com>
Reviewed-by: Oleg Drokin <green at whamcloud.com>
Signed-off-by: James Simmons <jsimmons at infradead.org>
---
fs/lustre/fld/fld_request.c | 23 ++++++++++++++---------
fs/lustre/include/obd_support.h | 1 +
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/fs/lustre/fld/fld_request.c b/fs/lustre/fld/fld_request.c
index 75cba18..52c148a 100644
--- a/fs/lustre/fld/fld_request.c
+++ b/fs/lustre/fld/fld_request.c
@@ -314,7 +314,6 @@ int fld_client_rpc(struct obd_export *exp,
LASSERT(exp);
-again:
imp = class_exp2cliimp(exp);
switch (fld_op) {
case FLD_QUERY:
@@ -363,17 +362,23 @@ int fld_client_rpc(struct obd_export *exp,
req->rq_reply_portal = MDC_REPLY_PORTAL;
ptlrpc_at_set_req_timeout(req);
- obd_get_request_slot(&exp->exp_obd->u.cli);
- rc = ptlrpc_queue_wait(req);
- obd_put_request_slot(&exp->exp_obd->u.cli);
+ if (OBD_FAIL_CHECK(OBD_FAIL_FLD_QUERY_REQ && req->rq_no_delay)) {
+ /* the same error returned by ptlrpc_import_delay_req */
+ rc = -EWOULDBLOCK;
+ req->rq_status = rc;
+ } else {
+ obd_get_request_slot(&exp->exp_obd->u.cli);
+ rc = ptlrpc_queue_wait(req);
+ obd_put_request_slot(&exp->exp_obd->u.cli);
+ }
+
if (rc != 0) {
if (imp->imp_state != LUSTRE_IMP_CLOSED && !imp->imp_deactive) {
- /* Since LWP is not replayable, so it will keep
- * trying unless umount happens, otherwise it would
- * cause unnecessary failure of the application.
+ /*
+ * Since LWP is not replayable, so notify the caller
+ * to retry if needed after a while.
*/
- ptlrpc_req_finished(req);
- goto again;
+ rc = -EAGAIN;
}
goto out_req;
}
diff --git a/fs/lustre/include/obd_support.h b/fs/lustre/include/obd_support.h
index 9609dd5..23f6bae 100644
--- a/fs/lustre/include/obd_support.h
+++ b/fs/lustre/include/obd_support.h
@@ -424,6 +424,7 @@
#define OBD_FAIL_FLD 0x1100
#define OBD_FAIL_FLD_QUERY_NET 0x1101
#define OBD_FAIL_FLD_READ_NET 0x1102
+#define OBD_FAIL_FLD_QUERY_REQ 0x1103
#define OBD_FAIL_SEC_CTX 0x1200
#define OBD_FAIL_SEC_CTX_INIT_NET 0x1201
--
1.8.3.1
More information about the lustre-devel
mailing list