* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011 Whamcloud, Inc.
- *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
/*********** mount lookup *********/
-CFS_DECLARE_MUTEX(lustre_mount_info_lock);
+CFS_DEFINE_MUTEX(lustre_mount_info_lock);
static CFS_LIST_HEAD(server_mount_info_list);
static struct lustre_mount_info *server_find_mount(const char *name)
}
strcpy(name_cp, name);
- cfs_down(&lustre_mount_info_lock);
+ cfs_mutex_lock(&lustre_mount_info_lock);
if (server_find_mount(name)) {
- cfs_up(&lustre_mount_info_lock);
+ cfs_mutex_unlock(&lustre_mount_info_lock);
OBD_FREE(lmi, sizeof(*lmi));
OBD_FREE(name_cp, strlen(name) + 1);
CERROR("Already registered %s\n", name);
lmi->lmi_mnt = mnt;
cfs_list_add(&lmi->lmi_list_chain, &server_mount_info_list);
- cfs_up(&lustre_mount_info_lock);
+ cfs_mutex_unlock(&lustre_mount_info_lock);
CDEBUG(D_MOUNT, "reg_mnt %p from %s, vfscount=%d\n",
lmi->lmi_mnt, name, mnt_get_count(lmi->lmi_mnt));
struct lustre_mount_info *lmi;
ENTRY;
- cfs_down(&lustre_mount_info_lock);
+ cfs_mutex_lock(&lustre_mount_info_lock);
lmi = server_find_mount(name);
if (!lmi) {
- cfs_up(&lustre_mount_info_lock);
+ cfs_mutex_unlock(&lustre_mount_info_lock);
CERROR("%s not registered\n", name);
RETURN(-ENOENT);
}
OBD_FREE(lmi->lmi_name, strlen(lmi->lmi_name) + 1);
cfs_list_del(&lmi->lmi_list_chain);
OBD_FREE(lmi, sizeof(*lmi));
- cfs_up(&lustre_mount_info_lock);
+ cfs_mutex_unlock(&lustre_mount_info_lock);
RETURN(0);
}
struct lustre_sb_info *lsi;
ENTRY;
- cfs_down(&lustre_mount_info_lock);
+ cfs_mutex_lock(&lustre_mount_info_lock);
lmi = server_find_mount(name);
- cfs_up(&lustre_mount_info_lock);
+ cfs_mutex_unlock(&lustre_mount_info_lock);
if (!lmi) {
CERROR("Can't find mount for %s\n", name);
RETURN(NULL);
struct lustre_mount_info *lmi;
ENTRY;
- cfs_down(&lustre_mount_info_lock);
+ cfs_mutex_lock(&lustre_mount_info_lock);
lmi = server_find_mount(name);
- cfs_up(&lustre_mount_info_lock);
+ cfs_mutex_unlock(&lustre_mount_info_lock);
if (!lmi)
CERROR("Can't find mount for %s\n", name);
/* This might be the last one, can't deref after this */
unlock_mntput(mnt);
- cfs_down(&lustre_mount_info_lock);
+ cfs_mutex_lock(&lustre_mount_info_lock);
lmi = server_find_mount(name);
- cfs_up(&lustre_mount_info_lock);
+ cfs_mutex_unlock(&lustre_mount_info_lock);
if (!lmi) {
CERROR("Can't find mount for %s\n", name);
RETURN(-ENOENT);
RETURN(rc);
}
-CFS_DECLARE_MUTEX(mgc_start_lock);
+CFS_DEFINE_MUTEX(mgc_start_lock);
/** Set up a mgc obd to process startup logs
*
RETURN(-EINVAL);
}
- cfs_mutex_down(&mgc_start_lock);
+ cfs_mutex_lock(&mgc_start_lock);
len = strlen(LUSTRE_MGC_OBDNAME) + strlen(libcfs_nid2str(nid)) + 1;
OBD_ALLOC(mgcname, len);
to the same mgc.*/
lsi->lsi_mgc = obd;
out_free:
- cfs_mutex_up(&mgc_start_lock);
+ cfs_mutex_unlock(&mgc_start_lock);
if (data)
OBD_FREE_PTR(data);
RETURN(-ENOENT);
lsi->lsi_mgc = NULL;
- cfs_mutex_down(&mgc_start_lock);
+ cfs_mutex_lock(&mgc_start_lock);
LASSERT(cfs_atomic_read(&obd->u.cli.cl_mgc_refcount) > 0);
if (!cfs_atomic_dec_and_test(&obd->u.cli.cl_mgc_refcount)) {
/* This is not fatal, every client that stops
OBD_FREE(niduuid, len);
/* class_import_put will get rid of the additional connections */
- cfs_mutex_up(&mgc_start_lock);
+ cfs_mutex_unlock(&mgc_start_lock);
RETURN(rc);
}
RETURN(rc);
}
-CFS_DECLARE_MUTEX(server_start_lock);
+CFS_DEFINE_MUTEX(server_start_lock);
/* Stop MDS/OSS if nobody is using them */
static int server_stop_servers(int lddflags, int lsiflags)
int rc = 0;
ENTRY;
- cfs_mutex_down(&server_start_lock);
+ cfs_mutex_lock(&server_start_lock);
/* Either an MDT or an OST or neither */
/* if this was an MDT, and there are no more MDT's, clean up the MDS */
rc = err;
}
- cfs_mutex_up(&server_start_lock);
+ cfs_mutex_unlock(&server_start_lock);
RETURN(rc);
}
/* If we're an MDT, make sure the global MDS is running */
if (lsi->lsi_ldd->ldd_flags & LDD_F_SV_TYPE_MDT) {
/* make sure the MDS is started */
- cfs_mutex_down(&server_start_lock);
+ cfs_mutex_lock(&server_start_lock);
obd = class_name2obd(LUSTRE_MDS_OBDNAME);
if (!obd) {
rc = lustre_start_simple(LUSTRE_MDS_OBDNAME,
LUSTRE_MDS_OBDNAME"_uuid",
0, 0);
if (rc) {
- cfs_mutex_up(&server_start_lock);
+ cfs_mutex_unlock(&server_start_lock);
CERROR("failed to start MDS: %d\n", rc);
RETURN(rc);
}
}
- cfs_mutex_up(&server_start_lock);
+ cfs_mutex_unlock(&server_start_lock);
}
#endif
/* If we're an OST, make sure the global OSS is running */
if (IS_OST(lsi->lsi_ldd)) {
/* make sure OSS is started */
- cfs_mutex_down(&server_start_lock);
+ cfs_mutex_lock(&server_start_lock);
obd = class_name2obd(LUSTRE_OSS_OBDNAME);
if (!obd) {
rc = lustre_start_simple(LUSTRE_OSS_OBDNAME,
LUSTRE_OSS_OBDNAME"_uuid",
0, 0);
if (rc) {
- cfs_mutex_up(&server_start_lock);
+ cfs_mutex_unlock(&server_start_lock);
CERROR("failed to start OSS: %d\n", rc);
RETURN(rc);
}
}
- cfs_mutex_up(&server_start_lock);
+ cfs_mutex_unlock(&server_start_lock);
}
/* Set the mgc fs to our server disk. This allows the MGC to
should have put it on a different device. */
if (IS_MGS(lsi->lsi_ldd)) {
/* if MDS start with --nomgs, don't stop MGS then */
- if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS))
+ if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS)) {
+ char *logname;
+
+ OBD_ALLOC(logname, MGS_PARAM_MAXLEN);
+ if (!logname) {
+ LCONSOLE_WARN("Stopping mgs failed %d, please "
+ "try again.", -ENOMEM);
+ return;
+ }
+ strcpy(logname, lsi->lsi_ldd->ldd_fsname);
+ strcat(logname, "-params");
+ /* tell the mgc to drop parameter config log */
+ lustre_end_log(sb, logname, NULL);
+ OBD_FREE(logname, MGS_PARAM_MAXLEN);
+
server_stop_mgs(sb);
+ }
}
/* Clean the mgc and sb */
sb->s_blocksize = 4096;
sb->s_blocksize_bits = log2(sb->s_blocksize);
sb->s_magic = LUSTRE_SUPER_MAGIC;
- sb->s_maxbytes = 0; //PAGE_CACHE_MAXBYTES;
+ sb->s_maxbytes = 0; /* we don't allow file IO on server mountpoints */
sb->s_flags |= MS_RDONLY;
sb->s_op = &server_ops;
Client will not finish until all servers are connected.
Note - MGS-only server does NOT get a client, since there is no
lustre fs associated - the MGS is for all lustre fs's */
+ } else if (IS_MGS(lsi->lsi_ldd) &&
+ !(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS)){
+ struct config_llog_instance cfg;
+ char *logname;
+
+ OBD_ALLOC(logname, MGS_PARAM_MAXLEN);
+ if (logname == NULL)
+ GOTO(out_mnt, rc = -ENOMEM);
+ strcpy(logname, lsi->lsi_ldd->ldd_fsname);
+ strcat(logname, "-params");
+
+ memset(&cfg, 0, sizeof(cfg));
+ rc = lustre_process_log(sb, logname, &cfg);
+ OBD_FREE(logname, MGS_PARAM_MAXLEN);
+ if (rc) {
+ CERROR("failed to process parameters %s: %d\n",
+ logname, rc);
+ GOTO(out_mnt, rc);
+ }
}
rc = server_fill_super_common(sb);