All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@zeniv.linux.org.uk>
To: linux-fsdevel@vger.kernel.org
Cc: ceph-devel@vger.kernel.org
Subject: [PATCH 17/22] get rid of passing callbacks to ceph __dentry_leases_walk()
Date: Wed, 20 Dec 2023 05:29:25 +0000	[thread overview]
Message-ID: <20231220052925.GP1674809@ZenIV> (raw)
In-Reply-To: <20231220051348.GY1674809@ZenIV>

__dentry_leases_walk() is gets a callback and calls it for
a bunch of denties; there are exactly two callers and
we already have a flag telling them apart - lwc->dir_lease.

Seeing that indirect calls are costly these days, let's
get rid of the callback and just call the right function
directly.  Has a side benefit of saner signatures...

Signed-off-by Al Viro <viro@zeniv.linux.org.uk>
---
 fs/ceph/dir.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index 91709934c8b1..768158743750 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -1593,10 +1593,12 @@ struct ceph_lease_walk_control {
 	unsigned long dir_lease_ttl;
 };
 
+static int __dir_lease_check(const struct dentry *, struct ceph_lease_walk_control *);
+static int __dentry_lease_check(const struct dentry *);
+
 static unsigned long
 __dentry_leases_walk(struct ceph_mds_client *mdsc,
-		     struct ceph_lease_walk_control *lwc,
-		     int (*check)(struct dentry*, void*))
+		     struct ceph_lease_walk_control *lwc)
 {
 	struct ceph_dentry_info *di, *tmp;
 	struct dentry *dentry, *last = NULL;
@@ -1624,7 +1626,10 @@ __dentry_leases_walk(struct ceph_mds_client *mdsc,
 			goto next;
 		}
 
-		ret = check(dentry, lwc);
+		if (lwc->dir_lease)
+			ret = __dir_lease_check(dentry, lwc);
+		else
+			ret = __dentry_lease_check(dentry);
 		if (ret & TOUCH) {
 			/* move it into tail of dir lease list */
 			__dentry_dir_lease_touch(mdsc, di);
@@ -1681,7 +1686,7 @@ __dentry_leases_walk(struct ceph_mds_client *mdsc,
 	return freed;
 }
 
-static int __dentry_lease_check(struct dentry *dentry, void *arg)
+static int __dentry_lease_check(const struct dentry *dentry)
 {
 	struct ceph_dentry_info *di = ceph_dentry(dentry);
 	int ret;
@@ -1696,9 +1701,9 @@ static int __dentry_lease_check(struct dentry *dentry, void *arg)
 	return DELETE;
 }
 
-static int __dir_lease_check(struct dentry *dentry, void *arg)
+static int __dir_lease_check(const struct dentry *dentry,
+			     struct ceph_lease_walk_control *lwc)
 {
-	struct ceph_lease_walk_control *lwc = arg;
 	struct ceph_dentry_info *di = ceph_dentry(dentry);
 
 	int ret = __dir_lease_try_check(dentry);
@@ -1737,7 +1742,7 @@ int ceph_trim_dentries(struct ceph_mds_client *mdsc)
 
 	lwc.dir_lease = false;
 	lwc.nr_to_scan  = CEPH_CAPS_PER_RELEASE * 2;
-	freed = __dentry_leases_walk(mdsc, &lwc, __dentry_lease_check);
+	freed = __dentry_leases_walk(mdsc, &lwc);
 	if (!lwc.nr_to_scan) /* more invalid leases */
 		return -EAGAIN;
 
@@ -1747,7 +1752,7 @@ int ceph_trim_dentries(struct ceph_mds_client *mdsc)
 	lwc.dir_lease = true;
 	lwc.expire_dir_lease = freed < count;
 	lwc.dir_lease_ttl = mdsc->fsc->mount_options->caps_wanted_delay_max * HZ;
-	freed +=__dentry_leases_walk(mdsc, &lwc, __dir_lease_check);
+	freed +=__dentry_leases_walk(mdsc, &lwc);
 	if (!lwc.nr_to_scan) /* more to check */
 		return -EAGAIN;
 
-- 
2.39.2


  parent reply	other threads:[~2023-12-20  5:29 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-20  5:13 [PATCHES] assorted fs cleanups Al Viro
2023-12-20  5:15 ` PATCH 01/22] hostfs: use d_splice_alias() calling conventions to simplify failure exits Al Viro
2023-12-20  5:16 ` [PATCH 02/22] /proc/sys: " Al Viro
2023-12-20  5:17 ` [PATCH 03/22] zonefs: d_splice_alias() will do the right thing on ERR_PTR() inode Al Viro
2023-12-20  7:09   ` Damien Le Moal
2023-12-20  5:18 ` [PATCH 04/22] udf: " Al Viro
2023-12-21 12:19   ` Jan Kara
2023-12-20  5:19 ` [PATCH 05/22] affs: d_obtain_alias(ERR_PTR(...)) will do the right thing Al Viro
2023-12-20  5:19 ` [PATCH 06/22] befs: " Al Viro
2023-12-20  5:20 ` [PATCH 07/22] ceph: d_obtain_{alias,root}(ERR_PTR(...)) " Al Viro
2023-12-21  0:35   ` Xiubo Li
2023-12-20  5:21 ` [PATCH 08/22] gfs2: d_obtain_alias(ERR_PTR(...)) " Al Viro
2023-12-20  5:22 ` [PATCH 09/22] kernfs: d_obtain_alias(NULL) " Al Viro
2023-12-20  5:23 ` nilfs2: d_obtain_alias(ERR_PTR(...)) " Al Viro
2023-12-20 14:46   ` Ryusuke Konishi
2023-12-20  5:23 ` [PATCH 11/22] udf: " Al Viro
2023-12-21 12:20   ` Jan Kara
2023-12-20  5:24 ` [PATCH 12/22] ext4_add_entry(): ->d_name.len is never 0 Al Viro
2023-12-20  5:25 ` [PATCH 13/22] bfs_add_entry(): get rid of pointless ->d_name.len checks Al Viro
2023-12-20 11:03   ` Tigran Aivazian
2023-12-20  5:26 ` [PATCH 14/22] __ocfs2_add_entry(), ocfs2_prepare_dir_for_insert(): namelen checks Al Viro
2023-12-20  5:27 ` [PATCH 15/22] reiserfs_add_entry(): get rid of pointless " Al Viro
2023-12-20  5:28 ` [PATCH 16/22] udf_fiiter_add_entry(): check for zero ->d_name.len is bogus Al Viro
2023-12-21 12:22   ` Jan Kara
2023-12-20  5:29 ` Al Viro [this message]
2023-12-21  0:45   ` [PATCH 17/22] get rid of passing callbacks to ceph __dentry_leases_walk() Xiubo Li
2023-12-21  1:12     ` Al Viro
2023-12-21  1:16       ` Xiubo Li
2023-12-20  5:30 ` [PATCH 18/22] nfsd: kill stale comment about simple_fill_super() requirements Al Viro
2023-12-20 14:22   ` Chuck Lever
2023-12-20  5:31 ` [PATCH 19/22] ocfs2_find_match(): there's no such thing as NULL or negative ->d_parent Al Viro
2023-12-20  5:31 ` [PATCH 20/22] gfs2: use is_subdir() Al Viro
2023-12-20  5:32 ` [PATCH 21/22] orangefs: saner arguments passing in readdir guts Al Viro
2023-12-27 12:05   ` Mike Marshall
2024-01-02 16:25     ` Mike Marshall
2023-12-20  5:33 ` [PATCH 22/22] apparmorfs: don't duplicate kfree_link() Al Viro
2023-12-20 12:16 ` [PATCHES] assorted fs cleanups Andreas Grünbacher
2023-12-20 17:15   ` Al Viro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231220052925.GP1674809@ZenIV \
    --to=viro@zeniv.linux.org.uk \
    --cc=ceph-devel@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.