#define LDLM_CANCEL_REPLY_PORTAL 18
#define MDS_SETATTR_PORTAL 22
#define MDS_READPAGE_PORTAL 23
-#define MGC_REQUEST_PORTAL 24
#define MGC_REPLY_PORTAL 25
#define MGS_REQUEST_PORTAL 26
#define MGS_REPLY_PORTAL 27
#define MDS_MAXREQSIZE (5 * 1024)
#define MDS_MAXREPSIZE (9 * 1024)
-#define MGT_MAX_THREADS 32UL
-#define MGT_NUM_THREADS max(min_t(unsigned long, num_physpages / 8192, \
- MGT_MAX_THREADS), 2UL)
+#define MGS_MAX_THREADS 32UL
+#define MGS_NUM_THREADS max(min_t(unsigned long, num_physpages / 8192, \
+ MGS_MAX_THREADS), 2UL)
#define MGS_NBUFS (64 * smp_num_cpus)
#define MGS_BUFSIZE (8 * 1024)
rp_portal = MDC_REPLY_PORTAL;
connect_op = MDS_CONNECT;
} else if (!strcmp(name, LUSTRE_MGC_NAME)) {
- rq_portal = MGC_REQUEST_PORTAL;
+ rq_portal = MGS_REQUEST_PORTAL;
rp_portal = MGC_REPLY_PORTAL;
connect_op = MGMT_CONNECT;
} else {
LASSERT(imp->imp_obd == obd);
switch (event) {
- case IMP_EVENT_DISCON: {
- break;
- }
case IMP_EVENT_INVALIDATE: {
struct ldlm_namespace *ns = obd->obd_namespace;
break;
}
- case IMP_EVENT_INACTIVE: {
+ case IMP_EVENT_DISCON:
+ case IMP_EVENT_INACTIVE:
+ case IMP_EVENT_ACTIVE:
+ case IMP_EVENT_OCD:
break;
- }
- case IMP_EVENT_ACTIVE: {
- break;
- }
default:
- CERROR("Unknown import event %d\n", event);
+ CERROR("Unknown import event %#x\n", event);
LBUG();
}
RETURN(rc);
RETURN(rc);
}
+int mgs_handle(struct ptlrpc_request *req);
+
/* Start the MGS obd */
static int mgs_setup(struct obd_device *obd, obd_count len, void *buf)
{
CDEBUG(D_CONFIG, "Starting MGS\n");
+ /* Find our disk */
lmi = server_get_mount(obd->obd_name);
if (!lmi)
RETURN(rc = -EINVAL);
if (rc)
GOTO(err_fs, rc);
+ /* Internal mgs setup */
mgs_init_db_list(obd);
+ /* Start the service threads */
+ mgs->mgs_service =
+ ptlrpc_init_svc(MGS_NBUFS, MGS_BUFSIZE, MGS_MAXREQSIZE,
+ MGS_MAXREPSIZE, MGS_REQUEST_PORTAL,
+ MGC_REPLY_PORTAL, MGS_SERVICE_WATCHDOG_TIMEOUT,
+ mgs_handle, LUSTRE_MGS_NAME,
+ obd->obd_proc_entry, NULL, MGS_NUM_THREADS);
+
+ if (!mgs->mgs_service) {
+ CERROR("failed to start service\n");
+ GOTO(err_fs, rc = -ENOMEM);
+ }
+
+ rc = ptlrpc_start_threads(obd, mgs->mgs_service, "lustre_mgs");
+ if (rc)
+ GOTO(err_thread, rc);
+
+ /* Setup proc */
lprocfs_init_vars(mgs, &lvars);
lprocfs_obd_setup(obd, lvars.obd_vars);
- LCONSOLE_INFO("MGS %s started\n", obd->obd_name);
-
ldlm_timeout = 6;
ping_evictor_start();
+ LCONSOLE_INFO("MGS %s started\n", obd->obd_name);
+
RETURN(0);
+err_thread:
+ ptlrpc_unregister_service(mgs->mgs_service);
err_fs:
/* No extra cleanup needed for llog_init_commit_thread() */
mgs_fs_cleanup(obd);
int rc = 0;
ENTRY;
- CDEBUG(D_MGS, "precleanup %d\n", stage);
-
switch (stage) {
case OBD_CLEANUP_SELF_EXP:
mgs_cleanup_db_list(obd);
if (mgs->mgs_sb == NULL)
RETURN(0);
save_dev = lvfs_sbdev(mgs->mgs_sb);
+
+ lprocfs_obd_cleanup(obd);
-// lprocfs_obd_cleanup(obd);
-
- // mgs_update_server_data(obd, 1);
+ ptlrpc_unregister_service(mgs->mgs_service);
mgs_fs_cleanup(obd);
RETURN(0);
}
-static int mgt_setup(struct obd_device *obd, obd_count len, void *buf)
+static struct dentry *mgs_lvfs_fid2dentry(__u64 id, __u32 gen, __u64 gr,
+ void *data)
{
- struct mgs_obd *mgs = &obd->u.mgs;
- struct lprocfs_static_vars lvars;
- int rc = 0;
- ENTRY;
-
- lprocfs_init_vars(mgt, &lvars);
- lprocfs_obd_setup(obd, lvars.obd_vars);
-
- mgs->mgs_service =
- ptlrpc_init_svc(MGS_NBUFS, MGS_BUFSIZE, MGS_MAXREQSIZE,
- MGS_MAXREPSIZE, MGS_REQUEST_PORTAL,
- MGC_REPLY_PORTAL, MGS_SERVICE_WATCHDOG_TIMEOUT,
- mgs_handle, "mgs", obd->obd_proc_entry, NULL,
- MGT_NUM_THREADS);
-
- if (!mgs->mgs_service) {
- CERROR("failed to start service\n");
- GOTO(err_lprocfs, rc = -ENOMEM);
- }
-
- rc = ptlrpc_start_threads(obd, mgs->mgs_service, "ll_mgt");
- if (rc)
- GOTO(err_thread, rc);
-
- RETURN(0);
-
-err_thread:
- ptlrpc_unregister_service(mgs->mgs_service);
-err_lprocfs:
- lprocfs_obd_cleanup(obd);
- return rc;
-}
-
-
-static int mgt_cleanup(struct obd_device *obd)
-{
- struct mgs_obd *mgs = &obd->u.mgs;
- ENTRY;
-
- ptlrpc_unregister_service(mgs->mgs_service);
-
- lprocfs_obd_cleanup(obd);
-
- RETURN(0);
+ CERROR("Help!\n");
+ return NULL;
}
struct lvfs_callback_ops mgs_lvfs_ops = {
- // l_fid2dentry: mgs_lvfs_fid2dentry,
- // l_open_llog: mgs_lvfs_open_llog,
+ l_fid2dentry: mgs_lvfs_fid2dentry,
};
/* use obd ops to offer management infrastructure */
.o_iocontrol = mgs_iocontrol,
};
-static struct obd_ops mgt_obd_ops = {
- .o_owner = THIS_MODULE,
- .o_setup = mgt_setup,
- .o_cleanup = mgt_cleanup,
-};
-
static int __init mgs_init(void)
{
struct lprocfs_static_vars lvars;
lprocfs_init_vars(mgs, &lvars);
class_register_type(&mgs_obd_ops, lvars.module_vars, LUSTRE_MGS_NAME);
- lprocfs_init_vars(mgt, &lvars);
- class_register_type(&mgt_obd_ops, lvars.module_vars, LUSTRE_MGT_NAME);
return 0;
}
static void /*__exit*/ mgs_exit(void)
{
class_unregister_type(LUSTRE_MGS_NAME);
- class_unregister_type(LUSTRE_MGT_NAME);
}
MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>");
#include <linux/lustre_mgs.h>
-#define MGS_SERVICE_WATCHDOG_TIMEOUT (obd_timeout * 1000)
+/* MDS has o_t * 1000 */
+#define MGS_SERVICE_WATCHDOG_TIMEOUT (obd_timeout * 10)
extern struct lvfs_callback_ops mgs_lvfs_ops;
struct obd_device *obd;
/* if this was an MDT, and there are no more MDT's, clean up the MDS */
- if ((lsi->lsi_ldd->ldd_flags & LDD_F_SV_TYPE_MDT) &&
- (obd = class_name2obd("MDS"))) {
+ if (IS_MDT(lsi->lsi_ldd) && (obd = class_name2obd("MDS"))) {
//FIXME pre-rename, should eventually be LUSTRE_MDT_NAME
struct obd_type *type = class_search_type(LUSTRE_MDS_NAME);
if (!type || !type->typ_refcnt) {
}
/* if this was an OST, and there are no more OST's, clean up the OSS */
- if ((lsi->lsi_ldd->ldd_flags & LDD_F_SV_TYPE_OST) &&
- (obd = class_name2obd("OSS"))) {
+ if (IS_OST(lsi->lsi_ldd) && (obd = class_name2obd("OSS"))) {
struct obd_type *type = class_search_type(LUSTRE_OST_NAME);
if (!type || !type->typ_refcnt) {
/* nobody is using the OST type, clean the OSS */
/* Get a new index if needed */
if (lsi->lsi_ldd->ldd_flags & (LDD_F_NEED_INDEX | LDD_F_NEED_REGISTER)) {
- CERROR("Need new target index from MGS!\n");
+ CDEBUG(D_MOUNT, "Need new target index from MGS\n");
rc = server_initial_connect(sb, mnt);
if (rc) {
CERROR("Initial connect failed for %s: %d\n",
/* If they wanted the mgs to stop separately from the mdt, they
should have put it on a different device. */
- if (lsi->lsi_ldd->ldd_flags & LDD_F_SV_TYPE_MGMT)
+ if (IS_MGMT(lsi->lsi_ldd))
server_stop_mgs(sb);
/* clean the mgc and sb */
}
/* start MGS before MGC */
- if (lsi->lsi_ldd->ldd_flags & LDD_F_SV_TYPE_MGMT) {
+ if (IS_MGMT(lsi->lsi_ldd)) {
rc = server_start_mgs(sb);
if (rc) {
CERROR("ignoring Failed MGS start!!\n");
GOTO(out_mnt, rc);
/* Set up all obd devices for service */
- rc = server_start_targets(sb, mnt);
- if (rc < 0) {
- CERROR("Unable to start targets: %d\n", rc);
- GOTO(out_mnt, rc);
- }
-
+ if (IS_OST(lsi->lsi_ldd) || IS_MDT(lsi->lsi_ldd)) {
+ rc = server_start_targets(sb, mnt);
+ if (rc < 0) {
+ CERROR("Unable to start targets: %d\n", rc);
+ GOTO(out_mnt, rc);
+ }
/* FIXME overmount client here,
or can we just start a client log and client_fill_super on this sb?
We need to make sure server_put_super gets called too - ll_put_super
call s_p_s if so.
Probably should start client from new thread so we can return.
Client will not finish until all servers are connected. */
+ }
+
rc = server_fill_super_common(sb);
if (rc)
GOTO(out_mnt, rc);
if (avail <= low_water)
ptlrpc_grow_req_bufs(svc);
- lprocfs_counter_add(svc->srv_stats, PTLRPC_REQBUF_AVAIL_CNTR, avail);
+ if (svc->srv_stats)
+ lprocfs_counter_add(svc->srv_stats, PTLRPC_REQBUF_AVAIL_CNTR,
+ avail);
}
static int
printf("Lustre FS: %s\n", ldd->ldd_fsname);
printf("Mount type: %s\n", MT_STR(ldd));
printf("Flags: %s%s%s%s\n",
- ldd->ldd_flags & LDD_F_SV_TYPE_MDT ? "MDT ":"",
- ldd->ldd_flags & LDD_F_SV_TYPE_OST ? "OST ":"",
- ldd->ldd_flags & LDD_F_SV_TYPE_MGMT ? "MGT ":"",
+ IS_MDT(ldd) ? "MDT ":"", IS_OST(ldd) ? "OST ":"",
+ IS_MGMT(ldd) ? "MGMT ":"",
ldd->ldd_flags & LDD_F_NEED_INDEX ? "needs_index ":"");
printf("Persistent mount opts: %s\n", ldd->ldd_mount_opts);
printf("MGS nids: ");
{"help", 0, 0, 'h'},
{"mdt", 0, 0, 'M'},
{"mgmt", 0, 0, 'G'},
- {"mgmtnode", 1, 0, 'm'},
+ {"mgmtnid", 1, 0, 'm'},
{"mkfsoptions", 1, 0, 'k'},
{"mountfsoptions", 1, 0, 'o'},
{"ost", 0, 0, 'O'},
exit(1);
}
- if (IS_MDT(&mop.mo_ldd) && !IS_MGMT(&mop.mo_ldd)) {
+ if (IS_MDT(&mop.mo_ldd) && !IS_MGMT(&mop.mo_ldd) &&
+ mop.mo_ldd.ldd_mgsnid_count == 0) {
vprint("No management node specified, adding MGS to this MDT\n");
mop.mo_ldd.ldd_flags |= LDD_F_SV_TYPE_MGMT;
}