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;
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);