diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 7eaf9e44cc333073e19bf0ab0f614473538170a4..28e142b9bf503e9f661aa24e83d4ee0cfbba7d7f 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -38,6 +38,10 @@ tbd Sun Microsystems, Inc. * Output of lfs quota has been made less detailed by default, old (verbose) output can be obtained by using -v option. +Severity : normal +Bugzilla : 16907 +Description: Prevent import from entering FULL state when server in recovery + Severity : major Bugzilla : 16750 Description: service mount cannot take device name with ":" diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c index 5d7252d781fad99980d7272947276cf722b47c26..bfb7b3cbb6132cbaffd50c00eb5c7f6c3f55af1e 100644 --- a/lustre/ptlrpc/import.c +++ b/lustre/ptlrpc/import.c @@ -676,7 +676,17 @@ static int ptlrpc_connect_interpret(struct ptlrpc_request *request, imp->imp_remote_handle = *lustre_msg_get_handle(request->rq_repmsg); - IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL); + /* Initial connects are allowed for clients with non-random + * uuids when servers are in recovery. Simply signal the + * servers replay is complete and wait in REPLAY_WAIT. */ + if (msg_flags & MSG_CONNECT_RECOVERING) { + CDEBUG(D_HA, "connect to %s during recovery\n", + obd2cli_tgt(imp->imp_obd)); + IMPORT_SET_STATE(imp, LUSTRE_IMP_REPLAY_LOCKS); + } else { + IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL); + } + spin_lock(&imp->imp_lock); if (imp->imp_invalid) { spin_unlock(&imp->imp_lock);