From 5368ba1a641597620a7e5df1a8e70e8a668a2a9d Mon Sep 17 00:00:00 2001 From: tappro Date: Mon, 19 Jun 2006 08:51:50 +0000 Subject: [PATCH] fix exit path from mdt_init0 in case of failure. --- lustre/mdt/mdt_handler.c | 60 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 02b345f..dd9d443 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -1449,6 +1449,25 @@ static int mdt_config(const struct lu_context *ctx, struct mdt_device *m, /* * Seq wrappers */ +static int mdt_seq_fini(const struct lu_context *ctx, + struct mdt_device *m) +{ + struct lu_site *ls = m->mdt_md_dev.md_lu_dev.ld_site; + ENTRY; + + if (ls->ls_server_seq) { + seq_server_fini(ls->ls_server_seq, ctx); + OBD_FREE_PTR(ls->ls_server_seq); + ls->ls_server_seq = NULL; + } + if (ls->ls_client_seq) { + seq_client_fini(ls->ls_client_seq); + OBD_FREE_PTR(ls->ls_client_seq); + ls->ls_client_seq = NULL; + } + RETURN(0); +} + static int mdt_seq_init(const struct lu_context *ctx, struct mdt_device *m) { @@ -1466,29 +1485,12 @@ static int mdt_seq_init(const struct lu_context *ctx, 0, ctx); } else rc = -ENOMEM; - + + if (rc) + mdt_seq_fini(ctx, m); RETURN(rc); } -static int mdt_seq_fini(const struct lu_context *ctx, - struct mdt_device *m) -{ - struct lu_site *ls = m->mdt_md_dev.md_lu_dev.ld_site; - ENTRY; - - if (ls->ls_server_seq) { - seq_server_fini(ls->ls_server_seq, ctx); - OBD_FREE_PTR(ls->ls_server_seq); - ls->ls_server_seq = NULL; - } - if (ls->ls_client_seq) { - seq_client_fini(ls->ls_client_seq); - OBD_FREE_PTR(ls->ls_client_seq); - ls->ls_client_seq = NULL; - } - RETURN(0); -} - /* XXX: this is ugly, should be something else */ static int mdt_controller_init(const struct lu_context *ctx, struct mdt_device *m, @@ -1855,33 +1857,32 @@ static int mdt_init0(struct mdt_device *m, CERROR("can't init device stack, rc %d\n", rc); GOTO(err_fini_ctx, rc); } + lu_context_exit(&ctx); + if (rc) + GOTO(err_fini_ctx, rc); /* set server index */ LASSERT(num); s->ls_node_id = simple_strtol(num, NULL, 10); - lu_context_exit(&ctx); - if (rc) - GOTO(err_fini_stack, rc); - lu_context_enter(&ctx); rc = mdt_fld_init(&ctx, m); lu_context_exit(&ctx); if (rc) - GOTO(err_fini_fld, rc); + GOTO(err_fini_stack, rc); lu_context_enter(&ctx); rc = mdt_seq_init(&ctx, m); lu_context_exit(&ctx); if (rc) - GOTO(err_fini_seq, rc); + GOTO(err_fini_fld, rc); lu_context_fini(&ctx); snprintf(ns_name, sizeof ns_name, LUSTRE_MDT0_NAME"-%p", m); m->mdt_namespace = ldlm_namespace_new(ns_name, LDLM_NAMESPACE_SERVER); if (m->mdt_namespace == NULL) - GOTO(err_fini_site, rc = -ENOMEM); + GOTO(err_fini_seq, rc = -ENOMEM); ldlm_register_intent(m->mdt_namespace, mdt_intent_policy); @@ -1901,11 +1902,10 @@ err_fini_seq: mdt_seq_fini(&ctx, m); err_fini_fld: mdt_fld_fini(&ctx, m); -err_fini_ctx: - lu_context_exit(&ctx); - lu_context_fini(&ctx); err_fini_stack: mdt_stack_fini(&ctx, m, md2lu_dev(m->mdt_child)); +err_fini_ctx: + lu_context_fini(&ctx); err_fini_site: lu_site_fini(s); OBD_FREE_PTR(s); -- 1.8.3.1