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);
|
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user