From: Xiubo Li Date: Wed, 17 Jan 2024 04:42:11 +0000 (+0800) Subject: ceph: break the check delayed cap loop every 5s X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=09927e7ef11fe65a9cc38b6f74a9d6dba31c8c25;p=linux.git ceph: break the check delayed cap loop every 5s In some cases this may take a long time and will block renewing the caps to MDS. [ idryomov: massage comment ] Link: https://tracker.ceph.com/issues/50223#note-21 Signed-off-by: Xiubo Li Reviewed-by: Ilya Dryomov Signed-off-by: Ilya Dryomov --- diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index 7fb4aae974124..55051ad09c191 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -4634,6 +4634,14 @@ unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc) iput(inode); spin_lock(&mdsc->cap_delay_lock); } + + /* + * Make sure too many dirty caps or general + * slowness doesn't block mdsc delayed work, + * preventing send_renew_caps() from running. + */ + if (jiffies - loop_start >= 5 * HZ) + break; } spin_unlock(&mdsc->cap_delay_lock); doutc(cl, "done\n");