flags = h->mh_flags;
LASSERT(ergo(flags & (HABEO_CORPUS | HABEO_REFERO), h->mh_fmt != NULL));
- req_capsule_init(&info->mti_pill, req, RCL_SERVER, info->mti_rep_buf_size);
-
if (h->mh_fmt != NULL) {
req_capsule_set(&info->mti_pill, h->mh_fmt);
result = mdt_unpack_req_pack_rep(info, flags);
LASSERT(!lustre_handle_is_used(&lh->mlh_lh));
}
-static void mdt_thread_info_init(struct mdt_thread_info *info)
+static void mdt_thread_info_init(struct ptlrpc_request *req,
+ struct mdt_thread_info *info)
{
int i;
+ memset(&info->mti_rr, 0, sizeof info->mti_rr);
+ memset(&info->mti_attr, 0, sizeof info->mti_attr);
+
info->mti_fail_id = OBD_FAIL_MDS_ALL_REPLY_NET;
for (i = 0; i < ARRAY_SIZE(info->mti_rep_buf_size); i++)
info->mti_rep_buf_size[i] = 0;
info->mti_rep_buf_nr = i;
for (i = 0; i < ARRAY_SIZE(info->mti_lh); i++)
mdt_lock_handle_init(&info->mti_lh[i]);
+
+ info->mti_ctxt = req->rq_svc_thread->t_ctx;
+ /* it can be NULL while CONNECT */
+ if (req->rq_export)
+ info->mti_mdt = mdt_dev(req->rq_export->exp_obd->obd_lu_dev);
+ req_capsule_init(&info->mti_pill, req, RCL_SERVER, info->mti_rep_buf_size);
+
+ /* other members of "struct mdt_thread_info" should be initialized
+ * by users before they can be used. */
}
static void mdt_thread_info_fini(struct mdt_thread_info *info)
*/
static int mdt_handle(struct ptlrpc_request *req)
{
- int result;
struct lu_context *ctx;
struct mdt_thread_info *info;
+ int result;
ENTRY;
ctx = req->rq_svc_thread->t_ctx;
info = lu_context_key_get(ctx, &mdt_thread_key);
LASSERT(info != NULL);
- mdt_thread_info_init(info);
- /* it can be NULL while CONNECT */
- if (req->rq_export)
- info->mti_mdt = mdt_dev(req->rq_export->exp_obd->obd_lu_dev);
+ mdt_thread_info_init(req, info);
result = mdt_handle0(req, info);
+
mdt_thread_info_fini(info);
RETURN(result);
}
*/
CLASSERT(CFS_PAGE_SIZE >= sizeof *info);
OBD_ALLOC_PTR(info);
- if (info != NULL)
- info->mti_ctxt = ctx;
- else
+ if (info == NULL)
info = ERR_PTR(-ENOMEM);
return info;
}