From: Yan, Zheng Date: Mon, 1 Feb 2016 14:17:04 +0000 (+0800) Subject: mds: don't break compatibility of MClientCaps/MClientReply X-Git-Tag: v10.1.0~241^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a2d42d5572d9e1fe694740505e87c9a203df302b;p=ceph.git mds: don't break compatibility of MClientCaps/MClientReply Signed-off-by: Yan, Zheng --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index cd247cb14a63..2d38247ad805 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -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; } diff --git a/src/messages/MClientCaps.h b/src/messages/MClientCaps.h index f668ea73097a..837853dca7cc 100644 --- a/src/messages/MClientCaps.h +++ b/src/messages/MClientCaps.h @@ -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); } }; diff --git a/src/messages/MClientReply.h b/src/messages/MClientReply.h index e723557fd3b3..81e1cf2bf4ed 100644 --- a/src/messages/MClientReply.h +++ b/src/messages/MClientReply.h @@ -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("a, 0, sizeof(quota)); + + if ((features & CEPH_FEATURE_FS_FILE_LAYOUT_V2)) + ::decode(layout.pool_ns, p); } // see CInode::encode_inodestat for encoder.