When libcephfs aio tests (src/test/client) are run
with objectcacher disabled (ceph_test_client --client_oc=false),
the TestClient.LlreadvLlwritev fails and core dumps. The client
hits the assert 'caps_ref[c]<0'.
This patch fixes the same. There is no need to give out cap_ref
and take it again between multiple read because of short reads.
In some cases, the get_caps used to fail in C_Read_Sync_NonBlocking::finish
causing cap_ref to go negative when put_cap_ref is done at last in
C_Read_Finish::finish_io
Fixes: https://tracker.ceph.com/issues/68308
Signed-off-by: Kotresh HR <khiremat@redhat.com>
goto success;
}
- clnt->put_cap_ref(in, CEPH_CAP_FILE_RD);
// reverify size
{
r = clnt->_getattr(in, CEPH_STAT_CAP_SIZE, f->actor_perms);
if ((uint64_t)pos >= in->size)
goto success;
- {
- int have_caps2 = 0;
- r = clnt->get_caps(f, CEPH_CAP_FILE_RD, have_caps, &have_caps2, -1);
- if (r < 0) {
- goto error;
- }
- }
-
wanted = left;
retry();
clnt->client_lock.unlock();