Whamcloud - gitweb
LU-3467 target: FLD to use unified request handler 64/6764/11
authorMikhail Pershin <mike.pershin@intel.com>
Fri, 14 Jun 2013 17:05:22 +0000 (21:05 +0400)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 1 Aug 2013 01:02:43 +0000 (01:02 +0000)
FLD is switched to unified target code, now it provides
own handler to be called by unified request handler.

Signed-off-by: Mikhail Pershin <mike.pershin@intel.com>
Change-Id: I04fd6af9d11f2208ad220be25bb3245cc5edcccd
Reviewed-on: http://review.whamcloud.com/6764
Tested-by: Hudson
Reviewed-by: wangdi <di.wang@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/fld/fld_handler.c
lustre/fld/fld_internal.h
lustre/include/lu_target.h
lustre/include/lustre_fld.h
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_mds.c

index 9d6d138..6613817 100644 (file)
@@ -60,6 +60,7 @@
 LU_KEY_INIT_FINI(fld, struct fld_thread_info);
 
 /* context key: fld_thread_key */
 LU_KEY_INIT_FINI(fld, struct fld_thread_info);
 
 /* context key: fld_thread_key */
+/* MGS thread may create llog file causing FLD lookup */
 LU_CONTEXT_KEY_DEFINE(fld, LCT_MD_THREAD | LCT_DT_THREAD | LCT_MG_THREAD);
 
 int fld_server_mod_init(void)
 LU_CONTEXT_KEY_DEFINE(fld, LCT_MD_THREAD | LCT_DT_THREAD | LCT_MG_THREAD);
 
 int fld_server_mod_init(void)
@@ -163,55 +164,49 @@ EXPORT_SYMBOL(fld_server_lookup);
  * All MDT server handle fld lookup operation. But only MDT0 has fld index.
  * if entry is not found in cache we need to forward lookup request to MDT0
  */
  * All MDT server handle fld lookup operation. But only MDT0 has fld index.
  * if entry is not found in cache we need to forward lookup request to MDT0
  */
-
 static int fld_server_handle(struct lu_server_fld *fld,
 static int fld_server_handle(struct lu_server_fld *fld,
-                             const struct lu_env *env,
-                             __u32 opc, struct lu_seq_range *range,
-                             struct fld_thread_info *info)
+                            const struct lu_env *env,
+                            __u32 opc, struct lu_seq_range *range)
 {
 {
-        int rc;
-        ENTRY;
+       int rc;
 
 
-        switch (opc) {
-        case FLD_LOOKUP:
-               rc = fld_server_lookup(env, fld, range->lsr_start, range);
-                break;
-        default:
-                rc = -EINVAL;
-                break;
-        }
+       ENTRY;
 
 
-        CDEBUG(D_INFO, "%s: FLD req handle: error %d (opc: %d, range: "
-               DRANGE"\n", fld->lsf_name, rc, opc, PRANGE(range));
+       switch (opc) {
+       case FLD_LOOKUP:
+               rc = fld_server_lookup(env, fld, range->lsr_start, range);
+               break;
+       default:
+               rc = -EINVAL;
+               break;
+       }
 
 
-        RETURN(rc);
+       CDEBUG(D_INFO, "%s: FLD req handle: error %d (opc: %d, range: "
+              DRANGE"\n", fld->lsf_name, rc, opc, PRANGE(range));
 
 
+       RETURN(rc);
 }
 
 }
 
