Actions
Tasks #65745
closedTasks #63293: Implement fscrypt in libcephfs and cephfs-fuse
Tasks #64133: Make pjd work on fscrypt
RMW fail when on end of block or file
% Done:
0%
Reviewed:
Affected Versions:
Component(FS):
Labels (FS):
Pull request ID:
Tags (freeform):
Merge Commit:
Fixed In:
Released In:
Upkeep Timestamp:
Description
A RMW will fail when at end boundary of block or file.
See:
need_read_end = (endoff < in->effective_size() && ofs_in_end_block < FSCRYPT_BLOCK_SIZE - 1 && start_block != end_block);
Updated by Christopher Hoffman almost 2 years ago
- Status changed from In Progress to Resolved
Author: Christopher Hoffman <choffman@redhat.com>
Date: Wed May 1 17:36:00 2024 +0000
client: fscrypt rmw fails when endoff end of block or file
Fscrypt rmw fails when end of a write lines up with end of
a block or end of the file.
Fixes: https://tracker.ceph.com/issues/65745
Signed-off-by: Christopher Hoffman <choffman@redhat.com>
diff --git a/src/client/Client.cc b/src/client/Client.cc
index 72a01ec902f..de83d76ecc4 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -11833,7 +11833,7 @@ int Client::WriteEncMgr::read_modify_write(Context *_iofinish)
<< " end_block_ofs=" << end_block_ofs << " ofs_in_end_block=" << ofs_in_end_block
<< dendl;
need_read_start = (ofs_in_start_block >= 0 && (endoff - offset) <= FSCRYPT_BLOCK_SIZE);
- need_read_end = (endoff < in->effective_size() && ofs_in_end_block < FSCRYPT_BLOCK_SIZE - 1 && start_block != end_block);
+ need_read_end = (endoff <= in->effective_size() && ofs_in_end_block < FSCRYPT_BLOCK_SIZE && start_block != end_block);
read_start_size = FSCRYPT_BLOCK_SIZE;
bool need_read = need_read_start | need_read_end;
Actions