Skip to content

Commit 07d0663

Browse files
committed
crimson/os/seastore/cbj: skip crc calculation for cbj header if device supports the checksum offload
Signed-off-by: Myoungwon Oh <[email protected]>
1 parent e92273a commit 07d0663

File tree

1 file changed

+27
-23
lines changed

1 file changed

+27
-23
lines changed

src/crimson/os/seastore/journal/circular_journal_space.cc

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)