Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / ptlrpc / layout.c
index cfdf171..32f3427 100644 (file)
@@ -475,15 +475,21 @@ static const struct req_msg_field *ost_set_info_client[] = {
         &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,
@@ -534,7 +540,8 @@ static const struct req_format *req_formats[] = {
         &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,
@@ -585,6 +592,11 @@ struct req_capsule;
         .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),
@@ -1136,10 +1148,15 @@ 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_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__)
@@ -1435,6 +1452,28 @@ int req_capsule_get_size(const struct req_capsule *pill,
 }
 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)