From: wangdi Date: Sun, 16 Apr 2006 08:09:31 +0000 (+0000) Subject: Branch: b_new_cmd X-Git-Tag: v1_8_0_110~486^2~1989 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=00e4790ad1b7234416ae6e53fa7014f6cb9a61b1;p=fs%2Flustre-release.git Branch: b_new_cmd startup separate new service for fld request --- diff --git a/lustre/fld/fld_seq.c b/lustre/fld/fld_seq.c index 087c041..2faf34e 100644 --- a/lustre/fld/fld_seq.c +++ b/lustre/fld/fld_seq.c @@ -4,6 +4,7 @@ * fld/fld.c * * Copyright (C) 2006 Cluster File Systems, Inc. + * Author: WangDi * * This file is part of the Lustre file system, http://www.lustre.org * Lustre is a trademark of Cluster File Systems, Inc. @@ -37,6 +38,7 @@ #include #include +#include #include "fld_internal.h" /*XXX maybe these 2 items should go to sbi*/ @@ -164,8 +166,7 @@ int fld_create(struct obd_export *exp, __u64 seq, __u64 mds_num) md_fld.mf_seq = seq; md_fld.mf_mds = mds_num; - rc = obd_set_info(fld_exp, strlen("fld_create"), "fld_create", - sizeof(struct md_fld), &md_fld); + rc = mdc_fld(fld_exp, &md_fld, FLD_CREATE); fld_cache_insert(fld_cache, seq, mds_num); RETURN(rc); @@ -186,8 +187,7 @@ int fld_delete(struct obd_export *exp, __u64 seq, __u64 mds_num) md_fld.mf_seq = seq; md_fld.mf_mds = mds_num; - rc = obd_set_info(fld_exp, strlen("fld_delete"), "fld_delete", - sizeof(struct md_fld), &md_fld); + rc = mdc_fld(fld_exp, &md_fld, FLD_DELETE); RETURN(rc); } @@ -206,9 +206,8 @@ int fld_get(struct obd_export *exp, __u64 lu_seq, __u64 *mds_num) vallen = sizeof(struct md_fld); - rc = obd_get_info(fld_exp, strlen("fld_delete"), "fld_delete", - &vallen, &md_fld); - + rc = mdc_fld(fld_exp, &md_fld, FLD_GET); + *mds_num = md_fld.mf_mds; RETURN(rc); diff --git a/lustre/include/linux/lustre_idl.h b/lustre/include/linux/lustre_idl.h index 8453c96..cbdbfa6 100644 --- a/lustre/include/linux/lustre_idl.h +++ b/lustre/include/linux/lustre_idl.h @@ -97,6 +97,7 @@ #define MGS_REQUEST_PORTAL 26 #define MGS_REPLY_PORTAL 27 #define OST_REQUEST_PORTAL 28 +#define MDS_FLD_PORTAL 29 #define SVC_KILLED 1 #define SVC_EVENT 2 @@ -515,6 +516,7 @@ struct ost_body { extern void lustre_swab_ost_body (struct ost_body *b); extern void lustre_swab_ost_last_id(obd_id *id); +extern void lustre_swab_generic_32s(__u32 *val); /* lock value block communicated between the filter and llite */ @@ -560,7 +562,7 @@ typedef enum { MDS_QUOTACTL = 48, MDS_GETXATTR = 49, MDS_SETXATTR = 50, - MDS_GET_INFO = 51, + MDS_FLD = 51, MDS_LAST_OPC } mds_cmd_t; diff --git a/lustre/include/linux/lustre_mdc.h b/lustre/include/linux/lustre_mdc.h index d1bc98a..fbac1d3 100644 --- a/lustre/include/linux/lustre_mdc.h +++ b/lustre/include/linux/lustre_mdc.h @@ -130,6 +130,9 @@ int mdc_rename(struct obd_export *exp, struct md_op_data *op_data, struct ptlrpc_request **request); int mdc_sync(struct obd_export *exp, struct lu_fid *fid, struct ptlrpc_request **); + +int mdc_fld(struct obd_export *exp, struct md_fld *mf, __u32 fld_op); + int mdc_create_client(struct obd_uuid uuid, struct ptlrpc_client *cl); int mdc_llog_process(struct obd_export *, char *logname, llog_cb_t, void *data); diff --git a/lustre/include/linux/md_object.h b/lustre/include/linux/md_object.h index 0687893..b1437f8 100644 --- a/lustre/include/linux/md_object.h +++ b/lustre/include/linux/md_object.h @@ -85,8 +85,8 @@ struct md_device_operations { int (*mdo_statfs)(struct lu_context *ctx, struct md_device *m, struct kstatfs *sfs); - int (*mdo_get_info)(struct lu_context *ctx, struct md_device *m, - __u32 keylen, void *key, __u32 *vallen, void *val); + int (*mdo_fld)(struct lu_context *ctx, struct md_device *m, + __u32 opt, void *mf); int (*mdo_set_info)(struct lu_context *ctx, struct md_device *m, __u32 keylen, void *key, __u32 vallen, void *val); @@ -145,4 +145,9 @@ static inline void md_device_fini(struct md_device *md) lu_device_fini(&md->md_lu_dev); } +enum fld_op { + FLD_CREATE = 0, + FLD_DELETE = 1, + FLD_GET = 2 +}; #endif /* _LINUX_MD_OBJECT_H */ diff --git a/lustre/include/linux/obd.h b/lustre/include/linux/obd.h index 52d64e2..6572d56 100644 --- a/lustre/include/linux/obd.h +++ b/lustre/include/linux/obd.h @@ -495,6 +495,7 @@ struct niobuf_local { #define LUSTRE_CMM0_NAME "cmm0" #define LUSTRE_MDD0_NAME "mdd0" #define LUSTRE_OSD0_NAME "osd0" +#define LUSTRE_FLD0_NAME "fld0" #define LUSTRE_MDC_NAME "mdc" diff --git a/lustre/include/linux/obd_support.h b/lustre/include/linux/obd_support.h index 5c73460..f096703 100644 --- a/lustre/include/linux/obd_support.h +++ b/lustre/include/linux/obd_support.h @@ -101,8 +101,8 @@ extern wait_queue_head_t obd_race_waitq; #define OBD_FAIL_MDS_SETXATTR_WRITE 0x134 #define OBD_FAIL_MDS_SET_INFO_NET 0x135 #define OBD_FAIL_MDS_SET_INFO_PACK 0x136 -#define OBD_FAIL_MDS_GET_INFO_NET 0x137 -#define OBD_FAIL_MDS_GET_INFO_PACK 0x138 +#define OBD_FAIL_MDS_FLD_NET 0x137 +#define OBD_FAIL_MDS_FLD_PACK 0x138 #define OBD_FAIL_OST 0x200 #define OBD_FAIL_OST_CONNECT_NET 0x201 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index 3155f4b..23bf934 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -851,75 +851,37 @@ int mdc_set_info(struct obd_export *exp, obd_count keylen, ptlrpc_req_finished(req); RETURN(rc); } - if (KEY_IS("fld_create") || KEY_IS("fld_delete")) { - struct ptlrpc_request *req; - int size[2] = {keylen, vallen}; - char *bufs[2] = {key, val}; - ENTRY; - - req = ptlrpc_prep_req(imp, LUSTRE_MDS_VERSION, - MDS_SET_INFO, 2, size, bufs); - if (req == NULL) - RETURN(-ENOMEM); - - req->rq_replen = lustre_msg_size(0, NULL); - rc = ptlrpc_queue_wait(req); - if (rc) - GOTO(out_req, rc); -out_req: - ptlrpc_req_finished(req); - RETURN(rc); - - } RETURN(rc); } -int mdc_get_info(struct obd_export *exp, __u32 keylen, void *key, - __u32 *vallen, void *val) +int mdc_fld(struct obd_export *exp, struct md_fld *mf, __u32 fld_op) { - int rc = -EINVAL; - - if (keylen == strlen("max_easize") && - memcmp(key, "max_easize", strlen("max_easize")) == 0) { - int mdsize, *max_easize; - - if (*vallen != sizeof(int)) - RETURN(-EINVAL); - mdsize = *(int*)val; - if (mdsize > exp->exp_obd->u.cli.cl_max_mds_easize) - exp->exp_obd->u.cli.cl_max_mds_easize = mdsize; - max_easize = val; - *max_easize = exp->exp_obd->u.cli.cl_max_mds_easize; - RETURN(0); - } - if (KEY_IS("fld_get")) { - struct ptlrpc_request *req; - int size[2] = {keylen, *vallen}; - char *bufs[2] = {key, val}; - struct md_fld *reply; - ENTRY; - - req = ptlrpc_prep_req(class_exp2cliimp(exp), LUSTRE_MDS_VERSION, - MDS_GET_INFO, 2, size, bufs); - if (req == NULL) - RETURN(-ENOMEM); - - req->rq_replen = lustre_msg_size(1, (int *)vallen); - rc = ptlrpc_queue_wait(req); - if (rc) - GOTO(out_req, rc); + struct ptlrpc_request *req; + struct md_fld *pmf; + int mf_size = sizeof(*mf); + __u32 *op; + int size[2] = {sizeof(op), mf_size}, rc; + ENTRY; - reply = lustre_swab_repbuf(req, 0, sizeof(*reply), - lustre_swab_md_fld); - if (reply == NULL) { - CERROR("Can't unpack %s\n", (char *)key); - GOTO(out_req, rc = -EPROTO); - } - *((struct md_fld *)val) = *reply; + req = ptlrpc_prep_req(class_exp2cliimp(exp), LUSTRE_MDS_VERSION, + MDS_FLD, 2, size, NULL); + if (req == NULL) + RETURN(-ENOMEM); + + op = lustre_msg_buf(req->rq_reqmsg, 0, sizeof (*op)); + *op = fld_op; + + pmf = lustre_msg_buf(req->rq_reqmsg, 1, sizeof (*pmf)); + memcpy(pmf, mf, sizeof(*mf)); + + req->rq_replen = lustre_msg_size(1, &mf_size); + rc = ptlrpc_queue_wait(req); + if (rc) + GOTO(out_req, rc); + + pmf = lustre_swab_repbuf(req, 0, sizeof(*pmf), lustre_swab_md_fld); out_req: - ptlrpc_req_finished(req); - RETURN(rc); - } + ptlrpc_req_finished(req); RETURN(rc); } @@ -1273,7 +1235,6 @@ struct obd_ops mdc_obd_ops = { .o_disconnect = client_disconnect_export, .o_iocontrol = mdc_iocontrol, .o_set_info = mdc_set_info, - .o_get_info = mdc_get_info, .o_statfs = mdc_statfs, .o_pin = mdc_pin, .o_unpin = mdc_unpin, @@ -1335,6 +1296,7 @@ EXPORT_SYMBOL(mdc_clear_open_replay_data); EXPORT_SYMBOL(mdc_init_ea_size); EXPORT_SYMBOL(mdc_getxattr); EXPORT_SYMBOL(mdc_setxattr); +EXPORT_SYMBOL(mdc_fld); module_init(mdc_init); module_exit(mdc_exit); diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 8d0ca53..d08b563 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -763,50 +763,35 @@ static int mdd_fld_get(struct mdd_device *mdd, __u64 seq_num, __u64 *mds_num) return -ENOENT; } -static int mdd_get_info(struct lu_context *ctx, struct md_device *m, - __u32 keylen, void *key, __u32 *vallen, void *val) +static int mdd_fld(struct lu_context *ctx, struct md_device *m, + __u32 opts, void *mf) { - struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev); + struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev); + struct md_fld *pmf = mf; int rc; - ENTRY; - if (keylen >= strlen("fld_get") && - memcmp(key, "fld_get", 7) == 0) { - struct md_fld *mf = val; - rc = mdd_fld_get(mdd, mf->mf_seq, &mf->mf_mds); - RETURN(rc); - } - RETURN(-EINVAL); -} -static int mdd_set_info(struct lu_context *ctx, struct md_device *m, - __u32 keylen, void *key, __u32 vallen, void *val) -{ - struct mdd_device *mdd = lu2mdd_dev(&m->md_lu_dev); - int rc; - ENTRY; - - if (keylen >= strlen("fld_create") && - memcmp(key, "fld_create", 10) == 0) { - struct md_fld *mf = val; - rc = mdd_fld_create(mdd, mf->mf_seq, mf->mf_mds); - RETURN(rc); - } - - if (keylen >= strlen("fld_delete") && - memcmp(key, "fld_delete", 10) == 0) { - struct md_fld *mf = val; - rc = mdd_fld_delete(mdd, mf->mf_seq, mf->mf_mds); - RETURN(rc); - } + switch (opts) { + case FLD_CREATE: + rc = mdd_fld_create(mdd, pmf->mf_seq, pmf->mf_mds); + break; + case FLD_DELETE: + rc = mdd_fld_delete(mdd, pmf->mf_seq, pmf->mf_mds); + break; + case FLD_GET: + rc = mdd_fld_get(mdd, pmf->mf_seq, &pmf->mf_mds); + break; + default: + rc = -EINVAL; + break; + } + RETURN(rc); - RETURN(-EINVAL); } struct md_device_operations mdd_ops = { .mdo_root_get = mdd_root_get, - .mdo_get_info = mdd_get_info, - .mdo_set_info = mdd_set_info, + .mdo_fld = mdd_fld, .mdo_config = mdd_config, .mdo_statfs = mdd_statfs }; diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 403d234..7bb7052 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -201,78 +201,30 @@ static int mdt_getattr(struct mdt_thread_info *info, RETURN(result); } -static int mdt_set_info(struct mdt_thread_info *info, - struct ptlrpc_request *req, int offset) +static int mdt_fld(struct mdt_thread_info *info, + struct ptlrpc_request *req, int offset) { struct md_device *next = info->mti_mdt->mdt_child; - char *key; - int keylen, rc = 0; + struct md_fld mf, *p, *reply; + int size = sizeof(*reply); + __u32 *opt; + int rc; ENTRY; - key = lustre_msg_buf(req->rq_reqmsg, 0, 1); - if (key == NULL) { - DEBUG_REQ(D_HA, req, "no set_info key"); - RETURN(-EFAULT); - } - keylen = req->rq_reqmsg->buflens[0]; - - if (((keylen >= strlen("fld_create") && - memcmp(key, "fld_create", keylen) == 0)) || - ((keylen >= strlen("fld_delete") && - memcmp(key, "fld_delete", keylen) == 0))) { - struct md_fld mf, *p; - __u32 size = sizeof(struct md_fld); - - rc = lustre_pack_reply(req, 0, NULL, NULL); - if (rc) - RETURN(rc); - - p = lustre_swab_reqbuf(req, 1, sizeof(mf), lustre_swab_md_fld); - mf = *p; - rc = next->md_ops->mdo_get_info(info->mti_ctxt, next, keylen, - key, &size, &mf); + rc = lustre_pack_reply(req, 1, &size, NULL); + if (rc) RETURN(rc); - } - CDEBUG(D_IOCTL, "invalid key\n"); - RETURN(-EINVAL); + opt = lustre_swab_reqbuf(req, 0, sizeof(*opt), + lustre_swab_generic_32s); -} + p = lustre_swab_reqbuf(req, 1, sizeof(mf), lustre_swab_md_fld); + mf = *p; + rc = next->md_ops->mdo_fld(info->mti_ctxt, next, *opt, &mf); + reply = lustre_msg_buf(req->rq_repmsg, 0, size); + *reply = mf; -static int mdt_get_info(struct mdt_thread_info *info, - struct ptlrpc_request *req, int offset) -{ - struct md_device *next = info->mti_mdt->mdt_child; - char *key; - int keylen, rc = 0; - ENTRY; - - key = lustre_msg_buf(req->rq_reqmsg, 0, 1); - if (key == NULL) { - DEBUG_REQ(D_HA, req, "no set_info key"); - RETURN(-EFAULT); - } - keylen = req->rq_reqmsg->buflens[0]; - - if (((keylen >= strlen("fld_get") && - memcmp(key, "fld_get", keylen) == 0))) { - struct md_fld mf, *p, *reply; - int size = sizeof(*reply); - - rc = lustre_pack_reply(req, 1, &size, NULL); - if (rc) - RETURN(rc); - p = lustre_swab_reqbuf(req, 1, sizeof(mf), lustre_swab_md_fld); - mf = *p; - rc = next->md_ops->mdo_get_info(info->mti_ctxt, next, keylen, - key, &size, &mf); - reply = lustre_msg_buf(req->rq_repmsg, 0, size); - *reply = mf; - RETURN(rc); - } - - CDEBUG(D_IOCTL, "invalid key\n"); - RETURN(-EINVAL); + RETURN(rc); } static struct lu_device_operations mdt_lu_ops; @@ -1062,19 +1014,28 @@ struct lu_seq_mgr_ops seq_mgr_ops = { .smo_write = mdt_seq_mgr_write }; +static void mdt_stop_ptlrpc_service(struct mdt_device *m) +{ + if (m->mdt_service != NULL) { + ptlrpc_unregister_service(m->mdt_service); + m->mdt_service = NULL; + } + if (m->mdt_fld_service != NULL) { + ptlrpc_unregister_service(m->mdt_fld_service); + m->mdt_fld_service = NULL; + } +} + static void mdt_fini(struct mdt_device *m) { struct lu_device *d = &m->mdt_md_dev.md_lu_dev; + mdt_stop_ptlrpc_service(m); if (d->ld_site != NULL) { lu_site_fini(d->ld_site); OBD_FREE_PTR(d->ld_site); d->ld_site = NULL; } - if (m->mdt_service != NULL) { - ptlrpc_unregister_service(m->mdt_service); - m->mdt_service = NULL; - } if (m->mdt_namespace != NULL) { ldlm_namespace_free(m->mdt_namespace, 0); m->mdt_namespace = NULL; @@ -1094,6 +1055,68 @@ static void mdt_fini(struct mdt_device *m) md_device_fini(&m->mdt_md_dev); } +static int mdt_start_ptlrpc_service(struct mdt_device *m) +{ + int rc; + ENTRY; + + m->mdt_service_conf.psc_nbufs = MDS_NBUFS; + m->mdt_service_conf.psc_bufsize = MDS_BUFSIZE; + m->mdt_service_conf.psc_max_req_size = MDS_MAXREQSIZE; + m->mdt_service_conf.psc_max_reply_size = MDS_MAXREPSIZE; + m->mdt_service_conf.psc_req_portal = MDS_REQUEST_PORTAL; + m->mdt_service_conf.psc_rep_portal = MDC_REPLY_PORTAL; + m->mdt_service_conf.psc_watchdog_timeout = MDS_SERVICE_WATCHDOG_TIMEOUT; + /* + * We'd like to have a mechanism to set this on a per-device basis, + * but alas... + */ + m->mdt_service_conf.psc_num_threads = min(max(mdt_num_threads, + MDT_MIN_THREADS), + MDT_MAX_THREADS); + + ptlrpc_init_client(LDLM_CB_REQUEST_PORTAL, LDLM_CB_REPLY_PORTAL, + "mdt_ldlm_client", &m->mdt_ldlm_client); + + m->mdt_service = + ptlrpc_init_svc_conf(&m->mdt_service_conf, mdt_handle, + LUSTRE_MDT0_NAME, + m->mdt_md_dev.md_lu_dev.ld_proc_entry, + NULL); + if (m->mdt_service == NULL) + RETURN(-ENOMEM); + + rc = ptlrpc_start_threads(NULL, m->mdt_service, LUSTRE_MDT0_NAME); + if (rc) + GOTO(err_mdt_svc, rc); + + /*start mdt fld service */ + + m->mdt_service_conf.psc_req_portal = MDS_FLD_PORTAL; + + m->mdt_fld_service = + ptlrpc_init_svc_conf(&m->mdt_service_conf, mdt_handle, + LUSTRE_FLD0_NAME, + m->mdt_md_dev.md_lu_dev.ld_proc_entry, + NULL); + if (m->mdt_fld_service == NULL) + RETURN(-ENOMEM); + + rc = ptlrpc_start_threads(NULL, m->mdt_fld_service, LUSTRE_FLD0_NAME); + if (rc) + GOTO(err_fld_svc, rc); + + RETURN(rc); +err_fld_svc: + ptlrpc_unregister_service(m->mdt_fld_service); + m->mdt_fld_service = NULL; +err_mdt_svc: + ptlrpc_unregister_service(m->mdt_service); + m->mdt_service = NULL; + + RETURN(rc); +} + static int mdt_init0(struct mdt_device *m, struct lu_device_type *t, struct lustre_cfg *cfg) { @@ -1127,44 +1150,12 @@ static int mdt_init0(struct mdt_device *m, m->mdt_md_dev.md_lu_dev.ld_ops = &mdt_lu_ops; lu_site_init(s, &m->mdt_md_dev.md_lu_dev); - m->mdt_service_conf.psc_nbufs = MDS_NBUFS; - m->mdt_service_conf.psc_bufsize = MDS_BUFSIZE; - m->mdt_service_conf.psc_max_req_size = MDS_MAXREQSIZE; - m->mdt_service_conf.psc_max_reply_size = MDS_MAXREPSIZE; - m->mdt_service_conf.psc_req_portal = MDS_REQUEST_PORTAL; - m->mdt_service_conf.psc_rep_portal = MDC_REPLY_PORTAL; - m->mdt_service_conf.psc_watchdog_timeout = MDS_SERVICE_WATCHDOG_TIMEOUT; - /* - * We'd like to have a mechanism to set this on a per-device basis, - * but alas... - */ - m->mdt_service_conf.psc_num_threads = min(max(mdt_num_threads, - MDT_MIN_THREADS), - MDT_MAX_THREADS); - snprintf(ns_name, sizeof ns_name, LUSTRE_MDT0_NAME"-%p", m); - m->mdt_namespace = ldlm_namespace_new(ns_name, LDLM_NAMESPACE_SERVER); - if (m->mdt_namespace == NULL) - GOTO(err_fini_site, rc = -ENOMEM); - - ldlm_register_intent(m->mdt_namespace, mdt_intent_policy); - - ptlrpc_init_client(LDLM_CB_REQUEST_PORTAL, LDLM_CB_REPLY_PORTAL, - "mdt_ldlm_client", &m->mdt_ldlm_client); - - m->mdt_service = - ptlrpc_init_svc_conf(&m->mdt_service_conf, mdt_handle, - LUSTRE_MDT0_NAME, - m->mdt_md_dev.md_lu_dev.ld_proc_entry, - NULL); - if (m->mdt_service == NULL) - GOTO(err_free_ns, rc = -ENOMEM); - /* init the stack */ LASSERT(mdt_child->ld_type->ldt_ops->ldto_device_init != NULL); rc = mdt_child->ld_type->ldt_ops->ldto_device_init(mdt_child, top); if (rc) { CERROR("can't init device stack, rc %d\n", rc); - GOTO(err_free_svc, rc); + GOTO(err_fini_site, rc); } m->mdt_seq_mgr = seq_mgr_init(&seq_mgr_ops, m); @@ -1184,13 +1175,22 @@ static int mdt_init0(struct mdt_device *m, if (rc) GOTO(err_fini_ctx, rc); - rc = ptlrpc_start_threads(NULL, m->mdt_service, LUSTRE_MDT0_NAME); - if (rc) - GOTO(err_fini_ctx, rc); - lu_context_fini(&ctx); - RETURN(0); + + snprintf(ns_name, sizeof ns_name, LUSTRE_MDT0_NAME"-%p", m); + m->mdt_namespace = ldlm_namespace_new(ns_name, LDLM_NAMESPACE_SERVER); + if (m->mdt_namespace == NULL) + GOTO(err_fini_site, rc = -ENOMEM); + ldlm_register_intent(m->mdt_namespace, mdt_intent_policy); + + rc = mdt_start_ptlrpc_service(m); + if (rc) + GOTO(err_free_ns, rc); + RETURN(0); +err_free_ns: + ldlm_namespace_free(m->mdt_namespace, 0); + m->mdt_namespace = NULL; err_fini_ctx: lu_context_fini(&ctx); err_fini_mgr: @@ -1198,12 +1198,7 @@ err_fini_mgr: m->mdt_seq_mgr = NULL; err_fini_child: mdt_child->ld_type->ldt_ops->ldto_device_fini(mdt_child); -err_free_svc: - ptlrpc_unregister_service(m->mdt_service); - m->mdt_service = NULL; -err_free_ns: - ldlm_namespace_free(m->mdt_namespace, 0); - m->mdt_namespace = NULL; + err_fini_site: lu_site_fini(s); OBD_FREE_PTR(s); @@ -1470,8 +1465,7 @@ static struct mdt_handler mdt_mds_ops[] = { DEF_MDT_HNDL(HABEO_CORPUS, DONE_WRITING, mdt_done_writing), DEF_MDT_HNDL(0, PIN, mdt_pin), DEF_MDT_HNDL(HABEO_CORPUS, SYNC, mdt_sync), - DEF_MDT_HNDL(0, SET_INFO, mdt_set_info), - DEF_MDT_HNDL(0, GET_INFO, mdt_get_info), + DEF_MDT_HNDL(0, FLD, mdt_fld), DEF_MDT_HNDL(0, QUOTACHECK, mdt_handle_quotacheck), DEF_MDT_HNDL(0, QUOTACTL, mdt_handle_quotactl) }; diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index 30b1642..ce3da4f 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -63,6 +63,7 @@ struct mdt_device { /* super-class */ struct md_device mdt_md_dev; struct ptlrpc_service *mdt_service; + struct ptlrpc_service *mdt_fld_service; struct ptlrpc_service_conf mdt_service_conf; /* DLM name-space for meta-data locks maintained by this server */ struct ldlm_namespace *mdt_namespace; diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c index d1a5717..e59417a 100644 --- a/lustre/ptlrpc/lproc_ptlrpc.c +++ b/lustre/ptlrpc/lproc_ptlrpc.c @@ -76,7 +76,6 @@ struct ll_rpc_opcode { { MDS_QUOTACTL, "mds_quotactl" }, { MDS_GETXATTR, "mds_getxattr" }, { MDS_SETXATTR, "mds_setxattr" }, - { MDS_GET_INFO, "mds_get_info" }, { LDLM_ENQUEUE, "ldlm_enqueue" }, { LDLM_CONVERT, "ldlm_convert" }, { LDLM_CANCEL, "ldlm_cancel" }, diff --git a/lustre/ptlrpc/pack_generic.c b/lustre/ptlrpc/pack_generic.c index 07f95c3..5070106 100644 --- a/lustre/ptlrpc/pack_generic.c +++ b/lustre/ptlrpc/pack_generic.c @@ -584,6 +584,11 @@ void lustre_swab_ost_last_id(obd_id *id) __swab64s(id); } +void lustre_swab_generic_32s(__u32 *val) +{ + __swab32s(val); +} + void lustre_swab_ost_lvb(struct ost_lvb *lvb) { __swab64s(&lvb->lvb_size); diff --git a/lustre/ptlrpc/ptlrpc_module.c b/lustre/ptlrpc/ptlrpc_module.c index 9cffa87..c2d3e36 100644 --- a/lustre/ptlrpc/ptlrpc_module.c +++ b/lustre/ptlrpc/ptlrpc_module.c @@ -218,6 +218,7 @@ EXPORT_SYMBOL(lustre_swab_ldlm_reply); EXPORT_SYMBOL(lustre_swab_qdata); EXPORT_SYMBOL(lustre_swab_mgs_target_info); EXPORT_SYMBOL(lustre_swab_md_fld); +EXPORT_SYMBOL(lustre_swab_generic_32s); /* recover.c */ EXPORT_SYMBOL(ptlrpc_run_recovery_over_upcall);