Whamcloud - gitweb
land clio.
[fs/lustre-release.git] / lustre / ptlrpc / layout.c
index 531ef12..f975d74 100644 (file)
@@ -781,7 +781,7 @@ 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 = 
+const struct req_msg_field RMF_ACL =
         DEFINE_MSGF("acl", 0, LUSTRE_POSIX_ACL_MAX_SIZE, NULL);
 EXPORT_SYMBOL(RMF_ACL);
 
@@ -799,7 +799,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,11 +863,11 @@ 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);
@@ -1002,11 +1002,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);
@@ -1305,7 +1305,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 */
@@ -1351,7 +1351,7 @@ static int __req_capsule_offset(const struct req_capsule *pill,
                             pill->rc_fmt->rf_name,
                             field->rmf_name, offset, loc);
         offset --;
-        LASSERT(0 <= offset && offset < REQ_MAX_FIELD_NR);
+        LASSERT(0 <= offset && offset < (sizeof(pill->rc_swabbed) << 3));
         return offset;
 }
 
@@ -1365,7 +1365,6 @@ static void *__req_capsule_get(struct req_capsule *pill,
         void                    *value;
         int                      len;
         int                      offset;
-        int                      inout = loc == RCL_CLIENT;
 
         void *(*getter)(struct lustre_msg *m, int n, int minlen);
 
@@ -1396,12 +1395,12 @@ static void *__req_capsule_get(struct req_capsule *pill,
         value = getter(msg, offset, len);
 
         swabber = swabber ?: field->rmf_swabber;
-        if (ptlrpc_req_need_swab(pill->rc_req, inout, offset) &&
-            swabber != NULL && value != NULL) {
+        if (!(pill->rc_swabbed & (1 << offset)) && loc != pill->rc_loc &&
+            swabber != NULL && value != NULL &&
+            lustre_msg_swabbed(msg)) {
                 swabber(value);
-                ptlrpc_req_set_swabbed(pill->rc_req, inout, offset);
+                pill->rc_swabbed |= (1 << offset);
         }
-
         if (value == NULL) {
                 DEBUG_REQ(D_ERROR, pill->rc_req,
                           "Wrong buffer for field `%s' (%d of %d) "
@@ -1545,6 +1544,7 @@ void req_capsule_extend(struct req_capsule *pill, const struct req_format *fmt)
                         FMT_FIELD(old, i, j)->rmf_size);
         }
         /* last field should be returned to the unswabbed state */
+        pill->rc_swabbed &= ~(__u32)(1 << j);
         pill->rc_fmt = fmt;
 }
 EXPORT_SYMBOL(req_capsule_extend);