X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_mds.c;h=7c7d95e1bd790ab7ca9bd3dd5d2d299a48d36cc5;hb=2dc1bb8b7a53077fce8632aabe65b2ce8048a550;hp=76fc9741a70a8b541de359c911303343de769499;hpb=780a5724177ab87ed088a1da484fb99c3f75c7c6;p=fs%2Flustre-release.git diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c index 76fc974..7c7d95e 100644 --- a/lustre/mdt/mdt_mds.c +++ b/lustre/mdt/mdt_mds.c @@ -23,7 +23,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2012 Intel Corporation + * Copyright (c) 2013, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -49,20 +49,17 @@ /* lu2dt_dev() */ #include #include -#include #include "mdt_internal.h" -#ifdef HAVE_QUOTA_SUPPORT -# include -#endif +#include #include #include -#include struct mds_device { /* super-class */ struct md_device mds_md_dev; struct ptlrpc_service *mds_regular_service; struct ptlrpc_service *mds_readpage_service; + struct ptlrpc_service *mds_out_service; struct ptlrpc_service *mds_setattr_service; struct ptlrpc_service *mds_mdsc_service; struct ptlrpc_service *mds_mdss_service; @@ -142,11 +139,18 @@ DEF_MDT_HDL_VAR(0, MDS_SYNC, mdt_sync), DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_IS_SUBDIR, mdt_is_subdir), DEF_MDT_HDL(0, MDS_QUOTACHECK, mdt_quotacheck), DEF_MDT_HDL(0, MDS_QUOTACTL, mdt_quotactl), -DEF_MDT_HDL(0 | HABEO_REFERO, MDS_HSM_PROGRESS, mdt_hsm_progress), -DEF_MDT_HDL(0 | HABEO_REFERO, MDS_HSM_CT_REGISTER, +DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_PROGRESS, mdt_hsm_progress), +DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_CT_REGISTER, mdt_hsm_ct_register), -DEF_MDT_HDL(0 | HABEO_REFERO, MDS_HSM_CT_UNREGISTER, +DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_CT_UNREGISTER, mdt_hsm_ct_unregister), +DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_STATE_GET, + mdt_hsm_state_get), +DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_STATE_SET, + mdt_hsm_state_set), +DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_ACTION, mdt_hsm_action), +DEF_MDT_HDL(HABEO_CORPUS| HABEO_REFERO, MDS_HSM_REQUEST, mdt_hsm_request), +DEF_MDT_HDL(HABEO_CORPUS|HABEO_REFERO, MDS_SWAP_LAYOUTS, mdt_swap_layouts) }; #define DEF_OBD_HDL(flags, name, fn) \ @@ -264,44 +268,6 @@ static struct mdt_opc_slice mdt_readpage_handlers[] = { } }; -/* Sequence service handlers */ -#define DEF_SEQ_HDL(flags, name, fn) \ - DEFINE_RPC_HANDLER(SEQ_QUERY, flags, name, fn, &RQF_ ## name) - -static struct mdt_handler mdt_seq_ops[] = { -DEF_SEQ_HDL(0, SEQ_QUERY, (void *)seq_query), -}; - -struct mdt_opc_slice mdt_seq_handlers[] = { - { - .mos_opc_start = SEQ_QUERY, - .mos_opc_end = SEQ_LAST_OPC, - .mos_hs = mdt_seq_ops - }, - { - .mos_hs = NULL - } -}; - -/* FID Location Database handlers */ -#define DEF_FLD_HDL(flags, name, fn) \ - DEFINE_RPC_HANDLER(FLD_QUERY, flags, name, fn, &RQF_ ## name) - -static struct mdt_handler mdt_fld_ops[] = { -DEF_FLD_HDL(0, FLD_QUERY, (void *)fld_query), -}; - -struct mdt_opc_slice mdt_fld_handlers[] = { - { - .mos_opc_start = FLD_QUERY, - .mos_opc_end = FLD_LAST_OPC, - .mos_hs = mdt_fld_ops - }, - { - .mos_hs = NULL - } -}; - static int mds_regular_handle(struct ptlrpc_request *req) { return mdt_handle_common(req, mdt_regular_handlers); @@ -312,21 +278,6 @@ static int mds_readpage_handle(struct ptlrpc_request *req) return mdt_handle_common(req, mdt_readpage_handlers); } -static int mds_mdsc_handle(struct ptlrpc_request *req) -{ - return mdt_handle_common(req, mdt_seq_handlers); -} - -static int mds_mdss_handle(struct ptlrpc_request *req) -{ - return mdt_handle_common(req, mdt_seq_handlers); -} - -static int mds_fld_handle(struct ptlrpc_request *req) -{ - return mdt_handle_common(req, mdt_fld_handlers); -} - /* device init/fini methods */ static void mds_stop_ptlrpc_service(struct mds_device *m) { @@ -339,6 +290,10 @@ static void mds_stop_ptlrpc_service(struct mds_device *m) ptlrpc_unregister_service(m->mds_readpage_service); m->mds_readpage_service = NULL; } + if (m->mds_out_service != NULL) { + ptlrpc_unregister_service(m->mds_out_service); + m->mds_out_service = NULL; + } if (m->mds_setattr_service != NULL) { ptlrpc_unregister_service(m->mds_setattr_service); m->mds_setattr_service = NULL; @@ -374,9 +329,9 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .psc_watchdog_factor = MDT_SERVICE_WATCHDOG_FACTOR, .psc_buf = { .bc_nbufs = MDS_NBUFS, - .bc_buf_size = MDS_BUFSIZE, - .bc_req_max_size = MDS_MAXREQSIZE, - .bc_rep_max_size = MDS_MAXREPSIZE, + .bc_buf_size = MDS_REG_BUFSIZE, + .bc_req_max_size = MDS_REG_MAXREQSIZE, + .bc_rep_max_size = MDS_REG_MAXREPSIZE, .bc_req_portal = MDS_REQUEST_PORTAL, .bc_rep_portal = MDC_REPLY_PORTAL, }, @@ -470,7 +425,7 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .bc_nbufs = MDS_NBUFS, .bc_buf_size = MDS_BUFSIZE, .bc_req_max_size = MDS_MAXREQSIZE, - .bc_rep_max_size = MDS_MAXREPSIZE, + .bc_rep_max_size = MDS_LOV_MAXREPSIZE, .bc_req_portal = MDS_SETATTR_PORTAL, .bc_rep_portal = MDC_REPLY_PORTAL, }, @@ -502,6 +457,49 @@ static int mds_start_ptlrpc_service(struct mds_device *m) GOTO(err_mds_svc, rc); } + /* Object update service */ + conf = (typeof(conf)) { + .psc_name = LUSTRE_MDT_NAME "_out", + .psc_watchdog_factor = MDT_SERVICE_WATCHDOG_FACTOR, + .psc_buf = { + .bc_nbufs = MDS_NBUFS, + .bc_buf_size = OUT_BUFSIZE, + .bc_req_max_size = OUT_MAXREQSIZE, + .bc_rep_max_size = OUT_MAXREPSIZE, + .bc_req_portal = OUT_PORTAL, + .bc_rep_portal = MDC_REPLY_PORTAL, + }, + /* + * We'd like to have a mechanism to set this on a per-device + * basis, but alas... + */ + .psc_thr = { + .tc_thr_name = LUSTRE_MDT_NAME "_out", + .tc_thr_factor = MDS_THR_FACTOR, + .tc_nthrs_init = MDS_NTHRS_INIT, + .tc_nthrs_base = MDS_NTHRS_BASE, + .tc_nthrs_max = MDS_NTHRS_MAX, + .tc_nthrs_user = mds_num_threads, + .tc_cpu_affinity = 1, + .tc_ctx_tags = LCT_MD_THREAD, + }, + .psc_cpt = { + .cc_pattern = mds_num_cpts, + }, + .psc_ops = { + .so_req_handler = tgt_request_handle, + .so_req_printer = target_print_req, + .so_hpreq_handler = NULL, + }, + }; + m->mds_out_service = ptlrpc_register_service(&conf, procfs_entry); + if (IS_ERR(m->mds_out_service)) { + rc = PTR_ERR(m->mds_out_service); + CERROR("failed to start out service: %d\n", rc); + m->mds_out_service = NULL; + GOTO(err_mds_svc, rc); + } + /* * sequence controller service configuration */ @@ -511,7 +509,7 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .psc_watchdog_factor = MDT_SERVICE_WATCHDOG_FACTOR, .psc_buf = { .bc_nbufs = MDS_NBUFS, - .bc_buf_size = MDS_BUFSIZE, + .bc_buf_size = SEQ_BUFSIZE, .bc_req_max_size = SEQ_MAXREQSIZE, .bc_rep_max_size = SEQ_MAXREPSIZE, .bc_req_portal = SEQ_CONTROLLER_PORTAL, @@ -524,7 +522,7 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .tc_ctx_tags = LCT_MD_THREAD, }, .psc_ops = { - .so_req_handler = mds_mdsc_handle, + .so_req_handler = tgt_request_handle, .so_req_printer = target_print_req, .so_hpreq_handler = NULL, }, @@ -547,7 +545,7 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .psc_watchdog_factor = MDT_SERVICE_WATCHDOG_FACTOR, .psc_buf = { .bc_nbufs = MDS_NBUFS, - .bc_buf_size = MDS_BUFSIZE, + .bc_buf_size = SEQ_BUFSIZE, .bc_req_max_size = SEQ_MAXREQSIZE, .bc_rep_max_size = SEQ_MAXREPSIZE, .bc_req_portal = SEQ_METADATA_PORTAL, @@ -560,7 +558,7 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .tc_ctx_tags = LCT_MD_THREAD | LCT_DT_THREAD }, .psc_ops = { - .so_req_handler = mds_mdss_handle, + .so_req_handler = tgt_request_handle, .so_req_printer = target_print_req, .so_hpreq_handler = NULL, }, @@ -581,7 +579,7 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .psc_watchdog_factor = MDT_SERVICE_WATCHDOG_FACTOR, .psc_buf = { .bc_nbufs = MDS_NBUFS, - .bc_buf_size = MDS_BUFSIZE, + .bc_buf_size = FLD_BUFSIZE, .bc_req_max_size = FLD_MAXREQSIZE, .bc_rep_max_size = FLD_MAXREPSIZE, .bc_req_portal = FLD_REQUEST_PORTAL, @@ -591,10 +589,10 @@ static int mds_start_ptlrpc_service(struct mds_device *m) .tc_thr_name = LUSTRE_MDT_NAME "_fld", .tc_nthrs_init = MDS_OTHR_NTHRS_INIT, .tc_nthrs_max = MDS_OTHR_NTHRS_MAX, - .tc_ctx_tags = LCT_DT_THREAD | LCT_MD_THREAD + .tc_ctx_tags = LCT_DT_THREAD | LCT_MD_THREAD, }, .psc_ops = { - .so_req_handler = mds_fld_handle, + .so_req_handler = tgt_request_handle, .so_req_printer = target_print_req, .so_hpreq_handler = NULL, }, @@ -681,7 +679,6 @@ static struct lu_device *mds_device_alloc(const struct lu_env *env, l = ERR_PTR(rc); return l; } - return l; }