Commit
0cf383da0741 ("ReplicatedPG: clamp SPARSE_READ to object size
for ec pool") didn't handle the case of a sparse read that ends up
being empty correctly: the OSD encodes only an empty extent map whereas
clients (both userspace and kernel) also expect to see an empty data
buffer. IOW the reply contains one 32-bit zero instead of the expected
two.
Fixes: https://tracker.ceph.com/issues/74394
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
dout(10) << " sparse read ended up empty for " << soid << dendl;
map<uint64_t, uint64_t> extents;
encode(extents, osd_op.outdata);
+ bufferlist data_bl;
+ encode(data_bl, osd_op.outdata);
}
} else {
// read into a buffer