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 <vshankar@redhat.com>
// 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);