&RMF_SETINFO_VAL
};
-static const struct req_msg_field *ost_get_info_client[] = {
+static const struct req_msg_field *ost_get_info_generic_server[] = {
+ &RMF_PTLRPC_BODY,
+ &RMF_GENERIC_DATA,
+};
+
+static const struct req_msg_field *ost_get_info_generic_client[] = {
&RMF_PTLRPC_BODY,
&RMF_SETINFO_KEY
};
-static const struct req_msg_field *ost_get_info_server[] = {
+static const struct req_msg_field *ost_get_last_id_server[] = {
&RMF_PTLRPC_BODY,
&RMF_OBD_ID
};
+
static const struct req_format *req_formats[] = {
&RQF_OBD_PING,
&RQF_SEC_CTX,
&RQF_OST_BRW,
&RQF_OST_STATFS,
&RQF_OST_SET_INFO,
- &RQF_OST_GET_INFO,
+ &RQF_OST_GET_INFO_GENERIC,
+ &RQF_OST_GET_INFO_LAST_ID,
&RQF_LDLM_ENQUEUE,
&RQF_LDLM_ENQUEUE_LVB,
&RQF_LDLM_CONVERT,
.rmf_swabber = (void (*)(void*))(swabber) \
}
+const struct req_msg_field RMF_GENERIC_DATA =
+ DEFINE_MSGF("generic_data", 0,
+ -1, NULL);
+EXPORT_SYMBOL(RMF_GENERIC_DATA);
+
const struct req_msg_field RMF_MGS_TARGET_INFO =
DEFINE_MSGF("mgs_target_info", 0,
sizeof(struct mgs_target_info),
DEFINE_REQ_FMT0("OST_SET_INFO", ost_set_info_client, empty);
EXPORT_SYMBOL(RQF_OST_SET_INFO);
-const struct req_format RQF_OST_GET_INFO =
- DEFINE_REQ_FMT0("OST_GET_INFO", ost_get_info_client,
- ost_get_info_server);
-EXPORT_SYMBOL(RQF_OST_GET_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);
+EXPORT_SYMBOL(RQF_OST_GET_INFO_GENERIC);
+
+const struct req_format RQF_OST_GET_INFO_LAST_ID =
+ DEFINE_REQ_FMT0("OST_GET_INFO_LAST_ID", ost_get_info_generic_client,
+ ost_get_last_id_server);
+EXPORT_SYMBOL(RQF_OST_GET_INFO_LAST_ID);
#if !defined(__REQ_LAYOUT_USER__)
}
EXPORT_SYMBOL(req_capsule_get_size);
+int req_capsule_msg_size(const struct req_capsule *pill, enum req_location loc)
+{
+ return lustre_msg_size(pill->rc_req->rq_import->imp_msg_magic,
+ pill->rc_fmt->rf_fields[loc].nr,
+ (int *)pill->rc_area[loc]);
+}
+
+int req_capsule_fmt_size(__u32 magic, const struct req_format *fmt,
+ enum req_location loc)
+{
+ int size, i = 0;
+
+ size = lustre_msg_hdr_size(magic, fmt->rf_fields[loc].nr);
+ if (size < 0)
+ return size;
+
+ for (; i < fmt->rf_fields[loc].nr; ++i)
+ if (fmt->rf_fields[loc].d[i]->rmf_size != -1)
+ size += size_round(fmt->rf_fields[loc].d[i]->rmf_size);
+ return size;
+}
+
#define FMT_FIELD(fmt, i, j) (fmt)->rf_fields[(i)].d[(j)]
void req_capsule_extend(struct req_capsule *pill, const struct req_format *fmt)