]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: don't break compatibility of MClientCaps/MClientReply
authorYan, Zheng <zyan@redhat.com>
Mon, 1 Feb 2016 14:17:04 +0000 (22:17 +0800)
committerSage Weil <sage@redhat.com>
Tue, 1 Mar 2016 16:18:17 +0000 (11:18 -0500)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/CInode.cc
src/messages/MClientCaps.h
src/messages/MClientReply.h

index cd247cb14a63cef8032c83545ab849b3d7721b14..2d38247ad805d2e6dac3b001317405e07bb4e9d3 100644 (file)
@@ -3282,8 +3282,11 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
   ::encode(xattr_version, bl);
 
   ::encode(ecap, bl);
-
-  ::encode(layout, bl, session->connection->get_features());
+  {
+    ceph_file_layout legacy_layout;
+    layout.to_legacy(&legacy_layout);
+    ::encode(legacy_layout, bl);
+  }
   ::encode(any_i->ctime, bl);
   ::encode(file_i->mtime, bl);
   ::encode(file_i->atime, bl);
@@ -3321,6 +3324,9 @@ int CInode::encode_inodestat(bufferlist& bl, Session *session,
     inode_t *policy_i = ppolicy ? pi : oi;
     ::encode(policy_i->quota, bl);
   }
+  if (session->connection->has_feature(CEPH_FEATURE_FS_FILE_LAYOUT_V2)) {
+    ::encode(layout.pool_ns, bl);
+  }
 
   return valid;
 }
index f668ea73097aaee521d5846b351fada9dc3beaee..837853dca7cc5095ceb5bdd443ca26deff24a73c 100644 (file)
@@ -190,35 +190,19 @@ public:
   void decode_payload() {
     bufferlist::iterator p = payload.begin();
     ::decode(head, p);
-    if (header.version < 8) {
-      ceph_mds_caps_body_legacy body;
-      ::decode(body, p);
-      if (head.op == CEPH_CAP_OP_EXPORT) {
-       peer = body.peer;
-      } else {
-       size = body.size;
-       max_size = body.max_size;
-       truncate_size = body.truncate_size;
-       mtime = utime_t(body.mtime);
-       atime = utime_t(body.atime);
-       ctime = utime_t(body.ctime);
-       layout.from_legacy(body.layout);
-       time_warp_seq = body.time_warp_seq;
-      }
+    ceph_mds_caps_body_legacy body;
+    ::decode(body, p);
+    if (head.op == CEPH_CAP_OP_EXPORT) {
+      peer = body.peer;
     } else {
-      if (head.op == CEPH_CAP_OP_EXPORT) {
-       ::decode(peer, p);
-      } else {
-       ::decode(size, p);
-       ::decode(max_size, p);
-       ::decode(truncate_size, p);
-       ::decode(truncate_seq, p);
-       ::decode(mtime, p);
-       ::decode(atime, p);
-       ::decode(ctime, p);
-       ::decode(layout, p);
-       ::decode(time_warp_seq, p);
-      }
+      size = body.size;
+      max_size = body.max_size;
+      truncate_size = body.truncate_size;
+      mtime = utime_t(body.mtime);
+      atime = utime_t(body.atime);
+      ctime = utime_t(body.ctime);
+      layout.from_legacy(body.layout);
+      time_warp_seq = body.time_warp_seq;
     }
     ::decode_nohead(head.snap_trace_len, snapbl, p);
 
@@ -252,6 +236,9 @@ public:
       ::decode(caller_uid, p);
       ::decode(caller_gid, p);
     }
+    if (header.version >= 8) {
+      ::decode(layout.pool_ns, p);
+    }
   }
   void encode_payload(uint64_t features) {
     header.version = HEAD_VERSION;
@@ -259,38 +246,21 @@ public:
     head.xattr_len = xattrbl.length();
 
     ::encode(head, payload);
-    if (features & CEPH_FEATURE_FS_FILE_LAYOUT_V2) {
-      if (head.op == CEPH_CAP_OP_EXPORT) {
-       ::encode(peer, payload);
-      } else {
-       ::encode(size, payload);
-       ::encode(max_size, payload);
-       ::encode(truncate_size, payload);
-       ::encode(truncate_seq, payload);
-       ::encode(mtime, payload);
-       ::encode(atime, payload);
-       ::encode(ctime, payload);
-       ::encode(layout, payload, features);
-       ::encode(time_warp_seq, payload);
-      }
+    ceph_mds_caps_body_legacy body;
+    if (head.op == CEPH_CAP_OP_EXPORT) {
+      body.peer = peer;
     } else {
-      header.version = 7;
-      ceph_mds_caps_body_legacy body;
-      if (head.op == CEPH_CAP_OP_EXPORT) {
-       body.peer = peer;
-      } else {
-       body.size = size;
-       body.max_size = max_size;
-       body.truncate_size = truncate_size;
-       body.truncate_seq = truncate_seq;
-       mtime.encode_timeval(&body.mtime);
-       atime.encode_timeval(&body.atime);
-       ctime.encode_timeval(&body.ctime);
-       layout.to_legacy(&body.layout);
-       body.time_warp_seq = time_warp_seq;
-      }
-      ::encode(body, payload);
+      body.size = size;
+      body.max_size = max_size;
+      body.truncate_size = truncate_size;
+      body.truncate_seq = truncate_seq;
+      mtime.encode_timeval(&body.mtime);
+      atime.encode_timeval(&body.atime);
+      ctime.encode_timeval(&body.ctime);
+      layout.to_legacy(&body.layout);
+      body.time_warp_seq = time_warp_seq;
     }
+    ::encode(body, payload);
     ::encode_nohead(snapbl, payload);
 
     middle = xattrbl;
@@ -323,6 +293,8 @@ public:
     ::encode(oldest_flush_tid, payload);
     ::encode(caller_uid, payload);
     ::encode(caller_gid, payload);
+
+    ::encode(layout.pool_ns, payload);
   }
 };
 
index e723557fd3b36b01d119613f72a0f02dc6c59451..81e1cf2bf4ed6a52ed18e4110375308feff6d56e 100644 (file)
@@ -136,7 +136,11 @@ struct InodeStat {
     ::decode(version, p);
     ::decode(xattr_version, p);
     ::decode(cap, p);
-    ::decode(layout, p);
+    {
+      ceph_file_layout legacy_layout;
+      ::decode(legacy_layout, p);
+      layout.from_legacy(legacy_layout);
+    }
     ::decode(ctime, p);
     ::decode(mtime, p);
     ::decode(atime, p);
@@ -178,6 +182,9 @@ struct InodeStat {
       ::decode(quota, p);
     else
       memset(&quota, 0, sizeof(quota));
+
+    if ((features & CEPH_FEATURE_FS_FILE_LAYOUT_V2))
+      ::decode(layout.pool_ns, p);
   }
   
   // see CInode::encode_inodestat for encoder.