Whamcloud - gitweb
LU-2813 hsm: Add user credential information to copy tool RPC
authorjcl <jacques-charles.lafoucriere@cea.fr>
Thu, 14 Feb 2013 17:18:49 +0000 (18:18 +0100)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 22 Mar 2013 18:32:03 +0000 (14:32 -0400)
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 <jacques-charles.lafoucriere@cea.fr>
Change-Id: Ia45aacfdc78411f7c202bafb6bd6411f686606a6
Reviewed-on: http://review.whamcloud.com/5436
Tested-by: Hudson
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
lustre/mdc/mdc_request.c
lustre/mdt/mdt_hsm.c
lustre/mdt/mdt_mds.c
lustre/ptlrpc/layout.c

index 9fc8e51..fd087a5 100644 (file)
@@ -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);
index 9bc870e..55c1069 100644 (file)
@@ -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);
 
index cbdf73a..08f4f11 100644 (file)
@@ -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)
 };
 
index 0156712..52c06bc 100644 (file)
@@ -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 =