]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: Fix up a few things in read_sync path
authorChristopher Hoffman <choffman@redhat.com>
Tue, 11 Feb 2025 16:05:29 +0000 (16:05 +0000)
committerChristopher Hoffman <choffman@redhat.com>
Wed, 5 Nov 2025 13:59:34 +0000 (13:59 +0000)
Fix up a few things in read_sync path
1. File size may not be updated locally, do not check for trim read
2. Do not get_cap before RMW, each do_write takes care of having proper caps

Fixes: https://tracker.ceph.com/issues/69796
Signed-off-by: Christopher Hoffman <choffman@redhat.com>
src/client/Client.cc

index 412c75c3cacb7d9d6942f6939a2e4ce62eb51939..ebb3e98e818305d9e0ee4844cea1355d825615fd 100644 (file)
@@ -11901,12 +11901,6 @@ int Client::_read_sync(Fh *f, uint64_t off, uint64_t len, bufferlist *bl,
 
   auto effective_size = in->effective_size();
 
-  // trim read based on file size?
-  if (off >= in->effective_size())
-    return 0;
-  if (len == 0)
-    return 0;
-
   auto target_len = std::min(len, effective_size - off);
   uint64_t read_start;
   uint64_t read_len;
@@ -11945,7 +11939,6 @@ int Client::_read_sync(Fh *f, uint64_t off, uint64_t len, bufferlist *bl,
       left -= r;
       pbl->claim_append(tbl);
     }
-    auto effective_size = (fscrypt_denc ? in->effective_size() : in->size);
 
     // short read?
     if (r >= 0 && r < wanted) {
@@ -12794,8 +12787,6 @@ int64_t Client::_write(Fh *f, int64_t offset, uint64_t size, bufferlist bl,
       filer_iofinish.reset(new C_OnFinisher(new C_Lock_Client_Finisher(this, iofinish.get()), &objecter_finisher));
     }
 
-    get_cap_ref(in, CEPH_CAP_FILE_BUFFER);
-
     auto delay = get_injected_write_delay_secs();
     if (unlikely(delay > 0)) {
       ldout(cct, 20) << __func__ << ": delaying write for " << delay << " seconds" << dendl;
@@ -12805,7 +12796,7 @@ int64_t Client::_write(Fh *f, int64_t offset, uint64_t size, bufferlist bl,
     }
 
     ldout(cct, 10) << " _write_filer" << dendl;
-    enc_mgr->read_modify_write(iofinish.get());
+    enc_mgr->read_modify_write(filer_iofinish.get());
 
     if (onfinish) {
       // handle non-blocking caller (onfinish != nullptr), we can now safely