X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_handler.c;h=bf0f7605801bd46812b29722794fe3d2c7a1be9c;hp=0b6b12f4397b05217115ae16b606cf44a9fa7ef2;hb=a32e3ca30a477407ed0e29bfaa99e68dc05266a1;hpb=242b61e4bd464cd517636c33f63ba707af69e945 diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 0b6b12f..bf0f760 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -3411,6 +3411,8 @@ static int mdt_intent_reint(enum mdt_it_code opcode, * checked here. */ if (lustre_handle_is_used(&lhc->mlh_reg_lh)) { + LASSERTF(rc == 0, "Error occurred but lock handle " + "is still in use\n"); rep->lock_policy_res2 = 0; rc = mdt_intent_lock_replace(info, lockp, NULL, lhc, flags); RETURN(rc); @@ -4979,7 +4981,6 @@ static int mdt_obd_connect(const struct lu_env *env, void *localdata) { struct mdt_thread_info *info; - struct lsd_client_data *lcd; struct obd_export *lexp; struct lustre_handle conn = { 0 }; struct mdt_device *mdt; @@ -5008,28 +5009,25 @@ static int mdt_obd_connect(const struct lu_env *env, rc = mdt_connect_internal(lexp, mdt, data); if (rc == 0) { - OBD_ALLOC_PTR(lcd); - if (lcd != NULL) { - struct mdt_thread_info *mti; - mti = lu_context_key_get(&env->le_ctx, - &mdt_thread_key); - LASSERT(mti != NULL); - mti->mti_exp = lexp; - memcpy(lcd->lcd_uuid, cluuid, sizeof lcd->lcd_uuid); - lexp->exp_target_data.ted_lcd = lcd; - rc = mdt_client_new(env, mdt); - if (rc == 0) - mdt_export_stats_init(obd, lexp, localdata); - } else { - rc = -ENOMEM; - } + struct mdt_thread_info *mti; + struct lsd_client_data *lcd = lexp->exp_target_data.ted_lcd; + LASSERT(lcd); + mti = lu_context_key_get(&env->le_ctx, &mdt_thread_key); + LASSERT(mti != NULL); + mti->mti_exp = lexp; + memcpy(lcd->lcd_uuid, cluuid, sizeof lcd->lcd_uuid); + rc = mdt_client_new(env, mdt); + if (rc == 0) + mdt_export_stats_init(obd, lexp, localdata); } out: - if (rc != 0) + if (rc != 0) { class_disconnect(lexp); - else + *exp = NULL; + } else { *exp = lexp; + } RETURN(rc); } @@ -5176,7 +5174,10 @@ static int mdt_init_export(struct obd_export *exp) cfs_spin_lock(&exp->exp_lock); exp->exp_connecting = 1; cfs_spin_unlock(&exp->exp_lock); - rc = ldlm_init_export(exp); + rc = lut_client_alloc(exp); + if (rc == 0) + rc = ldlm_init_export(exp); + if (rc) CERROR("Error %d while initializing export\n", rc); RETURN(rc); @@ -5194,13 +5195,13 @@ static int mdt_destroy_export(struct obd_export *exp) target_destroy_export(exp); ldlm_destroy_export(exp); + lut_client_free(exp); LASSERT(cfs_list_empty(&exp->exp_outstanding_replies)); LASSERT(cfs_list_empty(&exp->exp_mdt_data.med_open_head)); if (obd_uuid_equals(&exp->exp_client_uuid, &exp->exp_obd->obd_uuid)) RETURN(0); - lut_client_free(exp); RETURN(rc); }