X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fost%2Fost_handler.c;h=d8fcccb88772b069419e8abf32b1e4b871ff0225;hp=df2710d4f80016624f952868e596de24be2223ff;hb=a6db2409b0282b0a0e44d5d4e6eeb154b5c62dff;hpb=6aa30ff835c36c385e68c7a1ebe3906ccae3d2a5 diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index df2710d..d8fcccb 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -52,6 +52,7 @@ #include #include #include "ost_internal.h" +#include static int oss_num_threads; CFS_MODULE_PARM(oss_num_threads, "i", int, 0444, @@ -1663,6 +1664,15 @@ int ost_msg_check_version(struct lustre_msg *msg) lustre_msg_get_version(msg), LUSTRE_OBD_VERSION); break; + case SEQ_QUERY: + /* Note: client always use MDS_VERSION for FID request */ + rc = lustre_msg_check_version(msg, LUSTRE_MDS_VERSION); + if (rc) + CERROR("bad opc %u version %08x, expecting %08x\n", + lustre_msg_get_opc(msg), + lustre_msg_get_version(msg), + LUSTRE_MDS_VERSION); + break; case OST_CREATE: case OST_DESTROY: case OST_GETATTR: @@ -2299,6 +2309,10 @@ int ost_handle(struct ptlrpc_request *req) req_capsule_set(&req->rq_pill, &RQF_OST_GET_INFO_GENERIC); rc = ost_get_info(req->rq_export, req); break; + case SEQ_QUERY: + CDEBUG(D_INODE, "seq\n"); + rc = seq_handle(req); + break; case OST_QUOTACHECK: CDEBUG(D_INODE, "quotacheck\n"); req_capsule_set(&req->rq_pill, &RQF_OST_QUOTACHECK); @@ -2605,10 +2619,53 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg) GOTO(out_create, rc); } + memset(&svc_conf, 0, sizeof(svc_conf)); + svc_conf = (typeof(svc_conf)) { + .psc_name = "ost_seq", + .psc_watchdog_factor = OSS_SERVICE_WATCHDOG_FACTOR, + .psc_buf = { + .bc_nbufs = OST_NBUFS, + .bc_buf_size = OST_BUFSIZE, + .bc_req_max_size = OST_MAXREQSIZE, + .bc_rep_max_size = OST_MAXREPSIZE, + .bc_req_portal = SEQ_DATA_PORTAL, + .bc_rep_portal = OSC_REPLY_PORTAL, + }, + .psc_thr = { + .tc_thr_name = "ll_ost_seq", + .tc_thr_factor = OSS_CR_THR_FACTOR, + .tc_nthrs_init = OSS_CR_NTHRS_INIT, + .tc_nthrs_base = OSS_CR_NTHRS_BASE, + .tc_nthrs_max = OSS_CR_NTHRS_MAX, + .tc_nthrs_user = oss_num_create_threads, + .tc_cpu_affinity = 1, + .tc_ctx_tags = LCT_DT_THREAD, + }, + + .psc_cpt = { + .cc_pattern = oss_cpts, + }, + .psc_ops = { + .so_req_handler = ost_handle, + .so_req_printer = target_print_req, + .so_hpreq_handler = NULL, + }, + }; + ost->ost_seq_service = ptlrpc_register_service(&svc_conf, + obd->obd_proc_entry); + if (IS_ERR(ost->ost_seq_service)) { + rc = PTR_ERR(ost->ost_seq_service); + CERROR("failed to start OST seq service: %d\n", rc); + ost->ost_seq_service = NULL; + GOTO(out_io, rc); + } + ping_evictor_start(); RETURN(0); - +out_io: + ptlrpc_unregister_service(ost->ost_io_service); + ost->ost_io_service = NULL; out_create: ptlrpc_unregister_service(ost->ost_create_service); ost->ost_create_service = NULL; @@ -2622,22 +2679,24 @@ out_lprocfs: static int ost_cleanup(struct obd_device *obd) { - struct ost_obd *ost = &obd->u.ost; - int err = 0; - ENTRY; + struct ost_obd *ost = &obd->u.ost; + int err = 0; + ENTRY; - ping_evictor_stop(); + ping_evictor_stop(); - /* there is no recovery for OST OBD, all recovery is controlled by - * obdfilter OBD */ - LASSERT(obd->obd_recovering == 0); + /* there is no recovery for OST OBD, all recovery is controlled by + * obdfilter OBD */ + LASSERT(obd->obd_recovering == 0); mutex_lock(&ost->ost_health_mutex); - ptlrpc_unregister_service(ost->ost_service); - ptlrpc_unregister_service(ost->ost_create_service); - ptlrpc_unregister_service(ost->ost_io_service); - ost->ost_service = NULL; - ost->ost_create_service = NULL; + ptlrpc_unregister_service(ost->ost_service); + ptlrpc_unregister_service(ost->ost_create_service); + ptlrpc_unregister_service(ost->ost_io_service); + ptlrpc_unregister_service(ost->ost_seq_service); + ost->ost_service = NULL; + ost->ost_create_service = NULL; ost->ost_io_service = NULL; + ost->ost_seq_service = NULL; mutex_unlock(&ost->ost_health_mutex);