lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 25 Mar 2015 21:53:23 -0400 From: green@...uxhacker.ru To: Greg Kroah-Hartman <gregkh@...uxfoundation.org>, devel@...verdev.osuosl.org, Andreas Dilger <andreas.dilger@...el.com> Cc: Linux Kernel Mailing List <linux-kernel@...r.kernel.org>, Andriy Skulysh <Andriy_Skulysh@...atex.com>, Bob Glossman <bob.glossman@...el.com>, Oleg Drokin <oleg.drokin@...el.com> Subject: [PATCH 07/10] staging/lustre/ptlrpc: fix import state during replay From: Andriy Skulysh <Andriy_Skulysh@...atex.com> Client doesn't restore import state correctly on reconnect during replay. It resends lock replay when final ping was queued by server. Server fails with "target_queue_recovery_request()) ASSERTION( req->rq_export->exp_lock_replay_needed ) failed" Add imp_replay_state to store last replay state. imp_state is restored from imp_replay_state during reconnect. Signed-off-by: Andriy Skulysh <Andriy_Skulysh@...atex.com> Signed-off-by: Bob Glossman <bob.glossman@...el.com> Xyratex-bug-id: MRP-2022 Reviewed-on: http://review.whamcloud.com/12163 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5651 Reviewed-by: Jian Yu <jian.yu@...el.com> Reviewed-by: James Simmons <uja.ornl@...il.com> Signed-off-by: Oleg Drokin <oleg.drokin@...el.com> --- drivers/staging/lustre/lustre/include/lustre_import.h | 2 ++ drivers/staging/lustre/lustre/ptlrpc/import.c | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h index 51f3e98..dcc8076 100644 --- a/drivers/staging/lustre/lustre/include/lustre_import.h +++ b/drivers/staging/lustre/lustre/include/lustre_import.h @@ -218,6 +218,8 @@ struct obd_import { atomic_t imp_timeouts; /** Current import state */ enum lustre_imp_state imp_state; + /** Last replay state */ + enum lustre_imp_state imp_replay_state; /** History of import states */ struct import_state_hist imp_state_hist[IMP_STATE_HIST_LEN]; int imp_state_hist_idx; diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index 4ceb90d..d637c65 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -63,6 +63,19 @@ struct ptlrpc_connect_async_args { static void __import_set_state(struct obd_import *imp, enum lustre_imp_state state) { + switch (state) { + case LUSTRE_IMP_CLOSED: + case LUSTRE_IMP_NEW: + case LUSTRE_IMP_DISCON: + case LUSTRE_IMP_CONNECTING: + break; + case LUSTRE_IMP_REPLAY_WAIT: + imp->imp_replay_state = LUSTRE_IMP_REPLAY_LOCKS; + break; + default: + imp->imp_replay_state = LUSTRE_IMP_REPLAY; + } + imp->imp_state = state; imp->imp_state_hist[imp->imp_state_hist_idx].ish_state = state; imp->imp_state_hist[imp->imp_state_hist_idx].ish_time = @@ -966,7 +979,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, imp->imp_resend_replay = 1; spin_unlock(&imp->imp_lock); - IMPORT_SET_STATE(imp, LUSTRE_IMP_REPLAY); + IMPORT_SET_STATE(imp, imp->imp_replay_state); } else { IMPORT_SET_STATE(imp, LUSTRE_IMP_RECOVER); } -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists