MGS_FIRST_OPC = MGS_CONNECT
};
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+#define MGS_PARAM_MAXLEN 1024
+#define KEY_SET_INFO "set_info"
+
+struct mgs_send_param {
+ char mgs_param[MGS_PARAM_MAXLEN];
+};
+#endif
+
/* We pass this info to the MGS so it can write config logs */
#define MTI_NAME_MAXLEN 64
#define MTI_PARAM_MAXLEN 4096
return strncmp(str, prefix, strlen(prefix)) == 0;
}
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+static int mgs_set_info(struct tgt_session_info *tsi)
+{
+ struct mgs_thread_info *mgi;
+ struct mgs_send_param *msp;
+ size_t param_len;
+ char *s;
+
+ ENTRY;
+
+ mgi = mgs_env_info(tsi->tsi_env);
+ if (IS_ERR(mgi))
+ RETURN(err_serious(PTR_ERR(mgi)));
+
+ msp = req_capsule_client_get(tsi->tsi_pill, &RMF_MGS_SEND_PARAM);
+ if (msp == NULL)
+ RETURN(err_serious(-EFAULT));
+
+ param_len = strnlen(msp->mgs_param, sizeof(msp->mgs_param));
+ if (param_len == 0 || param_len == sizeof(msp->mgs_param))
+ RETURN(-EINVAL);
+
+ /* We only allow '*.lov.stripe{size,count,offset}=*' from an RPC. */
+ s = strchr(msp->mgs_param, '.');
+ if (s == NULL)
+ RETURN(-EINVAL);
+
+ if (!str_starts_with(s + 1, "lov.stripesize=") &&
+ !str_starts_with(s + 1, "lov.stripecount=") &&
+ !str_starts_with(s + 1, "lov.stripeoffset="))
+ RETURN(-EINVAL);
+
+ /* do nothing */
+ CDEBUG(D_MGS, "%s: ignoring set info '%s'\n",
+ tgt_name(tsi->tsi_tgt), msp->mgs_param);
+ RETURN(0);
+}
+#endif
+
enum ast_type {
AST_CONFIG = 1,
AST_PARAMS = 2,
0, MGS_DISCONNECT, mgs_disconnect,
&RQF_MDS_DISCONNECT, LUSTRE_OBD_VERSION),
TGT_MGS_HDL_VAR(0, MGS_EXCEPTION, mgs_exception),
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+TGT_MGS_HDL(HAS_REPLY | IS_MUTABLE, MGS_SET_INFO, mgs_set_info),
+#endif
TGT_MGS_HDL(HAS_REPLY | IS_MUTABLE, MGS_TARGET_REG, mgs_target_reg),
TGT_MGS_HDL_VAR(0, MGS_TARGET_DEL, mgs_target_del),
TGT_MGS_HDL(HAS_REPLY, MGS_CONFIG_READ, mgs_config_read),
&RMF_MGS_TARGET_INFO
};
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+static const struct req_msg_field *mgs_set_info[] = {
+ &RMF_PTLRPC_BODY,
+ &RMF_MGS_SEND_PARAM
+};
+#endif
+
static const struct req_msg_field *mgs_config_read_client[] = {
&RMF_PTLRPC_BODY,
&RMF_MGS_CONFIG_BODY
&RQF_OBD_IDX_READ,
&RQF_SEC_CTX,
&RQF_MGS_TARGET_REG,
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+ &RQF_MGS_SET_INFO,
+#endif
&RQF_MGS_CONFIG_READ,
&RQF_SEQ_QUERY,
&RQF_FLD_QUERY,
lustre_swab_mgs_target_info, NULL);
EXPORT_SYMBOL(RMF_MGS_TARGET_INFO);
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+struct req_msg_field RMF_MGS_SEND_PARAM =
+ DEFINE_MSGF("mgs_send_param", 0,
+ sizeof(struct mgs_send_param),
+ NULL, NULL);
+EXPORT_SYMBOL(RMF_MGS_SEND_PARAM);
+#endif
+
struct req_msg_field RMF_MGS_CONFIG_BODY =
DEFINE_MSGF("mgs_config_read request", 0,
sizeof(struct mgs_config_body),
mgs_target_info_only);
EXPORT_SYMBOL(RQF_MGS_TARGET_REG);
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+struct req_format RQF_MGS_SET_INFO =
+ DEFINE_REQ_FMT0("MGS_SET_INFO", mgs_set_info,
+ mgs_set_info);
+EXPORT_SYMBOL(RQF_MGS_SET_INFO);
+#endif
+
struct req_format RQF_MGS_CONFIG_READ =
DEFINE_REQ_FMT0("MGS_CONFIG_READ", mgs_config_read_client,
mgs_config_read_server);
LASSERTF((int)sizeof(((struct barrier_lvb *)0)->lvb_padding) == 8, "found %lld\n",
(long long)(int)sizeof(((struct barrier_lvb *)0)->lvb_padding));
+ /* Checks for struct mgs_send_param */
+ LASSERTF((int)sizeof(struct mgs_send_param) == 1024, "found %lld\n",
+ (long long)(int)sizeof(struct mgs_send_param));
+ BUILD_BUG_ON(MGS_PARAM_MAXLEN != 1024);
+ LASSERTF((int)offsetof(struct mgs_send_param, mgs_param[1024]) == 1024, "found %lld\n",
+ (long long)(int)offsetof(struct mgs_send_param, mgs_param[1024]));
+ LASSERTF((int)sizeof(((struct mgs_send_param *)0)->mgs_param[1024]) == 1, "found %lld\n",
+ (long long)(int)sizeof(((struct mgs_send_param *)0)->mgs_param[1024]));
+
/* Checks for struct cfg_marker */
LASSERTF((int)sizeof(struct cfg_marker) == 160, "found %lld\n",
(long long)(int)sizeof(struct cfg_marker));
CHECK_MEMBER(barrier_lvb, lvb_padding);
}
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+static void
+check_mgs_send_param(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(mgs_send_param);
+ CHECK_CVALUE(MGS_PARAM_MAXLEN);
+ CHECK_MEMBER(mgs_send_param, mgs_param[MGS_PARAM_MAXLEN]);
+}
+#endif
+
static void
check_cfg_marker(void)
{
check_ldlm_gl_lquota_desc();
check_ldlm_gl_barrier_desc();
check_ldlm_barrier_lvb();
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)
+ check_mgs_send_param();
+#endif
check_cfg_marker();
check_llog_logid();
check_llog_catid();
LASSERTF((int)sizeof(((struct barrier_lvb *)0)->lvb_padding) == 8, "found %lld\n",
(long long)(int)sizeof(((struct barrier_lvb *)0)->lvb_padding));
+ /* Checks for struct mgs_send_param */
+ LASSERTF((int)sizeof(struct mgs_send_param) == 1024, "found %lld\n",
+ (long long)(int)sizeof(struct mgs_send_param));
+ BUILD_BUG_ON(MGS_PARAM_MAXLEN != 1024);
+ LASSERTF((int)offsetof(struct mgs_send_param, mgs_param[1024]) == 1024, "found %lld\n",
+ (long long)(int)offsetof(struct mgs_send_param, mgs_param[1024]));
+ LASSERTF((int)sizeof(((struct mgs_send_param *)0)->mgs_param[1024]) == 1, "found %lld\n",
+ (long long)(int)sizeof(((struct mgs_send_param *)0)->mgs_param[1024]));
+
/* Checks for struct cfg_marker */
LASSERTF((int)sizeof(struct cfg_marker) == 160, "found %lld\n",
(long long)(int)sizeof(struct cfg_marker));