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: Max Kellermann <max.kellermann@ionos.com> Reviewed-by: Xiubo Li <xiubli@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
0c38364824
commit
65d284a38c
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user