From 4f8b46477121b6d18973f07ac085ba7b29b94925 Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 10 Aug 2006 11:23:44 +0000 Subject: [PATCH] - start seq mgr for data stack in separate portal; - changes about thread names in seq mgr. --- lustre/fid/fid_handler.c | 69 ++++++++++++++++++++++++++++++++++----------- lustre/fid/fid_store.c | 3 +- lustre/include/lustre_fid.h | 7 +++-- 3 files changed, 60 insertions(+), 19 deletions(-) diff --git a/lustre/fid/fid_handler.c b/lustre/fid/fid_handler.c index e8f91ad..843d053 100644 --- a/lustre/fid/fid_handler.c +++ b/lustre/fid/fid_handler.c @@ -455,6 +455,10 @@ static void seq_server_proc_fini(struct lu_server_seq *seq) } #endif +#define LUSTRE_MD_SEQ_NAME "md-seq" +#define LUSTRE_CT_SEQ_NAME "ct-seq" +#define LUSTRE_DT_SEQ_NAME "dt-seq" + int seq_server_init(struct lu_server_seq *seq, struct dt_device *dev, const char *uuid, @@ -463,20 +467,31 @@ int seq_server_init(struct lu_server_seq *seq, { int is_srv = type == LUSTRE_SEQ_SERVER; - int rc, portal = is_srv ? + int rc, req_portal = is_srv ? SEQ_SERVER_PORTAL : SEQ_CONTROLLER_PORTAL; - struct ptlrpc_service_conf seq_conf = { + struct ptlrpc_service_conf seq_md_conf = { .psc_nbufs = MDS_NBUFS, .psc_bufsize = MDS_BUFSIZE, .psc_max_req_size = SEQ_MAXREQSIZE, .psc_max_reply_size = SEQ_MAXREPSIZE, - .psc_req_portal = portal, + .psc_req_portal = req_portal, .psc_rep_portal = MDC_REPLY_PORTAL, .psc_watchdog_timeout = SEQ_SERVICE_WATCHDOG_TIMEOUT, .psc_num_threads = SEQ_NUM_THREADS, .psc_ctx_tags = LCT_MD_THREAD|LCT_DT_THREAD }; + struct ptlrpc_service_conf seq_dt_conf = { + .psc_nbufs = MDS_NBUFS, + .psc_bufsize = MDS_BUFSIZE, + .psc_max_req_size = SEQ_MAXREQSIZE, + .psc_max_reply_size = SEQ_MAXREPSIZE, + .psc_req_portal = SEQ_SERVER_PORTAL, + .psc_rep_portal = OSC_REPLY_PORTAL, + .psc_watchdog_timeout = SEQ_SERVICE_WATCHDOG_TIMEOUT, + .psc_num_threads = SEQ_NUM_THREADS, + .psc_ctx_tags = LCT_MD_THREAD|LCT_DT_THREAD + }; ENTRY; LASSERT(dev != NULL); @@ -520,19 +535,36 @@ int seq_server_init(struct lu_server_seq *seq, if (rc) GOTO(out, rc); - seq->lss_service = ptlrpc_init_svc_conf(&seq_conf, - seq_req_handle, - LUSTRE_SEQ_NAME, - seq->lss_proc_entry, - NULL); - if (seq->lss_service != NULL) - rc = ptlrpc_start_threads(NULL, seq->lss_service, - LUSTRE_SEQ_NAME); + seq->lss_md_service = ptlrpc_init_svc_conf(&seq_md_conf, + seq_req_handle, + LUSTRE_SEQ_NAME, + seq->lss_proc_entry, + NULL); + if (seq->lss_md_service != NULL) + rc = ptlrpc_start_threads(NULL, seq->lss_md_service, + is_srv ? LUSTRE_MD_SEQ_NAME : + LUSTRE_CT_SEQ_NAME); else - rc = -ENOMEM; + GOTO(out, rc = -ENOMEM); + /* + * we want to have really cluster-wide sequences space. This is why we + * start only one sequence controller which manages space. + */ + if (is_srv) { + seq->lss_dt_service = ptlrpc_init_svc_conf(&seq_dt_conf, + seq_req_handle, + LUSTRE_SEQ_NAME, + seq->lss_proc_entry, + NULL); + if (seq->lss_dt_service != NULL) + rc = ptlrpc_start_threads(NULL, seq->lss_dt_service, + LUSTRE_DT_SEQ_NAME); + else + GOTO(out, rc = -ENOMEM); + } + EXIT; - out: if (rc) { seq_server_fini(seq, ctx); @@ -549,9 +581,14 @@ void seq_server_fini(struct lu_server_seq *seq, { ENTRY; - if (seq->lss_service != NULL) { - ptlrpc_unregister_service(seq->lss_service); - seq->lss_service = NULL; + if (seq->lss_md_service != NULL) { + ptlrpc_unregister_service(seq->lss_md_service); + seq->lss_md_service = NULL; + } + + if (seq->lss_dt_service != NULL) { + ptlrpc_unregister_service(seq->lss_dt_service); + seq->lss_dt_service = NULL; } seq_server_proc_fini(seq); diff --git a/lustre/fid/fid_store.c b/lustre/fid/fid_store.c index 95361ed..3556738 100644 --- a/lustre/fid/fid_store.c +++ b/lustre/fid/fid_store.c @@ -138,7 +138,8 @@ int seq_store_init(struct lu_server_seq *seq, int rc; ENTRY; - LASSERT(seq->lss_service == NULL); + LASSERT(seq->lss_md_service == NULL); + LASSERT(seq->lss_dt_service == NULL); dt_obj = dt_store_open(ctx, dt, "seq", &fid); if (!IS_ERR(dt_obj)) { diff --git a/lustre/include/lustre_fid.h b/lustre/include/lustre_fid.h index 4a65066..829c0f3 100644 --- a/lustre/include/lustre_fid.h +++ b/lustre/include/lustre_fid.h @@ -106,8 +106,11 @@ struct lu_server_seq { /* LUSTRE_SEQ_SERVER or LUSTRE_SEQ_CONTROLLER */ enum lu_mgr_type lss_type; - /* server side seq service */ - struct ptlrpc_service *lss_service; + /* server side seq service for metadata stack */ + struct ptlrpc_service *lss_md_service; + + /* server side seq service for data stack */ + struct ptlrpc_service *lss_dt_service; /* client interafce to request controller */ struct lu_client_seq *lss_cli; -- 1.8.3.1