@@ -152,16 +152,18 @@ ceph::bufferlist CircularJournalSpace::encode_header()
152152{
153153 bufferlist bl;
154154 encode (header, bl);
155- auto header_crc_filler = bl.append_hole (sizeof (checksum_t ));
156- auto bliter = bl.cbegin ();
157- auto header_crc = bliter.crc32c (
158- ceph::encoded_sizeof_bounded<cbj_header_t >(),
159- -1 );
160- ceph_le32 header_crc_le;
161- header_crc_le = header_crc;
162- header_crc_filler.copy_in (
163- sizeof (checksum_t ),
164- reinterpret_cast <const char *>(&header_crc_le));
155+ if (!device->is_end_to_end_data_protection ()) {
156+ auto header_crc_filler = bl.append_hole (sizeof (checksum_t ));
157+ auto bliter = bl.cbegin ();
158+ auto header_crc = bliter.crc32c (
159+ ceph::encoded_sizeof_bounded<cbj_header_t >(),
160+ -1 );
161+ ceph_le32 header_crc_le;
162+ header_crc_le = header_crc;
163+ header_crc_filler.copy_in (
164+ sizeof (checksum_t ),
165+ reinterpret_cast <const char *>(&header_crc_le));
166+ }
165167 return bl;
166168}
167169
@@ -193,7 +195,7 @@ CircularJournalSpace::read_header()
193195 device->get_block_size ()));
194196 DEBUG (" reading {}" , device->get_shard_journal_start ());
195197 return device->read (device->get_shard_journal_start (), bptr
196- ).safe_then ([bptr, FNAME]() mutable
198+ ).safe_then ([bptr, FNAME, this ]() mutable
197199 -> read_header_ret {
198200 bufferlist bl;
199201 bl.append (bptr);
@@ -205,18 +207,20 @@ CircularJournalSpace::read_header()
205207 ERROR (" unable to read header block" );
206208 return crimson::ct_error::enoent::make ();
207209 }
208- auto bliter = bl.cbegin ();
209- auto test_crc = bliter.crc32c (
210- ceph::encoded_sizeof_bounded<cbj_header_t >(),
211- -1 );
212- ceph_le32 recorded_crc_le;
213- decode (recorded_crc_le, bliter);
214- uint32_t recorded_crc = recorded_crc_le;
215- if (test_crc != recorded_crc) {
216- ERROR (" error, header crc mismatch." );
217- return read_header_ret (
218- read_header_ertr::ready_future_marker{},
219- std::nullopt );
210+ if (!device->is_end_to_end_data_protection ()) {
211+ auto bliter = bl.cbegin ();
212+ auto test_crc = bliter.crc32c (
213+ ceph::encoded_sizeof_bounded<cbj_header_t >(),
214+ -1 );
215+ ceph_le32 recorded_crc_le;
216+ decode (recorded_crc_le, bliter);
217+ uint32_t recorded_crc = recorded_crc_le;
218+ if (test_crc != recorded_crc) {
219+ ERROR (" error, header crc mismatch." );
220+ return read_header_ret (
221+ read_header_ertr::ready_future_marker{},
222+ std::nullopt );
223+ }
220224 }
221225 return read_header_ret (
222226 read_header_ertr::ready_future_marker{},
0 commit comments