From 2626d4bfdf4619d2fd087f808507fd62472ae02f Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 1 Apr 2009 15:06:45 -0700 Subject: [PATCH] kclient: fix caps reservation cleanup --- src/kernel/caps.c | 15 +++++++++++++++ src/kernel/super.c | 1 + src/kernel/super.h | 1 + 3 files changed, 17 insertions(+) diff --git a/src/kernel/caps.c b/src/kernel/caps.c index 99f4aff62c0e4..307440c5ee156 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -1982,6 +1982,21 @@ void ceph_caps_init(void) caps_use_count = 0; } +void ceph_caps_finalize(void) +{ + struct ceph_cap *cap; + spin_lock(&caps_list_lock); + while (!list_empty(&caps_list)) { + cap = list_first_entry(&caps_list, struct ceph_cap, caps_item); + list_del(&cap->caps_item); + kmem_cache_free(ceph_cap_cachep, cap); + } + caps_count = 0; + caps_use_count = 0; + caps_reserve_count = 0; + spin_unlock(&caps_list_lock); +} + int ceph_reserve_caps(struct ceph_caps_reservation *ctx, int need) { int i; diff --git a/src/kernel/super.c b/src/kernel/super.c index 5f31862f99855..67e7367e9e0d3 100644 --- a/src/kernel/super.c +++ b/src/kernel/super.c @@ -1192,6 +1192,7 @@ static void __exit exit_ceph(void) { dout(1, "exit_ceph\n"); unregister_filesystem(&ceph_fs_type); + ceph_caps_finalize(); destroy_caches(); ceph_msgr_exit(); ceph_debugfs_cleanup(); diff --git a/src/kernel/super.h b/src/kernel/super.h index d9e46a12ef622..85aba62b256a2 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -513,6 +513,7 @@ static inline int __ceph_caps_wanted(struct ceph_inode_info *ci) extern int __ceph_caps_mds_wanted(struct ceph_inode_info *ci); extern void ceph_caps_init(void); +extern void ceph_caps_finalize(void); extern int ceph_reserve_caps(struct ceph_caps_reservation *ctx, int need); extern int ceph_unreserve_caps(struct ceph_caps_reservation *ctx); extern struct ceph_cap *ceph_get_cap(struct ceph_caps_reservation *ctx, int mode); -- 2.39.5