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 <choffman@redhat.com>
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;