Commit 65d284a3 authored by Max Kellermann's avatar Max Kellermann Committed by Ilya Dryomov

ceph: use cap_wait_list only if debugfs is enabled

Only debugfs uses this list.  By omitting it, we save some memory and
reduce lock contention on `caps_list_lock`.
Signed-off-by: default avatarMax Kellermann <max.kellermann@ionos.com>
Reviewed-by: default avatarXiubo Li <xiubli@redhat.com>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 0c383648
...@@ -3067,10 +3067,13 @@ int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int need, ...@@ -3067,10 +3067,13 @@ int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int need,
flags, &_got); flags, &_got);
WARN_ON_ONCE(ret == -EAGAIN); WARN_ON_ONCE(ret == -EAGAIN);
if (!ret) { if (!ret) {
#ifdef CONFIG_DEBUG_FS
struct ceph_mds_client *mdsc = fsc->mdsc; struct ceph_mds_client *mdsc = fsc->mdsc;
struct cap_wait cw; struct cap_wait cw;
#endif
DEFINE_WAIT_FUNC(wait, woken_wake_function); DEFINE_WAIT_FUNC(wait, woken_wake_function);
#ifdef CONFIG_DEBUG_FS
cw.ino = ceph_ino(inode); cw.ino = ceph_ino(inode);
cw.tgid = current->tgid; cw.tgid = current->tgid;
cw.need = need; cw.need = need;
...@@ -3079,6 +3082,7 @@ int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int 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); spin_lock(&mdsc->caps_list_lock);
list_add(&cw.list, &mdsc->cap_wait_list); list_add(&cw.list, &mdsc->cap_wait_list);
spin_unlock(&mdsc->caps_list_lock); spin_unlock(&mdsc->caps_list_lock);
#endif
/* make sure used fmode not timeout */ /* make sure used fmode not timeout */
ceph_get_fmode(ci, flags, FMODE_WAIT_BIAS); 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, ...@@ -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); remove_wait_queue(&ci->i_cap_wq, &wait);
ceph_put_fmode(ci, flags, FMODE_WAIT_BIAS); ceph_put_fmode(ci, flags, FMODE_WAIT_BIAS);
#ifdef CONFIG_DEBUG_FS
spin_lock(&mdsc->caps_list_lock); spin_lock(&mdsc->caps_list_lock);
list_del(&cw.list); list_del(&cw.list);
spin_unlock(&mdsc->caps_list_lock); spin_unlock(&mdsc->caps_list_lock);
#endif
if (ret == -EAGAIN) if (ret == -EAGAIN)
continue; continue;
......
...@@ -5505,7 +5505,9 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc) ...@@ -5505,7 +5505,9 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)
INIT_DELAYED_WORK(&mdsc->delayed_work, delayed_work); INIT_DELAYED_WORK(&mdsc->delayed_work, delayed_work);
mdsc->last_renew_caps = jiffies; mdsc->last_renew_caps = jiffies;
INIT_LIST_HEAD(&mdsc->cap_delay_list); INIT_LIST_HEAD(&mdsc->cap_delay_list);
#ifdef CONFIG_DEBUG_FS
INIT_LIST_HEAD(&mdsc->cap_wait_list); INIT_LIST_HEAD(&mdsc->cap_wait_list);
#endif
spin_lock_init(&mdsc->cap_delay_lock); spin_lock_init(&mdsc->cap_delay_lock);
INIT_LIST_HEAD(&mdsc->cap_unlink_delay_list); INIT_LIST_HEAD(&mdsc->cap_unlink_delay_list);
INIT_LIST_HEAD(&mdsc->snap_flush_list); INIT_LIST_HEAD(&mdsc->snap_flush_list);
......
...@@ -416,6 +416,8 @@ struct ceph_quotarealm_inode { ...@@ -416,6 +416,8 @@ struct ceph_quotarealm_inode {
struct inode *inode; struct inode *inode;
}; };
#ifdef CONFIG_DEBUG_FS
struct cap_wait { struct cap_wait {
struct list_head list; struct list_head list;
u64 ino; u64 ino;
...@@ -424,6 +426,8 @@ struct cap_wait { ...@@ -424,6 +426,8 @@ struct cap_wait {
int want; int want;
}; };
#endif
enum { enum {
CEPH_MDSC_STOPPING_BEGIN = 1, CEPH_MDSC_STOPPING_BEGIN = 1,
CEPH_MDSC_STOPPING_FLUSHING = 2, CEPH_MDSC_STOPPING_FLUSHING = 2,
...@@ -512,7 +516,9 @@ struct ceph_mds_client { ...@@ -512,7 +516,9 @@ struct ceph_mds_client {
spinlock_t caps_list_lock; spinlock_t caps_list_lock;
struct list_head caps_list; /* unused (reserved or struct list_head caps_list; /* unused (reserved or
unreserved) */ unreserved) */
#ifdef CONFIG_DEBUG_FS
struct list_head cap_wait_list; struct list_head cap_wait_list;
#endif
int caps_total_count; /* total caps allocated */ int caps_total_count; /* total caps allocated */
int caps_use_count; /* in use */ int caps_use_count; /* in use */
int caps_use_max; /* max used caps */ int caps_use_max; /* max used caps */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment