From 14bc27bb1851dfddd561cf0d0096ba11bf1df209 Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 6 Dec 2005 01:15:17 +0000 Subject: [PATCH] Branch b1_4_mountconf b=8007 almost connecting... --- lustre/include/linux/lustre_idl.h | 1 - lustre/include/linux/lustre_net.h | 6 +-- lustre/ldlm/ldlm_lib.c | 2 +- lustre/mgc/mgc_request.c | 14 ++---- lustre/mgs/mgs_handler.c | 97 ++++++++++++++------------------------- lustre/mgs/mgs_internal.h | 3 +- lustre/obdclass/obd_mount.c | 26 +++++------ lustre/ptlrpc/service.c | 4 +- lustre/utils/mkfs_lustre.c | 10 ++-- 9 files changed, 66 insertions(+), 97 deletions(-) diff --git a/lustre/include/linux/lustre_idl.h b/lustre/include/linux/lustre_idl.h index e46d177..2c1cbb4 100644 --- a/lustre/include/linux/lustre_idl.h +++ b/lustre/include/linux/lustre_idl.h @@ -86,7 +86,6 @@ #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 diff --git a/lustre/include/linux/lustre_net.h b/lustre/include/linux/lustre_net.h index 420d6ed..56b2074 100644 --- a/lustre/include/linux/lustre_net.h +++ b/lustre/include/linux/lustre_net.h @@ -111,9 +111,9 @@ #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) diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c index a58eb3b..8851387 100644 --- a/lustre/ldlm/ldlm_lib.c +++ b/lustre/ldlm/ldlm_lib.c @@ -208,7 +208,7 @@ int client_obd_setup(struct obd_device *obddev, obd_count len, void *buf) 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 { diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c index 4afa46d..261889a 100644 --- a/lustre/mgc/mgc_request.c +++ b/lustre/mgc/mgc_request.c @@ -438,9 +438,6 @@ static int mgc_import_event(struct obd_device *obd, LASSERT(imp->imp_obd == obd); switch (event) { - case IMP_EVENT_DISCON: { - break; - } case IMP_EVENT_INVALIDATE: { struct ldlm_namespace *ns = obd->obd_namespace; @@ -448,14 +445,13 @@ static int mgc_import_event(struct obd_device *obd, 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); diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index 1bee8c8..6a88785 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -112,6 +112,8 @@ static int mgs_disconnect(struct obd_export *exp) 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) { @@ -126,6 +128,7 @@ 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); @@ -161,18 +164,39 @@ static int mgs_setup(struct obd_device *obd, obd_count len, void *buf) 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); @@ -192,8 +216,6 @@ static int mgs_precleanup(struct obd_device *obd, int stage) int rc = 0; ENTRY; - CDEBUG(D_MGS, "precleanup %d\n", stage); - switch (stage) { case OBD_CLEANUP_SELF_EXP: mgs_cleanup_db_list(obd); @@ -214,10 +236,10 @@ static int mgs_cleanup(struct obd_device *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); @@ -393,57 +415,15 @@ int mgs_handle(struct ptlrpc_request *req) 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 */ @@ -457,20 +437,12 @@ static struct obd_ops mgs_obd_ops = { .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; } @@ -478,7 +450,6 @@ static int __init mgs_init(void) static void /*__exit*/ mgs_exit(void) { class_unregister_type(LUSTRE_MGS_NAME); - class_unregister_type(LUSTRE_MGT_NAME); } MODULE_AUTHOR("Cluster File Systems, Inc. "); diff --git a/lustre/mgs/mgs_internal.h b/lustre/mgs/mgs_internal.h index 6bd6bec..a142fc4 100644 --- a/lustre/mgs/mgs_internal.h +++ b/lustre/mgs/mgs_internal.h @@ -7,7 +7,8 @@ #include -#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; diff --git a/lustre/obdclass/obd_mount.c b/lustre/obdclass/obd_mount.c index 3e758cc..5607ccb 100644 --- a/lustre/obdclass/obd_mount.c +++ b/lustre/obdclass/obd_mount.c @@ -680,8 +680,7 @@ static void server_stop_servers(struct super_block *sb) 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) { @@ -695,8 +694,7 @@ static void server_stop_servers(struct super_block *sb) } /* 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 */ @@ -838,7 +836,7 @@ static int server_start_targets(struct super_block *sb, struct vfsmount *mnt) /* 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", @@ -1044,7 +1042,7 @@ static void server_put_super(struct super_block *sb) /* 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 */ @@ -1140,7 +1138,7 @@ static int server_fill_super(struct super_block *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"); @@ -1155,12 +1153,12 @@ static int server_fill_super(struct super_block *sb) 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 @@ -1168,6 +1166,8 @@ static int server_fill_super(struct super_block *sb) 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); diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c index af61984..643c9f4 100644 --- a/lustre/ptlrpc/service.c +++ b/lustre/ptlrpc/service.c @@ -761,7 +761,9 @@ ptlrpc_check_rqbd_pool(struct ptlrpc_service *svc) 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 diff --git a/lustre/utils/mkfs_lustre.c b/lustre/utils/mkfs_lustre.c index 87dd039..0c9a0ec 100644 --- a/lustre/utils/mkfs_lustre.c +++ b/lustre/utils/mkfs_lustre.c @@ -476,9 +476,8 @@ void print_ldd(struct lustre_disk_data *ldd) 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: "); @@ -606,7 +605,7 @@ int main(int argc , char *const argv[]) {"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'}, @@ -762,7 +761,8 @@ int main(int argc , char *const argv[]) 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; } -- 1.8.3.1