X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Flayout.c;h=81faebb744c36361ca2860e0fda13d6eee24281d;hb=1fd3e8e08c033b88c2cbbc261ba6405b528c40af;hp=e0e11b0c77229f8fff1b6b2f37e44227a098997f;hpb=0a119229228954c70fffe3022d173a238031ce85;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/layout.c b/lustre/ptlrpc/layout.c index e0e11b0..81faebb 100644 --- a/lustre/ptlrpc/layout.c +++ b/lustre/ptlrpc/layout.c @@ -105,6 +105,10 @@ static const struct req_msg_field *quotactl_only[] = { &RMF_PTLRPC_BODY, &RMF_OBD_QUOTACTL }; +static const struct req_msg_field *quota_adjust_qunit_only[] = { + &RMF_PTLRPC_BODY, + &RMF_QUOTA_ADJUST_QUNIT +}; static const struct req_msg_field *qunit_data_only[] = { &RMF_PTLRPC_BODY, @@ -240,7 +244,9 @@ static const struct req_msg_field *mds_last_unlink_server[] = { &RMF_PTLRPC_BODY, &RMF_MDT_BODY, &RMF_MDT_MD, - &RMF_LOGCOOKIES + &RMF_LOGCOOKIES, + &RMF_CAPA1, + &RMF_CAPA2 }; static const struct req_msg_field *mds_reint_setattr_client[] = { @@ -465,7 +471,8 @@ static const struct req_msg_field *ost_body_capa[] = { static const struct req_msg_field *ost_destroy_client[] = { &RMF_PTLRPC_BODY, &RMF_OST_BODY, - &RMF_DLM_REQ + &RMF_DLM_REQ, + &RMF_CAPA1 }; @@ -518,10 +525,10 @@ static const struct req_msg_field *ost_get_fiemap_server[] = { static const struct req_format *req_formats[] = { &RQF_OBD_PING, &RQF_SEC_CTX, - &RQF_SEQ_QUERY, - &RQF_FLD_QUERY, &RQF_MGS_TARGET_REG, &RQF_MGS_SET_INFO, + &RQF_SEQ_QUERY, + &RQF_FLD_QUERY, &RQF_MDS_CONNECT, &RQF_MDS_DISCONNECT, &RQF_MDS_SET_INFO, @@ -552,10 +559,12 @@ static const struct req_format *req_formats[] = { &RQF_MDS_QUOTACHECK, &RQF_MDS_QUOTACTL, &RQF_MDS_QUOTA_DQACQ, + &RQF_QC_CALLBACK, &RQF_OST_CONNECT, &RQF_OST_DISCONNECT, &RQF_OST_QUOTACHECK, &RQF_OST_QUOTACTL, + &RQF_OST_QUOTA_ADJUST_QUNIT, &RQF_OST_GETATTR, &RQF_OST_SETATTR, &RQF_OST_CREATE, @@ -565,6 +574,7 @@ static const struct req_format *req_formats[] = { &RQF_OST_BRW, &RQF_OST_STATFS, &RQF_OST_SET_INFO, + &RQF_OST_SET_GRANT_INFO, &RQF_OST_GET_INFO_GENERIC, &RQF_OST_GET_INFO_LAST_ID, &RQF_OST_GET_INFO_FIEMAP, @@ -594,7 +604,7 @@ static const struct req_format *req_formats[] = { struct req_msg_field { __u32 rmf_flags; const char *rmf_name; - /* + /** * Field length. (-1) means "variable length". */ int rmf_size; @@ -603,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; @@ -636,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 = @@ -647,7 +657,7 @@ EXPORT_SYMBOL(RMF_SEQ_OPC); const struct req_msg_field RMF_SEQ_RANGE = DEFINE_MSGF("seq_query_range", 0, - sizeof(struct lu_range), lustre_swab_lu_range); + sizeof(struct lu_seq_range), lustre_swab_lu_seq_range); EXPORT_SYMBOL(RMF_SEQ_RANGE); const struct req_msg_field RMF_FLD_OPC = @@ -657,7 +667,7 @@ EXPORT_SYMBOL(RMF_FLD_OPC); const struct req_msg_field RMF_FLD_MDFLD = DEFINE_MSGF("fld_query_mdfld", 0, - sizeof(struct md_fld), lustre_swab_md_fld); + sizeof(struct lu_seq_range), lustre_swab_lu_seq_range); EXPORT_SYMBOL(RMF_FLD_MDFLD); const struct req_msg_field RMF_MDT_BODY = @@ -670,6 +680,12 @@ const struct req_msg_field RMF_OBD_QUOTACTL = sizeof(struct obd_quotactl), lustre_swab_obd_quotactl); EXPORT_SYMBOL(RMF_OBD_QUOTACTL); +const struct req_msg_field RMF_QUOTA_ADJUST_QUNIT = + DEFINE_MSGF("quota_adjust_qunit", 0, + sizeof(struct quota_adjust_qunit), + lustre_swab_quota_adjust_qunit); +EXPORT_SYMBOL(RMF_QUOTA_ADJUST_QUNIT); + const struct req_msg_field RMF_QUNIT_DATA = DEFINE_MSGF("qunit_data", 0, sizeof(struct qunit_data), NULL); @@ -740,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); @@ -764,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 = @@ -781,12 +798,14 @@ EXPORT_SYMBOL(RMF_REC_JOINFILE); 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); +const struct req_msg_field RMF_ACL = + 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 = @@ -799,7 +818,7 @@ const struct req_msg_field RMF_CAPA2 = lustre_swab_lustre_capa); EXPORT_SYMBOL(RMF_CAPA2); -/* +/* * OST request field. */ const struct req_msg_field RMF_OST_BODY = @@ -863,21 +882,29 @@ DEFINE_REQ_FMT(name, client, ARRAY_SIZE(client), server, ARRAY_SIZE(server)) const struct req_format RQF_OBD_PING = DEFINE_REQ_FMT0("OBD_PING", empty, empty); EXPORT_SYMBOL(RQF_OBD_PING); - + const struct req_format RQF_SEC_CTX = DEFINE_REQ_FMT0("SEC_CTX", empty, empty); EXPORT_SYMBOL(RQF_SEC_CTX); - + const struct req_format RQF_MGS_TARGET_REG = DEFINE_REQ_FMT0("MGS_TARGET_REG", mgs_target_info_only, mgs_target_info_only); EXPORT_SYMBOL(RQF_MGS_TARGET_REG); const struct req_format RQF_MGS_SET_INFO = - DEFINE_REQ_FMT0("MGS_SET_INTO", mgs_set_info, + DEFINE_REQ_FMT0("MGS_SET_INFO", mgs_set_info, mgs_set_info); EXPORT_SYMBOL(RQF_MGS_SET_INFO); +const struct req_format RQF_SEQ_QUERY = + DEFINE_REQ_FMT0("SEQ_QUERY", seq_query_client, seq_query_server); +EXPORT_SYMBOL(RQF_SEQ_QUERY); + +const struct req_format RQF_FLD_QUERY = + DEFINE_REQ_FMT0("FLD_QUERY", fld_query_client, fld_query_server); +EXPORT_SYMBOL(RQF_FLD_QUERY); + const struct req_format RQF_LOG_CANCEL = DEFINE_REQ_FMT0("OBD_LOG_CANCEL", log_cancel_client, empty); EXPORT_SYMBOL(RQF_LOG_CANCEL); @@ -898,6 +925,11 @@ const struct req_format RQF_OST_QUOTACTL = DEFINE_REQ_FMT0("OST_QUOTACTL", quotactl_only, quotactl_only); EXPORT_SYMBOL(RQF_OST_QUOTACTL); +const struct req_format RQF_OST_QUOTA_ADJUST_QUNIT = + DEFINE_REQ_FMT0("OST_QUOTA_ADJUST_QUNIT", quota_adjust_qunit_only, + quota_adjust_qunit_only); +EXPORT_SYMBOL(RQF_OST_QUOTA_ADJUST_QUNIT); + const struct req_format RQF_QC_CALLBACK = DEFINE_REQ_FMT0("QC_CALLBACK", quotactl_only, empty); EXPORT_SYMBOL(RQF_QC_CALLBACK); @@ -906,14 +938,6 @@ const struct req_format RQF_MDS_QUOTA_DQACQ = DEFINE_REQ_FMT0("MDS_QUOTA_DQACQ", qunit_data_only, qunit_data_only); EXPORT_SYMBOL(RQF_MDS_QUOTA_DQACQ); -const struct req_format RQF_SEQ_QUERY = - DEFINE_REQ_FMT0("SEQ_QUERY", seq_query_client, seq_query_server); -EXPORT_SYMBOL(RQF_SEQ_QUERY); - -const struct req_format RQF_FLD_QUERY = - DEFINE_REQ_FMT0("FLD_QUERY", fld_query_client, fld_query_server); -EXPORT_SYMBOL(RQF_FLD_QUERY); - const struct req_format RQF_MDS_GETSTATUS = DEFINE_REQ_FMT0("MDS_GETSTATUS", mdt_body_only, mdt_body_capa); EXPORT_SYMBOL(RQF_MDS_GETSTATUS); @@ -1002,11 +1026,11 @@ EXPORT_SYMBOL(RQF_MDS_CONNECT); const struct req_format RQF_MDS_DISCONNECT = DEFINE_REQ_FMT0("MDS_DISCONNECT", empty, empty); EXPORT_SYMBOL(RQF_MDS_DISCONNECT); - + const struct req_format RQF_MDS_SET_INFO = DEFINE_REQ_FMT0("MDS_SET_INFO", mds_set_info_client, empty); EXPORT_SYMBOL(RQF_MDS_SET_INFO); - + const struct req_format RQF_LDLM_ENQUEUE = DEFINE_REQ_FMT0("LDLM_ENQUEUE", ldlm_enqueue_client, ldlm_enqueue_lvb_server); @@ -1182,6 +1206,11 @@ const struct req_format RQF_OST_SET_INFO = DEFINE_REQ_FMT0("OST_SET_INFO", ost_set_info_client, empty); 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); +EXPORT_SYMBOL(RQF_OST_SET_GRANT_INFO); + const struct req_format RQF_OST_GET_INFO_GENERIC = DEFINE_REQ_FMT0("OST_GET_INFO", ost_get_info_generic_client, ost_get_info_generic_server); @@ -1305,7 +1334,7 @@ int req_capsule_filled_sizes(struct req_capsule *pill, for (i = 0; i < fmt->rf_fields[loc].nr; ++i) { if (pill->rc_area[loc][i] == -1) { - pill->rc_area[loc][i] = + pill->rc_area[loc][i] = fmt->rf_fields[loc].d[i]->rmf_size; if (pill->rc_area[loc][i] == -1) { /* skip the following fields */ @@ -1373,8 +1402,11 @@ static void *__req_capsule_get(struct req_capsule *pill, [RCL_SERVER] = "server" }; + LASSERT(pill != NULL); + LASSERT(pill != LP_POISON); fmt = pill->rc_fmt; LASSERT(fmt != NULL); + LASSERT(fmt != LP_POISON); LASSERT(__req_format_is_sane(fmt)); offset = __req_capsule_offset(pill, field, loc); @@ -1472,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);