X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmgc%2Fmgc_request.c;h=8f4c56857da0adb6814880f9f2ea624852287010;hb=59c1a8e7cd69c31bce09695681e2c9f889fed567;hp=7e31ff8cb0767a593de3d63393ed80033a73d6dd;hpb=1a1e988a066cdb4e30599722c7a7f6fdebdb9ccb;p=fs%2Flustre-release.git diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c index 7e31ff8..8f4c568 100644 --- a/lustre/mgc/mgc_request.c +++ b/lustre/mgc/mgc_request.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. */ /* @@ -221,6 +221,7 @@ struct config_llog_data *do_config_log_add(struct obd_device *obd, strcpy(cld->cld_logname, logname); if (cfg) cld->cld_cfg = *cfg; + cfs_mutex_init(&cld->cld_lock); cld->cld_cfg.cfg_last_idx = 0; cld->cld_cfg.cfg_flags = 0; cld->cld_cfg.cfg_sb = sb; @@ -325,7 +326,7 @@ static int config_log_end(char *logname, struct config_llog_instance *cfg) if (IS_ERR(cld)) RETURN(PTR_ERR(cld)); - cfs_down(&llog_process_lock); + cfs_mutex_lock(&cld->cld_lock); /* * if cld_stopping is set, it means we didn't start the log thus * not owning the start ref. this can happen after previous umount: @@ -334,14 +335,14 @@ static int config_log_end(char *logname, struct config_llog_instance *cfg) * calling start_log. */ if (unlikely(cld->cld_stopping)) { - cfs_up(&llog_process_lock); + cfs_mutex_unlock(&cld->cld_lock); /* drop the ref from the find */ config_log_put(cld); RETURN(rc); } cld->cld_stopping = 1; - cfs_up(&llog_process_lock); + cfs_mutex_unlock(&cld->cld_lock); cfs_spin_lock(&config_list_lock); cld_sptlrpc = cld->cld_sptlrpc; @@ -418,7 +419,7 @@ static int mgc_requeue_thread(void *data) /* Always wait a few seconds to allow the server who caused the lock revocation to finish its setup, plus some random so everyone doesn't try to reconnect at once. */ - lwi_now = LWI_TIMEOUT(3 * CFS_HZ + (ll_rand() & 0xff) * \ + lwi_now = LWI_TIMEOUT(3 * CFS_HZ + (cfs_rand() & 0xff) * \ (CFS_HZ / 100), NULL, NULL); l_wait_event(rq_waitq, rq_state & RQ_STOP, &lwi_now); @@ -570,8 +571,8 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb, obd->obd_lvfs_ctxt.fs = get_ds(); push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - dentry = lookup_one_len(MOUNT_CONFIGS_DIR, cfs_fs_pwd(current->fs), - strlen(MOUNT_CONFIGS_DIR)); + dentry = ll_lookup_one_len(MOUNT_CONFIGS_DIR, cfs_fs_pwd(current->fs), + strlen(MOUNT_CONFIGS_DIR)); pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); if (IS_ERR(dentry)) { err = PTR_ERR(dentry); @@ -1264,10 +1265,10 @@ int mgc_process_log(struct obd_device *mgc, sounds like badness. It actually might be fine, as long as we're not trying to update from the same log simultaneously (in which case we should use a per-log sem.) */ - cfs_down(&llog_process_lock); + cfs_mutex_lock(&cld->cld_lock); if (cld->cld_stopping) { - cfs_up(&llog_process_lock); + cfs_mutex_unlock(&cld->cld_lock); RETURN(0); } @@ -1282,7 +1283,7 @@ int mgc_process_log(struct obd_device *mgc, ctxt = llog_get_context(mgc, LLOG_CONFIG_REPL_CTXT); if (!ctxt) { CERROR("missing llog context\n"); - cfs_up(&llog_process_lock); + cfs_mutex_unlock(&cld->cld_lock); RETURN(-EINVAL); } @@ -1369,7 +1370,7 @@ out_pop: CDEBUG(D_MGC, "%s: configuration from log '%s' %sed (%d).\n", mgc->obd_name, cld->cld_logname, rc ? "fail" : "succeed", rc); - cfs_up(&llog_process_lock); + cfs_mutex_unlock(&cld->cld_lock); RETURN(rc); }