-static int fld_req_handle(struct ptlrpc_request *req,
-                          struct fld_thread_info *info)
+static int fld_handler(struct tgt_session_info *tsi)
 {
 {
-        struct obd_export *exp = req->rq_export;
-        struct lu_site *site = exp->exp_obd->obd_lu_dev->ld_site;
-        struct lu_seq_range *in;
-        struct lu_seq_range *out;
-        int rc;
-        __u32 *opc;
-        ENTRY;
+       struct obd_export       *exp = tsi->tsi_exp;
+       struct lu_site          *site = exp->exp_obd->obd_lu_dev->ld_site;
+       struct lu_seq_range     *in;
+       struct lu_seq_range     *out;
+       int                      rc;
+       __u32                   *opc;
 
 
-        rc = req_capsule_server_pack(info->fti_pill);
-        if (rc)
-                RETURN(err_serious(rc));
+       ENTRY;
 
 
-        opc = req_capsule_client_get(info->fti_pill, &RMF_FLD_OPC);
-        if (opc != NULL) {
-                in = req_capsule_client_get(info->fti_pill, &RMF_FLD_MDFLD);
-                if (in == NULL)
-                        RETURN(err_serious(-EPROTO));
-                out = req_capsule_server_get(info->fti_pill, &RMF_FLD_MDFLD);
-                if (out == NULL)
-                        RETURN(err_serious(-EPROTO));
-                *out = *in;
+       opc = req_capsule_client_get(tsi->tsi_pill, &RMF_FLD_OPC);
+       if (opc != NULL) {
+               in = req_capsule_client_get(tsi->tsi_pill, &RMF_FLD_MDFLD);
+               if (in == NULL)
+                       RETURN(err_serious(-EPROTO));
+               out = req_capsule_server_get(tsi->tsi_pill, &RMF_FLD_MDFLD);
+               if (out == NULL)
+                       RETURN(err_serious(-EPROTO));
+               *out = *in;
 
                /* For old 2.0 client, the 'lsr_flags' is uninitialized.
                 * Set it as 'LU_SEQ_RANGE_MDT' by default. */
 
                /* For old 2.0 client, the 'lsr_flags' is uninitialized.
                 * Set it as 'LU_SEQ_RANGE_MDT' by default. */
@@ -222,57 +217,14 @@ static int fld_req_handle(struct ptlrpc_request *req,
                        fld_range_set_mdt(out);
 
                rc = fld_server_handle(lu_site2seq(site)->ss_server_fld,
                        fld_range_set_mdt(out);
 
                rc = fld_server_handle(lu_site2seq(site)->ss_server_fld,
-                                      req->rq_svc_thread->t_env,
-                                      *opc, out, info);
+                                      tsi->tsi_env, *opc, out);
        } else {
        } else {
-                rc = err_serious(-EPROTO);
+               rc = err_serious(-EPROTO);
        }
 
        RETURN(rc);
 }
 
        }
 
        RETURN(rc);
 }
 
-static void fld_thread_info_init(struct ptlrpc_request *req,
-                                 struct fld_thread_info *info)
-{
-        info->fti_pill = &req->rq_pill;
-        /* Init request capsule. */
-        req_capsule_init(info->fti_pill, req, RCL_SERVER);
-        req_capsule_set(info->fti_pill, &RQF_FLD_QUERY);
-}
-
-static void fld_thread_info_fini(struct fld_thread_info *info)
-{
-        req_capsule_fini(info->fti_pill);
-}
-
-static int fld_handle(struct ptlrpc_request *req)
-{
-        struct fld_thread_info *info;
-        const struct lu_env *env;
-        int rc;
-
-        env = req->rq_svc_thread->t_env;
-        LASSERT(env != NULL);
-
-        info = lu_context_key_get(&env->le_ctx, &fld_thread_key);
-        LASSERT(info != NULL);
-
-        fld_thread_info_init(req, info);
-        rc = fld_req_handle(req, info);
-        fld_thread_info_fini(info);
-
-        return rc;
-}
-
-/*
- * Entry point for handling FLD RPCs called from MDT.
- */
-int fld_query(struct com_thread_info *info)
-{
-        return fld_handle(info->cti_pill->rc_req);
-}
-EXPORT_SYMBOL(fld_query);
-
 /*
  * Returns true, if fid is local to this server node.
  *
 /*
  * Returns true, if fid is local to this server node.
  *
@@ -361,45 +313,44 @@ int fld_server_init(const struct lu_env *env, struct lu_server_fld *fld,
 {
        int cache_size, cache_threshold;
        int rc;
 {
        int cache_size, cache_threshold;
        int rc;
+
        ENTRY;
 
        ENTRY;
 
-        snprintf(fld->lsf_name, sizeof(fld->lsf_name),
-                 "srv-%s", prefix);
+       snprintf(fld->lsf_name, sizeof(fld->lsf_name),
+                "srv-%s", prefix);
 
 
-        cache_size = FLD_SERVER_CACHE_SIZE /
-                sizeof(struct fld_cache_entry);
+       cache_size = FLD_SERVER_CACHE_SIZE / sizeof(struct fld_cache_entry);
 
 
-        cache_threshold = cache_size *
-                FLD_SERVER_CACHE_THRESHOLD / 100;
+       cache_threshold = cache_size * FLD_SERVER_CACHE_THRESHOLD / 100;
 
        mutex_init(&fld->lsf_lock);
 
        mutex_init(&fld->lsf_lock);
-        fld->lsf_cache = fld_cache_init(fld->lsf_name,
-                                        cache_size, cache_threshold);
-        if (IS_ERR(fld->lsf_cache)) {
-                rc = PTR_ERR(fld->lsf_cache);
-                fld->lsf_cache = NULL;
-                GOTO(out, rc);
-        }
+       fld->lsf_cache = fld_cache_init(fld->lsf_name, cache_size,
+                                       cache_threshold);
+       if (IS_ERR(fld->lsf_cache)) {
+               rc = PTR_ERR(fld->lsf_cache);
+               fld->lsf_cache = NULL;
+               RETURN(rc);
+       }
 
        if (!mds_node_id && type == LU_SEQ_RANGE_MDT) {
                rc = fld_index_init(env, fld, dt);
 
        if (!mds_node_id && type == LU_SEQ_RANGE_MDT) {
                rc = fld_index_init(env, fld, dt);
-                if (rc)
-                        GOTO(out, rc);
-        } else {
-                fld->lsf_obj = NULL;
+               if (rc)
+                       GOTO(out_cache, rc);
+       } else {
+               fld->lsf_obj = NULL;
        }
 
        }
 
-        rc = fld_server_proc_init(fld);
-        if (rc)
-                GOTO(out, rc);
-
-        fld->lsf_control_exp = NULL;
+       rc = fld_server_proc_init(fld);
+       if (rc)
+               GOTO(out_index, rc);
 
 
-       GOTO(out, rc);
+       fld->lsf_control_exp = NULL;
 
 
-out:
-       if (rc)
-               fld_server_fini(env, fld);
+       RETURN(0);
+out_index:
+       fld_index_fini(env, fld);
+out_cache:
+       fld_cache_fini(fld->lsf_cache);
        return rc;
 }
 EXPORT_SYMBOL(fld_server_init);
        return rc;
 }
 EXPORT_SYMBOL(fld_server_init);
@@ -420,3 +371,8 @@ void fld_server_fini(const struct lu_env *env, struct lu_server_fld *fld)
        EXIT;
 }
 EXPORT_SYMBOL(fld_server_fini);
        EXIT;
 }
 EXPORT_SYMBOL(fld_server_fini);
+
+struct tgt_handler fld_handlers[] = {
+TGT_FLD_HDL(HABEO_REFERO,      FLD_QUERY,      fld_handler),
+};
+EXPORT_SYMBOL(fld_handlers);
index e95ad9f..25991c7 100644 (file)
@@ -144,9 +144,7 @@ extern struct lprocfs_vars fld_client_proc_list[];
 # endif
 
 # ifdef HAVE_SERVER_SUPPORT
 # endif
 
 # ifdef HAVE_SERVER_SUPPORT
-struct req_capsule;
 struct fld_thread_info {
 struct fld_thread_info {
-       struct req_capsule *fti_pill;
        struct lu_seq_range fti_rec;
        struct lu_seq_range fti_lrange;
        struct lu_seq_range fti_irange;
        struct lu_seq_range fti_rec;
        struct lu_seq_range fti_lrange;
        struct lu_seq_range fti_irange;
index 114073b..31f2e81 100644 (file)
@@ -212,6 +212,7 @@ extern struct tgt_handler tgt_obd_handlers[];
 extern struct tgt_handler tgt_dlm_handlers[];
 extern struct tgt_handler tgt_llog_handlers[];
 extern struct tgt_handler tgt_out_handlers[];
 extern struct tgt_handler tgt_dlm_handlers[];
 extern struct tgt_handler tgt_llog_handlers[];
 extern struct tgt_handler tgt_out_handlers[];
+extern struct tgt_handler fld_handlers[];
 
 typedef void (*tgt_cb_t)(struct lu_target *lut, __u64 transno,
                         void *data, int err);
 
 typedef void (*tgt_cb_t)(struct lu_target *lut, __u64 transno,
                         void *data, int err);
index e9f35a1..48856d3 100644 (file)
@@ -129,9 +129,6 @@ struct lu_client_fld {
        int                      lcf_flags;
 };
 
        int                      lcf_flags;
 };
 
-struct com_thread_info;
-int fld_query(struct com_thread_info *info);
-
 /* Server methods */
 int fld_server_init(const struct lu_env *env, struct lu_server_fld *fld,
                    struct dt_device *dt, const char *prefix, int mds_node_id,
 /* Server methods */
 int fld_server_init(const struct lu_env *env, struct lu_server_fld *fld,
                    struct dt_device *dt, const char *prefix, int mds_node_id,
index 4dc54ca..0a4277e 100644 (file)
@@ -3465,9 +3465,6 @@ int mdt_recovery_handle(struct ptlrpc_request *req)
         ENTRY;
 
         switch (lustre_msg_get_opc(req->rq_reqmsg)) {
         ENTRY;
 
         switch (lustre_msg_get_opc(req->rq_reqmsg)) {
-        case FLD_QUERY:
-                rc = mdt_handle_common(req, mdt_fld_handlers);
-                break;
         case SEQ_QUERY:
                 rc = mdt_handle_common(req, mdt_seq_handlers);
                 break;
         case SEQ_QUERY:
                 rc = mdt_handle_common(req, mdt_seq_handlers);
                 break;
@@ -4691,32 +4688,37 @@ TGT_RPC_HANDLER(MDS_FIRST_OPC,
 
 static struct tgt_opc_slice mdt_common_slice[] = {
        {
 
 static struct tgt_opc_slice mdt_common_slice[] = {
        {
-               .tos_opc_start = MDS_FIRST_OPC,
-               .tos_opc_end   = MDS_LAST_OPC,
-               .tos_hs        = mdt_tgt_handlers
+               .tos_opc_start  = MDS_FIRST_OPC,
+               .tos_opc_end    = MDS_LAST_OPC,
+               .tos_hs         = mdt_tgt_handlers
+       },
+       {
+               .tos_opc_start  = OBD_FIRST_OPC,
+               .tos_opc_end    = OBD_LAST_OPC,
+               .tos_hs         = tgt_obd_handlers
        },
        {
        },
        {
-               .tos_opc_start = OBD_FIRST_OPC,
-               .tos_opc_end   = OBD_LAST_OPC,
-               .tos_hs        = tgt_obd_handlers
+               .tos_opc_start  = LDLM_FIRST_OPC,
+               .tos_opc_end    = LDLM_LAST_OPC,
+               .tos_hs         = tgt_dlm_handlers
        },
        {
        },
        {
-               .tos_opc_start = LDLM_FIRST_OPC,
-               .tos_opc_end   = LDLM_LAST_OPC,
-               .tos_hs        = tgt_dlm_handlers
+               .tos_opc_start  = SEC_FIRST_OPC,
+               .tos_opc_end    = SEC_LAST_OPC,
+               .tos_hs         = tgt_sec_ctx_handlers
        },
        {
        },
        {
-               .tos_opc_start = SEC_FIRST_OPC,
-               .tos_opc_end   = SEC_LAST_OPC,
-               .tos_hs        = tgt_sec_ctx_handlers
+               .tos_opc_start  = UPDATE_OBJ,
+               .tos_opc_end    = UPDATE_LAST_OPC,
+               .tos_hs         = tgt_out_handlers
        },
        {
        },
        {
-               .tos_opc_start = UPDATE_OBJ,
-               .tos_opc_end   = UPDATE_LAST_OPC,
-               .tos_hs        = tgt_out_handlers
+               .tos_opc_start  = FLD_FIRST_OPC,
+               .tos_opc_end    = FLD_LAST_OPC,
+               .tos_hs         = fld_handlers
        },
        {
        },
        {
-               .tos_hs        = NULL
+               .tos_hs         = NULL
        }
 };
 
        }
 };
 
index 02f5643..2805fec 100644 (file)
@@ -288,25 +288,6 @@ struct mdt_opc_slice mdt_seq_handlers[] = {
        }
 };
 
        }
 };
 
-/* 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);
 static int mds_regular_handle(struct ptlrpc_request *req)
 {
        return mdt_handle_common(req, mdt_regular_handlers);
@@ -327,11 +308,6 @@ static int mds_mdss_handle(struct ptlrpc_request *req)
        return mdt_handle_common(req, mdt_seq_handlers);
 }
 
        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)
 {
 /* device init/fini methods */
 static void mds_stop_ptlrpc_service(struct mds_device *m)
 {
@@ -643,10 +619,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_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                = {
                },
                .psc_ops                = {
-                       .so_req_handler         = mds_fld_handle,
+                       .so_req_handler         = tgt_request_handle,
                        .so_req_printer         = target_print_req,
                        .so_hpreq_handler       = NULL,
                },
                        .so_req_printer         = target_print_req,
                        .so_hpreq_handler       = NULL,
                },