From: nathan Date: Thu, 23 Apr 2009 19:35:49 +0000 (+0000) Subject: b=18818 X-Git-Tag: v1_9_170~26 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=1fd3e8e08c033b88c2cbbc261ba6405b528c40af;hp=dea72cdb5ce72eda8515da507ab604eb36c69550 b=18818 i=manoj i=rread fix RMF_SETINFO_VAL type and verify all setinfo lengths --- diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index c6cd630..d82ca41 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -1200,8 +1200,10 @@ static int ost_set_info(struct obd_export *exp, struct ptlrpc_request *req) if (KEY_IS(KEY_EVICT_BY_NID)) { if (val && vallen) obd_export_evict_by_nid(exp->exp_obd, val); - GOTO(out, rc = 0); + } else if (KEY_IS(KEY_MDS_CONN) && lustre_msg_swabbed(req->rq_reqmsg)) { + /* Val's are not swabbed automatically */ + __swab32s((__u32 *)val); } rc = obd_set_info_async(exp, keylen, key, vallen, val, NULL); diff --git a/lustre/ptlrpc/layout.c b/lustre/ptlrpc/layout.c index 66b0dc1..81faebb 100644 --- a/lustre/ptlrpc/layout.c +++ b/lustre/ptlrpc/layout.c @@ -613,7 +613,8 @@ struct req_msg_field { }; enum rmf_flags { - RMF_F_STRING = 1 << 0 + RMF_F_STRING = 1 << 0, + RMF_F_NO_SIZE_CHECK = 1 << 1 }; struct req_capsule; @@ -646,8 +647,7 @@ const struct req_msg_field RMF_MGS_SEND_PARAM = EXPORT_SYMBOL(RMF_MGS_SEND_PARAM); const struct req_msg_field RMF_SETINFO_VAL = - DEFINE_MSGF("setinfo_val", 0, - sizeof(__u32), lustre_swab_generic_32s); + DEFINE_MSGF("setinfo_val", 0, -1, NULL); EXPORT_SYMBOL(RMF_SETINFO_VAL); const struct req_msg_field RMF_SEQ_OPC = @@ -756,12 +756,13 @@ const struct req_msg_field RMF_CONN = EXPORT_SYMBOL(RMF_CONN); const struct req_msg_field RMF_CONNECT_DATA = - DEFINE_MSGF("cdata", 0, + DEFINE_MSGF("cdata", + RMF_F_NO_SIZE_CHECK /* we allow extra space for interop */, sizeof(struct obd_connect_data), lustre_swab_connect); EXPORT_SYMBOL(RMF_CONNECT_DATA); const struct req_msg_field RMF_DLM_REQ = - DEFINE_MSGF("dlm_req", 0, + DEFINE_MSGF("dlm_req", RMF_F_NO_SIZE_CHECK /* ldlm_request_bufsize */, sizeof(struct ldlm_request), lustre_swab_ldlm_request); EXPORT_SYMBOL(RMF_DLM_REQ); @@ -780,7 +781,7 @@ const struct req_msg_field RMF_DLM_LVB = EXPORT_SYMBOL(RMF_DLM_LVB); const struct req_msg_field RMF_MDT_MD = - DEFINE_MSGF("mdt_md", 0, MIN_MD_SIZE, NULL); + DEFINE_MSGF("mdt_md", RMF_F_NO_SIZE_CHECK, MIN_MD_SIZE, NULL); EXPORT_SYMBOL(RMF_MDT_MD); const struct req_msg_field RMF_REC_REINT = @@ -798,11 +799,13 @@ const struct req_msg_field RMF_EADATA = DEFINE_MSGF("eadata", 0, -1, NULL); EXPORT_SYMBOL(RMF_EADATA); const struct req_msg_field RMF_ACL = - DEFINE_MSGF("acl", 0, LUSTRE_POSIX_ACL_MAX_SIZE, NULL); + DEFINE_MSGF("acl", RMF_F_NO_SIZE_CHECK, + LUSTRE_POSIX_ACL_MAX_SIZE, NULL); EXPORT_SYMBOL(RMF_ACL); const struct req_msg_field RMF_LOGCOOKIES = - DEFINE_MSGF("logcookies", 0, sizeof(struct llog_cookie), NULL); + DEFINE_MSGF("logcookies", RMF_F_NO_SIZE_CHECK /* multiple cookies */, + sizeof(struct llog_cookie), NULL); EXPORT_SYMBOL(RMF_LOGCOOKIES); const struct req_msg_field RMF_CAPA1 = @@ -1204,8 +1207,8 @@ const struct req_format RQF_OST_SET_INFO = EXPORT_SYMBOL(RQF_OST_SET_INFO); const struct req_format RQF_OST_SET_GRANT_INFO = - DEFINE_REQ_FMT0("OST_SET_GRANT_INFO", ost_set_info_client, - ost_body_only); + DEFINE_REQ_FMT0("OST_SET_GRANT_INFO", ost_set_info_client, + ost_body_only); EXPORT_SYMBOL(RQF_OST_SET_GRANT_INFO); const struct req_format RQF_OST_GET_INFO_GENERIC = @@ -1501,6 +1504,15 @@ void req_capsule_set_size(struct req_capsule *pill, { LASSERT(loc == RCL_SERVER || loc == RCL_CLIENT); + if ((size != field->rmf_size) && + (field->rmf_size != -1) && + !(field->rmf_flags & RMF_F_NO_SIZE_CHECK) && + (size > 0)) { + CERROR("%s: field size mismatch %d != %d (%d)\n", + field->rmf_name, size, field->rmf_size, loc); + //LBUG(); + } + pill->rc_area[loc][__req_capsule_offset(pill, field, loc)] = size; } EXPORT_SYMBOL(req_capsule_set_size);