]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ceph: use cap_wait_list only if debugfs is enabled
authorMax Kellermann <max.kellermann@ionos.com>
Thu, 6 Jun 2024 16:41:57 +0000 (18:41 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 23 Jul 2024 08:01:57 +0000 (10:01 +0200)
Only debugfs uses this list.  By omitting it, we save some memory and
reduce lock contention on `caps_list_lock`.

Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/caps.c
fs/ceph/mds_client.c
fs/ceph/mds_client.h

index c4941ba245ac3d0d3ae4e0f2598838b4ceb69ca9..e98aa8219303616d6e4526541b474f30bf908c43 100644 (file)
@@ -3067,10 +3067,13 @@ int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int need,
                                       flags, &_got);
                WARN_ON_ONCE(ret == -EAGAIN);
                if (!ret) {
+#ifdef CONFIG_DEBUG_FS
                        struct ceph_mds_client *mdsc = fsc->mdsc;
                        struct cap_wait cw;
+#endif
                        DEFINE_WAIT_FUNC(wait, woken_wake_function);
 
+#ifdef CONFIG_DEBUG_FS
                        cw.ino = ceph_ino(inode);
                        cw.tgid = current->tgid;
                        cw.need = need;
@@ -3079,6 +3082,7 @@ int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int need,
                        spin_lock(&mdsc->caps_list_lock);
                        list_add(&cw.list, &mdsc->cap_wait_list);
                        spin_unlock(&mdsc->caps_list_lock);
+#endif
 
                        /* make sure used fmode not timeout */
                        ceph_get_fmode(ci, flags, FMODE_WAIT_BIAS);
@@ -3097,9 +3101,11 @@ int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int need,
                        remove_wait_queue(&ci->i_cap_wq, &wait);
                        ceph_put_fmode(ci, flags, FMODE_WAIT_BIAS);
 
+#ifdef CONFIG_DEBUG_FS
                        spin_lock(&mdsc->caps_list_lock);
                        list_del(&cw.list);
                        spin_unlock(&mdsc->caps_list_lock);
+#endif
 
                        if (ret == -EAGAIN)
                                continue;
index c2157f6e0c698219d2884461a3463bdf0216f970..62238f3e6e19521a5573e6dcbdc985c1be5207c8 100644 (file)
@@ -5505,7 +5505,9 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)
        INIT_DELAYED_WORK(&mdsc->delayed_work, delayed_work);
        mdsc->last_renew_caps = jiffies;
        INIT_LIST_HEAD(&mdsc->cap_delay_list);
+#ifdef CONFIG_DEBUG_FS
        INIT_LIST_HEAD(&mdsc->cap_wait_list);
+#endif
        spin_lock_init(&mdsc->cap_delay_lock);
        INIT_LIST_HEAD(&mdsc->cap_unlink_delay_list);
        INIT_LIST_HEAD(&mdsc->snap_flush_list);
index cfa18cf915a0772059931fc5e262c0184ce0a551..9bcc7f181bfe210c24f08dc3d3b9e4e79a4cc7fe 100644 (file)
@@ -416,6 +416,8 @@ struct ceph_quotarealm_inode {
        struct inode *inode;
 };
 
+#ifdef CONFIG_DEBUG_FS
+
 struct cap_wait {
        struct list_head        list;
        u64                     ino;
@@ -424,6 +426,8 @@ struct cap_wait {
        int                     want;
 };
 
+#endif
+
 enum {
        CEPH_MDSC_STOPPING_BEGIN = 1,
        CEPH_MDSC_STOPPING_FLUSHING = 2,
@@ -512,7 +516,9 @@ struct ceph_mds_client {
        spinlock_t      caps_list_lock;
        struct          list_head caps_list; /* unused (reserved or
                                                unreserved) */
+#ifdef CONFIG_DEBUG_FS
        struct          list_head cap_wait_list;
+#endif
        int             caps_total_count;    /* total caps allocated */
        int             caps_use_count;      /* in use */
        int             caps_use_max;        /* max used caps */