From e04f31d77b39543609282ab28f67534912417f76 Mon Sep 17 00:00:00 2001 From: Christopher Hoffman Date: Thu, 11 Apr 2024 17:37:55 +0000 Subject: [PATCH] client: Fix logic in need read start/end to account for fscrypt. Fix the logic in need read start/end. We need to make sure that a whole block is read when a rmw is issued, regardless if it starts at offset 0 or not. Change size that may be read from where offset starts to the whole fscrypt block. Fixes: https://tracker.ceph.com/issues/64819 Signed-off-by: Christopher Hoffman --- src/client/Client.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index ff8759d098127..8e18b43f9475b 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -12216,12 +12216,10 @@ int Client::WriteEncMgr::read_modify_write(Context *_iofinish) end_block_ofs = fscrypt_block_start(endoff - 1); ofs_in_end_block = fscrypt_ofs_in_block(endoff - 1); - need_read_start = ofs_in_start_block > 0; + need_read_start = ofs_in_start_block >= 0; need_read_end = (endoff < in->effective_size() && ofs_in_end_block < FSCRYPT_BLOCK_SIZE - 1 && start_block != end_block); + read_start_size = FSCRYPT_BLOCK_SIZE; - read_start_size = (need_read_start && need_read_end && start_block == end_block ? - FSCRYPT_BLOCK_SIZE : ofs_in_start_block); - bool need_read = need_read_start | need_read_end; -- 2.39.5