From: Jianpeng Ma Date: Thu, 28 Feb 2019 00:43:02 +0000 (+0800) Subject: msg/async V1: No need calc header crc for ProtocolV1. X-Git-Tag: v15.0.0~173^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fed302921e2dbe57eadaa4e3985f88b57b368e64;p=ceph.git msg/async V1: No need calc header crc for ProtocolV1. For ProtocolV1, in fun write_message it update seq of header, so it recalc header crc. Signed-off-by: Jianpeng Ma --- diff --git a/src/msg/Message.cc b/src/msg/Message.cc index caf0f031cdec..a02b8a892ace 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -206,7 +206,7 @@ #define dout_subsys ceph_subsys_ms -void Message::encode(uint64_t features, int crcflags) +void Message::encode(uint64_t features, int crcflags, bool skip_header_crc) { // encode and copy out of *m if (empty_payload()) { @@ -229,7 +229,7 @@ void Message::encode(uint64_t features, int crcflags) header.front_len = get_payload().length(); header.middle_len = get_middle().length(); header.data_len = get_data().length(); - if (crcflags & MSG_CRC_HEADER) + if (!skip_header_crc && (crcflags & MSG_CRC_HEADER)) calc_header_crc(); footer.flags = CEPH_MSG_FOOTER_COMPLETE; diff --git a/src/msg/Message.h b/src/msg/Message.h index 42405ed34113..c6f61b429cf5 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -504,7 +504,7 @@ public: virtual void dump(Formatter *f) const; - void encode(uint64_t features, int crcflags); + void encode(uint64_t features, int crcflags, bool skip_header_crc = false); }; extern Message *decode_message(CephContext *cct, int crcflags, diff --git a/src/msg/async/ProtocolV1.cc b/src/msg/async/ProtocolV1.cc index dac1bbd58401..9ee7a85736ee 100644 --- a/src/msg/async/ProtocolV1.cc +++ b/src/msg/async/ProtocolV1.cc @@ -266,7 +266,9 @@ void ProtocolV1::prepare_send_message(uint64_t features, Message *m, } // encode and copy out of *m - m->encode(features, messenger->crcflags); + // in write_message we update header.seq and need recalc crc + // so skip calc header in encode function. + m->encode(features, messenger->crcflags, true); bl.append(m->get_payload()); bl.append(m->get_middle());