From 10c8330f20cd2e93ce036d0ea2c38552d71b62c6 Mon Sep 17 00:00:00 2001 From: Kotresh HR Date: Mon, 30 Sep 2024 12:45:04 +0530 Subject: [PATCH] client: Fix caps_ref[c]<0 assert 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 --- src/client/Client.cc | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 1bc67ce38bb..e73f821438b 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -10798,7 +10798,6 @@ void Client::C_Read_Sync_NonBlocking::finish(int r) goto success; } - clnt->put_cap_ref(in, CEPH_CAP_FILE_RD); // reverify size { r = clnt->_getattr(in, CEPH_STAT_CAP_SIZE, f->actor_perms); @@ -10810,14 +10809,6 @@ void Client::C_Read_Sync_NonBlocking::finish(int r) 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(); -- 2.39.5