From: Venky Shankar Date: Tue, 20 May 2025 12:19:41 +0000 (+0000) Subject: client: do not check file size when inode does not have Fc caps X-Git-Tag: testing/wip-jcollin-testing-20250905.013620-squid~4^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3c52305b02fa75b6902a5a1f1e8de30b2363dda1;p=ceph-ci.git client: do not check file size when inode does not have Fc caps Since the client is holding Fr caps, the read request can be directly sent to the OSD. The offset/in->size comparison check is causing the read request to return with no data since in->size isn't yet updated when another client does an extending write. Introduced-by: 942474c2f5b4c696364f3b7411ae7d96444edfa8 Fixes: http://tracker.ceph.com/issues/70726 Signed-off-by: Venky Shankar (cherry picked from commit 2b74598afc52d1a6cb98ef6b524ec162360cf040) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 72960c1f268..0bf45b4e497 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -11119,10 +11119,9 @@ retry: // C_Read_Sync_NonBlocking::finish(). // trim read based on file size? - if (std::cmp_greater_equal(offset, in->size) || (size == 0)) { - // read is requested at the EOF or the read len is zero, therefore just - // release managed pointers and complete the C_Read_Finisher immediately with 0 bytes - + if (size == 0) { + // zero byte read requested -- therefore just release managed + // pointers and complete the C_Read_Finisher immediately with 0 bytes Context *iof = iofinish.release(); crf.release(); iof->complete(0);