From 73db254e2810babb66b8db3c32afc6d3a117705c Mon Sep 17 00:00:00 2001 From: jcl Date: Thu, 14 Feb 2013 18:18:49 +0100 Subject: [PATCH] LU-2813 hsm: Add user credential information to copy tool RPC Add MDT_BODY data to the RPC used for coytool, so the coordinator can make some check based on the user Signed-off-by: JC Lafoucriere Change-Id: Ia45aacfdc78411f7c202bafb6bd6411f686606a6 Reviewed-on: http://review.whamcloud.com/5436 Tested-by: Hudson Reviewed-by: Andreas Dilger Reviewed-by: Jinshan Xiong Tested-by: Maloo --- lustre/mdc/mdc_request.c | 26 ++++++++++++++++++++------ lustre/mdt/mdt_hsm.c | 25 ++++++++++++++++++++----- lustre/mdt/mdt_mds.c | 8 ++++---- lustre/ptlrpc/layout.c | 11 ++++++++++- 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index 9fc8e51..fd087a5 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -1229,9 +1229,13 @@ static int mdc_ioc_hsm_progress(struct obd_export *exp, if (req == NULL) GOTO(out, rc = -ENOMEM); + mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0); + /* Copy hsm_progress struct */ req_hpk = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_PROGRESS); - LASSERT(req_hpk); + if (req_hpk == NULL) + GOTO(out, rc = -EPROTO); + *req_hpk = *hpk; ptlrpc_request_set_replen(req); @@ -1256,10 +1260,14 @@ static int mdc_ioc_hsm_ct_register(struct obd_import *imp, __u32 archives) if (req == NULL) GOTO(out, rc = -ENOMEM); + mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0); + /* Copy hsm_progress struct */ archive_mask = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_ARCHIVE); - LASSERT(archive_mask); + if (archive_mask == NULL) + GOTO(out, rc = -EPROTO); + *archive_mask = archives; ptlrpc_request_set_replen(req); @@ -1327,6 +1335,8 @@ static int mdc_ioc_hsm_ct_unregister(struct obd_import *imp) if (req == NULL) GOTO(out, rc = -ENOMEM); + mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0); + ptlrpc_request_set_replen(req); rc = mdc_queue_wait(req); @@ -1406,7 +1416,8 @@ static int mdc_ioc_hsm_state_set(struct obd_export *exp, /* Copy states */ req_hss = req_capsule_client_get(&req->rq_pill, &RMF_HSM_STATE_SET); - LASSERT(req_hss); + if (req_hss == NULL) + GOTO(out, rc = -EPROTO); *req_hss = *hss; ptlrpc_request_set_replen(req); @@ -1451,18 +1462,21 @@ static int mdc_ioc_hsm_request(struct obd_export *exp, /* Copy hsm_request struct */ req_hr = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_REQUEST); - LASSERT(req_hr); + if (req_hr == NULL) + GOTO(out, rc = -EPROTO); *req_hr = hur->hur_request; /* Copy hsm_user_item structs */ req_hui = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_USER_ITEM); - LASSERT(req_hui); + if (req_hui == NULL) + GOTO(out, rc = -EPROTO); memcpy(req_hui, hur->hur_user_item, hur->hur_request.hr_itemcount * sizeof(struct hsm_user_item)); /* Copy opaque field */ req_opaque = req_capsule_client_get(&req->rq_pill, &RMF_GENERIC_DATA); - LASSERT(req_opaque); + if (req_opaque == NULL) + GOTO(out, rc = -EPROTO); memcpy(req_opaque, hur_data(hur), hur->hur_request.hr_data_len); ptlrpc_request_set_replen(req); diff --git a/lustre/mdt/mdt_hsm.c b/lustre/mdt/mdt_hsm.c index 9bc870e..55c1069 100644 --- a/lustre/mdt/mdt_hsm.c +++ b/lustre/mdt/mdt_hsm.c @@ -132,10 +132,15 @@ int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj, */ int mdt_hsm_progress(struct mdt_thread_info *info) { + struct mdt_body *body; struct hsm_progress_kernel *hpk; int rc; ENTRY; + body = req_capsule_client_get(info->mti_pill, &RMF_MDT_BODY); + if (body == NULL) + RETURN(-EPROTO); + hpk = req_capsule_client_get(info->mti_pill, &RMF_MDS_HSM_PROGRESS); if (hpk == NULL) RETURN(-EPROTO); @@ -159,11 +164,16 @@ int mdt_hsm_progress(struct mdt_thread_info *info) int mdt_hsm_ct_register(struct mdt_thread_info *info) { - struct ptlrpc_request *req = mdt_info_req(info); - __u32 *archives; - int rc; + struct mdt_body *body; + struct ptlrpc_request *req = mdt_info_req(info); + __u32 *archives; + int rc; ENTRY; + body = req_capsule_client_get(info->mti_pill, &RMF_MDT_BODY); + if (body == NULL) + RETURN(-EPROTO); + archives = req_capsule_client_get(info->mti_pill, &RMF_MDS_HSM_ARCHIVE); if (archives == NULL) RETURN(-EPROTO); @@ -177,10 +187,15 @@ int mdt_hsm_ct_register(struct mdt_thread_info *info) int mdt_hsm_ct_unregister(struct mdt_thread_info *info) { - struct ptlrpc_request *req = mdt_info_req(info); - int rc; + struct mdt_body *body; + struct ptlrpc_request *req = mdt_info_req(info); + int rc; ENTRY; + body = req_capsule_client_get(info->mti_pill, &RMF_MDT_BODY); + if (body == NULL) + RETURN(-EPROTO); + /* XXX: directly include this function here? */ rc = mdt_hsm_agent_unregister(info, &req->rq_export->exp_client_uuid); diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c index cbdf73a..08f4f11 100644 --- a/lustre/mdt/mdt_mds.c +++ b/lustre/mdt/mdt_mds.c @@ -141,17 +141,17 @@ 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(0 | HABEO_REFERO, MDS_HSM_REQUEST, mdt_hsm_request), +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) }; diff --git a/lustre/ptlrpc/layout.c b/lustre/ptlrpc/layout.c index 0156712..52c06bc 100644 --- a/lustre/ptlrpc/layout.c +++ b/lustre/ptlrpc/layout.c @@ -608,21 +608,30 @@ static const struct req_msg_field *ost_get_fiemap_server[] = { static const struct req_msg_field *mdt_hsm_progress[] = { &RMF_PTLRPC_BODY, + &RMF_MDT_BODY, &RMF_MDS_HSM_PROGRESS, }; static const struct req_msg_field *mdt_hsm_ct_register[] = { &RMF_PTLRPC_BODY, + &RMF_MDT_BODY, &RMF_MDS_HSM_ARCHIVE, }; +static const struct req_msg_field *mdt_hsm_ct_unregister[] = { + &RMF_PTLRPC_BODY, + &RMF_MDT_BODY, +}; + static const struct req_msg_field *mdt_hsm_action_server[] = { &RMF_PTLRPC_BODY, + &RMF_MDT_BODY, &RMF_MDS_HSM_CURRENT_ACTION, }; static const struct req_msg_field *mdt_hsm_state_get_server[] = { &RMF_PTLRPC_BODY, + &RMF_MDT_BODY, &RMF_HSM_USER_STATE, }; @@ -1438,7 +1447,7 @@ struct req_format RQF_MDS_HSM_CT_REGISTER = EXPORT_SYMBOL(RQF_MDS_HSM_CT_REGISTER); struct req_format RQF_MDS_HSM_CT_UNREGISTER = - DEFINE_REQ_FMT0("MDS_HSM_CT_UNREGISTER", empty, empty); + DEFINE_REQ_FMT0("MDS_HSM_CT_UNREGISTER", mdt_hsm_ct_unregister, empty); EXPORT_SYMBOL(RQF_MDS_HSM_CT_UNREGISTER); struct req_format RQF_MDS_HSM_STATE_GET = -- 1.8.3.1