[PATCH] fix: release unused ceph cap reservation on readdir error

From: deepakroag

Date: Wed Jul 15 2026 - 14:17:18 EST


Return unused reserved caps to the MDS client pool when
ceph_readdir_prepopulate() exits with an error.

Corrected standalone submission: this patch was mistakenly
sent earlier as [PATCH 4/4] in an unrelated multi-subsystem
series. It is ceph-only and resubmitted here as [PATCH 1/1].

Link: https://lore.kernel.org/ceph-devel/20260715143646.15828-4-gaikwad.dcg@xxxxxxxxx/

Signed-off-by: deepakroag <gaikwad.dcg@xxxxxxxxx>
---
fs/ceph/inode.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 61d7c0b81..2d6a80054 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -2188,6 +2188,8 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
dput(dn);
}
out:
+ if (err)
+ ceph_unreserve_caps(req->r_mdsc, &req->r_caps_reservation);
if (err == 0 && skipped == 0) {
set_bit(CEPH_MDS_R_DID_PREPOPULATE, &req->r_req_flags);
req->r_readdir_cache_idx = cache_ctl.index;
--
Deepak Rao Gaikwad