From: Christopher Hoffman Date: Thu, 11 Apr 2024 17:37:55 +0000 (+0000) Subject: client: Fix logic in need read start/end to account for fscrypt. X-Git-Tag: v21.0.0~231^2~10^2~118 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e04f31d77b39543609282ab28f67534912417f76;p=ceph.git 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 --- diff --git a/src/client/Client.cc b/src/client/Client.cc index ff8759d09812..8e18b43f9475 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;