Whamcloud - gitweb
LU-6284 ptlrpc: comment for FLD_QUERY RPC reply swab
[fs/lustre-release.git] / lustre / ptlrpc / layout.c
index 575f4c8..37a4474 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2014, Intel Corporation.
+ * Copyright (c) 2011, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
 
 #include <linux/module.h>
 
-/* LUSTRE_VERSION_CODE */
-#include <lustre_ver.h>
-
-#include <obd_support.h>
-/* lustre_swab_mdt_body */
 #include <lustre/lustre_idl.h>
-/* obd2cli_tgt() (required by DEBUG_REQ()) */
-#include <obd.h>
+
+#include <llog_swab.h>
 #include <lustre_debug.h>
+#include <lustre_swab.h>
+#include <lustre_ver.h>
+#include <obd.h>
+#include <obd_support.h>
 #endif /* !__REQ_LAYOUT_USER__ */
 
 /* struct ptlrpc_request, lustre_msg* */
@@ -216,31 +215,37 @@ static const struct req_msg_field *mds_reint_create_slave_client[] = {
         &RMF_DLM_REQ
 };
 
-static const struct req_msg_field *mds_reint_create_rmt_acl_client[] = {
-        &RMF_PTLRPC_BODY,
-        &RMF_REC_REINT,
-        &RMF_CAPA1,
-        &RMF_NAME,
-        &RMF_EADATA,
-        &RMF_DLM_REQ
+static const struct req_msg_field *mds_reint_create_acl_client[] = {
+       &RMF_PTLRPC_BODY,
+       &RMF_REC_REINT,
+       &RMF_CAPA1,
+       &RMF_NAME,
+       &RMF_EADATA,
+       &RMF_DLM_REQ,
+       &RMF_FILE_SECCTX_NAME,
+       &RMF_FILE_SECCTX
 };
 
 static const struct req_msg_field *mds_reint_create_sym_client[] = {
-        &RMF_PTLRPC_BODY,
-        &RMF_REC_REINT,
-        &RMF_CAPA1,
-        &RMF_NAME,
-        &RMF_SYMTGT,
-        &RMF_DLM_REQ
+       &RMF_PTLRPC_BODY,
+       &RMF_REC_REINT,
+       &RMF_CAPA1,
+       &RMF_NAME,
+       &RMF_SYMTGT,
+       &RMF_DLM_REQ,
+       &RMF_FILE_SECCTX_NAME,
+       &RMF_FILE_SECCTX
 };
 
 static const struct req_msg_field *mds_reint_open_client[] = {
-        &RMF_PTLRPC_BODY,
-        &RMF_REC_REINT,
-        &RMF_CAPA1,
-        &RMF_CAPA2,
-        &RMF_NAME,
-        &RMF_EADATA
+       &RMF_PTLRPC_BODY,
+       &RMF_REC_REINT,
+       &RMF_CAPA1,
+       &RMF_CAPA2,
+       &RMF_NAME,
+       &RMF_EADATA,
+       &RMF_FILE_SECCTX_NAME,
+       &RMF_FILE_SECCTX
 };
 
 static const struct req_msg_field *mds_reint_open_server[] = {
@@ -279,6 +284,18 @@ static const struct req_msg_field *mds_reint_rename_client[] = {
         &RMF_DLM_REQ
 };
 
+static const struct req_msg_field *mds_reint_migrate_client[] = {
+       &RMF_PTLRPC_BODY,
+       &RMF_REC_REINT,
+       &RMF_CAPA1,
+       &RMF_CAPA2,
+       &RMF_NAME,
+       &RMF_SYMTGT,
+       &RMF_DLM_REQ,
+       &RMF_MDT_EPOCH,
+       &RMF_CLOSE_DATA
+};
+
 static const struct req_msg_field *mds_last_unlink_server[] = {
         &RMF_PTLRPC_BODY,
         &RMF_MDT_BODY,
@@ -442,24 +459,28 @@ static const struct req_msg_field *ldlm_intent_getattr_server[] = {
 };
 
 static const struct req_msg_field *ldlm_intent_create_client[] = {
-        &RMF_PTLRPC_BODY,
-        &RMF_DLM_REQ,
-        &RMF_LDLM_INTENT,
-        &RMF_REC_REINT,    /* coincides with mds_reint_create_client[] */
-        &RMF_CAPA1,
-        &RMF_NAME,
-        &RMF_EADATA
+       &RMF_PTLRPC_BODY,
+       &RMF_DLM_REQ,
+       &RMF_LDLM_INTENT,
+       &RMF_REC_REINT,    /* coincides with mds_reint_create_client[] */
+       &RMF_CAPA1,
+       &RMF_NAME,
+       &RMF_EADATA,
+       &RMF_FILE_SECCTX_NAME,
+       &RMF_FILE_SECCTX
 };
 
 static const struct req_msg_field *ldlm_intent_open_client[] = {
-        &RMF_PTLRPC_BODY,
-        &RMF_DLM_REQ,
-        &RMF_LDLM_INTENT,
-        &RMF_REC_REINT,    /* coincides with mds_reint_open_client[] */
-        &RMF_CAPA1,
-        &RMF_CAPA2,
-        &RMF_NAME,
-        &RMF_EADATA
+       &RMF_PTLRPC_BODY,
+       &RMF_DLM_REQ,
+       &RMF_LDLM_INTENT,
+       &RMF_REC_REINT,    /* coincides with mds_reint_open_client[] */
+       &RMF_CAPA1,
+       &RMF_CAPA2,
+       &RMF_NAME,
+       &RMF_EADATA,
+       &RMF_FILE_SECCTX_NAME,
+       &RMF_FILE_SECCTX
 };
 
 static const struct req_msg_field *ldlm_intent_unlink_client[] = {
@@ -490,6 +511,12 @@ static const struct req_msg_field *ldlm_intent_getxattr_server[] = {
        &RMF_EAVALS_LENS
 };
 
+static const struct req_msg_field *mds_get_root_client[] = {
+       &RMF_PTLRPC_BODY,
+       &RMF_MDT_BODY,
+       &RMF_NAME
+};
+
 static const struct req_msg_field *mds_getxattr_client[] = {
         &RMF_PTLRPC_BODY,
         &RMF_MDT_BODY,
@@ -640,6 +667,13 @@ static const struct req_msg_field *ost_get_fiemap_client[] = {
         &RMF_FIEMAP_VAL
 };
 
+static const struct req_msg_field *ost_ladvise[] = {
+       &RMF_PTLRPC_BODY,
+       &RMF_OST_BODY,
+       &RMF_OST_LADVISE_HDR,
+       &RMF_OST_LADVISE,
+};
+
 static const struct req_msg_field *ost_get_fiemap_server[] = {
         &RMF_PTLRPC_BODY,
         &RMF_FIEMAP_VAL
@@ -713,7 +747,7 @@ static struct req_format *req_formats[] = {
         &RQF_MDS_CONNECT,
         &RQF_MDS_DISCONNECT,
         &RQF_MDS_GET_INFO,
-        &RQF_MDS_GETSTATUS,
+       &RQF_MDS_GET_ROOT,
         &RQF_MDS_STATFS,
         &RQF_MDS_GETATTR,
         &RQF_MDS_GETATTR_NAME,
@@ -721,16 +755,17 @@ static struct req_format *req_formats[] = {
         &RQF_MDS_SYNC,
         &RQF_MDS_CLOSE,
        &RQF_MDS_INTENT_CLOSE,
-        &RQF_MDS_READPAGE,
-        &RQF_MDS_REINT,
-        &RQF_MDS_REINT_CREATE,
-        &RQF_MDS_REINT_CREATE_RMT_ACL,
+       &RQF_MDS_READPAGE,
+       &RQF_MDS_REINT,
+       &RQF_MDS_REINT_CREATE,
+       &RQF_MDS_REINT_CREATE_ACL,
         &RQF_MDS_REINT_CREATE_SLAVE,
         &RQF_MDS_REINT_CREATE_SYM,
         &RQF_MDS_REINT_OPEN,
         &RQF_MDS_REINT_UNLINK,
         &RQF_MDS_REINT_LINK,
         &RQF_MDS_REINT_RENAME,
+       &RQF_MDS_REINT_MIGRATE,
         &RQF_MDS_REINT_SETATTR,
         &RQF_MDS_REINT_SETXATTR,
         &RQF_MDS_QUOTACTL,
@@ -760,12 +795,13 @@ static struct req_format *req_formats[] = {
         &RQF_OST_GET_INFO_LAST_ID,
        &RQF_OST_GET_INFO_LAST_FID,
        &RQF_OST_SET_INFO_LAST_FID,
-        &RQF_OST_GET_INFO_FIEMAP,
-        &RQF_LDLM_ENQUEUE,
-        &RQF_LDLM_ENQUEUE_LVB,
-        &RQF_LDLM_CONVERT,
-        &RQF_LDLM_CANCEL,
-        &RQF_LDLM_CALLBACK,
+       &RQF_OST_GET_INFO_FIEMAP,
+       &RQF_OST_LADVISE,
+       &RQF_LDLM_ENQUEUE,
+       &RQF_LDLM_ENQUEUE_LVB,
+       &RQF_LDLM_CONVERT,
+       &RQF_LDLM_CANCEL,
+       &RQF_LDLM_CALLBACK,
         &RQF_LDLM_CP_CALLBACK,
         &RQF_LDLM_BL_CALLBACK,
         &RQF_LDLM_GL_CALLBACK,
@@ -971,6 +1007,14 @@ struct req_msg_field RMF_STRING =
         DEFINE_MSGF("string", RMF_F_STRING, -1, NULL, NULL);
 EXPORT_SYMBOL(RMF_STRING);
 
+struct req_msg_field RMF_FILE_SECCTX_NAME =
+       DEFINE_MSGF("file_secctx_name", RMF_F_STRING, -1, NULL, NULL);
+EXPORT_SYMBOL(RMF_FILE_SECCTX_NAME);
+
+struct req_msg_field RMF_FILE_SECCTX =
+       DEFINE_MSGF("file_secctx", 0, -1, NULL, NULL);
+EXPORT_SYMBOL(RMF_FILE_SECCTX);
+
 struct req_msg_field RMF_LLOGD_BODY =
         DEFINE_MSGF("llogd_body", 0,
                     sizeof(struct llogd_body), lustre_swab_llogd_body, NULL);
@@ -1077,8 +1121,9 @@ EXPORT_SYMBOL(RMF_LAYOUT_INTENT);
  * OST request field.
  */
 struct req_msg_field RMF_OST_BODY =
-        DEFINE_MSGF("ost_body", 0,
-                    sizeof(struct ost_body), lustre_swab_ost_body, dump_ost_body);
+       DEFINE_MSGF("ost_body", 0,
+                   sizeof(struct ost_body), lustre_swab_ost_body,
+                   dump_ost_body);
 EXPORT_SYMBOL(RMF_OST_BODY);
 
 struct req_msg_field RMF_OBD_IOOBJ =
@@ -1190,9 +1235,20 @@ struct req_msg_field RMF_LFSCK_REPLY =
                    lustre_swab_lfsck_reply, NULL);
 EXPORT_SYMBOL(RMF_LFSCK_REPLY);
 
-struct req_msg_field RMF_OUT_UPDATE_HEADER = DEFINE_MSGF("out_update", 0,
-                               sizeof(struct out_update_header),
-                               lustre_swab_out_update_header, NULL);
+struct req_msg_field RMF_OST_LADVISE_HDR =
+       DEFINE_MSGF("ladvise_request", 0,
+                   sizeof(struct ladvise_hdr),
+                   lustre_swab_ladvise_hdr, NULL);
+EXPORT_SYMBOL(RMF_OST_LADVISE_HDR);
+
+struct req_msg_field RMF_OST_LADVISE =
+       DEFINE_MSGF("ladvise_request", RMF_F_STRUCT_ARRAY,
+                   sizeof(struct lu_ladvise),
+                   lustre_swab_ladvise, NULL);
+EXPORT_SYMBOL(RMF_OST_LADVISE);
+
+struct req_msg_field RMF_OUT_UPDATE_HEADER = DEFINE_MSGF("out_update_header", 0,
+                               -1, lustre_swab_out_update_header, NULL);
 EXPORT_SYMBOL(RMF_OUT_UPDATE_HEADER);
 
 struct req_msg_field RMF_OUT_UPDATE_BUF = DEFINE_MSGF("update_buf",
@@ -1271,6 +1327,21 @@ struct req_format RQF_FLD_QUERY =
         DEFINE_REQ_FMT0("FLD_QUERY", fld_query_client, fld_query_server);
 EXPORT_SYMBOL(RQF_FLD_QUERY);
 
+/* The 'fld_read_server' uses 'RMF_GENERIC_DATA' to hold the 'FLD_QUERY'
+ * RPC reply that is composed of 'struct lu_seq_range_array'. But there
+ * is not registered swabber function for 'RMF_GENERIC_DATA'. So the RPC
+ * peers need to handle the RPC reply with fixed little-endian format.
+ *
+ * In theory, we can define new structure with some swabber registered to
+ * handle the 'FLD_QUERY' RPC reply result automatically. But from the
+ * implementation view, it is not easy to be done within current "struct
+ * req_msg_field" framework. Because the sequence range array in the RPC
+ * reply is not fixed length, instead, its length depends on 'lu_seq_range'
+ * count, that is unknown when prepare the RPC buffer. Generally, for such
+ * flexible length RPC usage, there will be a field in the RPC layout to
+ * indicate the data length. But for the 'FLD_READ' RPC, we have no way to
+ * do that unless we add new length filed that will broken the on-wire RPC
+ * protocol and cause interoperability trouble with old peer. */
 struct req_format RQF_FLD_READ =
        DEFINE_REQ_FMT0("FLD_READ", fld_read_client, fld_read_server);
 EXPORT_SYMBOL(RQF_FLD_READ);
@@ -1297,9 +1368,9 @@ struct req_format RQF_LDLM_INTENT_QUOTA =
                        ldlm_intent_quota_server);
 EXPORT_SYMBOL(RQF_LDLM_INTENT_QUOTA);
 
-struct req_format RQF_MDS_GETSTATUS =
-        DEFINE_REQ_FMT0("MDS_GETSTATUS", mdt_body_only, mdt_body_capa);
-EXPORT_SYMBOL(RQF_MDS_GETSTATUS);
+struct req_format RQF_MDS_GET_ROOT =
+       DEFINE_REQ_FMT0("MDS_GET_ROOT", mds_get_root_client, mdt_body_capa);
+EXPORT_SYMBOL(RQF_MDS_GET_ROOT);
 
 struct req_format RQF_MDS_STATFS =
         DEFINE_REQ_FMT0("MDS_STATFS", empty, obd_statfs_server);
@@ -1332,10 +1403,10 @@ struct req_format RQF_MDS_REINT_CREATE =
                         mds_reint_create_client, mdt_body_capa);
 EXPORT_SYMBOL(RQF_MDS_REINT_CREATE);
 
-struct req_format RQF_MDS_REINT_CREATE_RMT_ACL =
-        DEFINE_REQ_FMT0("MDS_REINT_CREATE_RMT_ACL",
-                        mds_reint_create_rmt_acl_client, mdt_body_capa);
-EXPORT_SYMBOL(RQF_MDS_REINT_CREATE_RMT_ACL);
+struct req_format RQF_MDS_REINT_CREATE_ACL =
+       DEFINE_REQ_FMT0("MDS_REINT_CREATE_ACL",
+                       mds_reint_create_acl_client, mdt_body_capa);
+EXPORT_SYMBOL(RQF_MDS_REINT_CREATE_ACL);
 
 struct req_format RQF_MDS_REINT_CREATE_SLAVE =
         DEFINE_REQ_FMT0("MDS_REINT_CREATE_EA",
@@ -1367,6 +1438,11 @@ struct req_format RQF_MDS_REINT_RENAME =
                         mds_last_unlink_server);
 EXPORT_SYMBOL(RQF_MDS_REINT_RENAME);
 
+struct req_format RQF_MDS_REINT_MIGRATE =
+       DEFINE_REQ_FMT0("MDS_REINT_MIGRATE", mds_reint_migrate_client,
+                       mds_last_unlink_server);
+EXPORT_SYMBOL(RQF_MDS_REINT_MIGRATE);
+
 struct req_format RQF_MDS_REINT_SETATTR =
         DEFINE_REQ_FMT0("MDS_REINT_SETATTR",
                         mds_reint_setattr_client, mds_setattr_server);
@@ -1643,6 +1719,10 @@ struct req_format RQF_LFSCK_QUERY =
        DEFINE_REQ_FMT0("LFSCK_QUERY", obd_lfsck_request, obd_lfsck_reply);
 EXPORT_SYMBOL(RQF_LFSCK_QUERY);
 
+struct req_format RQF_OST_LADVISE =
+       DEFINE_REQ_FMT0("OST_LADVISE", ost_ladvise, ost_body_only);
+EXPORT_SYMBOL(RQF_OST_LADVISE);
+
 #if !defined(__REQ_LAYOUT_USER__)
 
 /* Convenience macro */