Lines Matching refs:mdsc

62 void ceph_get_snap_realm(struct ceph_mds_client *mdsc,  in ceph_get_snap_realm()  argument
74 spin_lock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
76 spin_unlock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
108 struct ceph_mds_client *mdsc, in ceph_create_snap_realm() argument
125 __insert_snap_realm(&mdsc->snap_realms, realm); in ceph_create_snap_realm()
135 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc, in __lookup_snap_realm() argument
138 struct rb_node *n = mdsc->snap_realms.rb_node; in __lookup_snap_realm()
155 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc, in ceph_lookup_snap_realm() argument
159 r = __lookup_snap_realm(mdsc, ino); in ceph_lookup_snap_realm()
161 ceph_get_snap_realm(mdsc, r); in ceph_lookup_snap_realm()
165 static void __put_snap_realm(struct ceph_mds_client *mdsc,
171 static void __destroy_snap_realm(struct ceph_mds_client *mdsc, in __destroy_snap_realm() argument
176 rb_erase(&realm->node, &mdsc->snap_realms); in __destroy_snap_realm()
180 __put_snap_realm(mdsc, realm->parent); in __destroy_snap_realm()
192 static void __put_snap_realm(struct ceph_mds_client *mdsc, in __put_snap_realm() argument
198 __destroy_snap_realm(mdsc, realm); in __put_snap_realm()
204 void ceph_put_snap_realm(struct ceph_mds_client *mdsc, in ceph_put_snap_realm() argument
212 if (down_write_trylock(&mdsc->snap_rwsem)) { in ceph_put_snap_realm()
213 __destroy_snap_realm(mdsc, realm); in ceph_put_snap_realm()
214 up_write(&mdsc->snap_rwsem); in ceph_put_snap_realm()
216 spin_lock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
217 list_add(&realm->empty_item, &mdsc->snap_empty); in ceph_put_snap_realm()
218 spin_unlock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
229 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc) in __cleanup_empty_realms() argument
233 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
234 while (!list_empty(&mdsc->snap_empty)) { in __cleanup_empty_realms()
235 realm = list_first_entry(&mdsc->snap_empty, in __cleanup_empty_realms()
238 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
239 __destroy_snap_realm(mdsc, realm); in __cleanup_empty_realms()
240 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
242 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
245 void ceph_cleanup_empty_realms(struct ceph_mds_client *mdsc) in ceph_cleanup_empty_realms() argument
247 down_write(&mdsc->snap_rwsem); in ceph_cleanup_empty_realms()
248 __cleanup_empty_realms(mdsc); in ceph_cleanup_empty_realms()
249 up_write(&mdsc->snap_rwsem); in ceph_cleanup_empty_realms()
260 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc, in adjust_snap_realm_parent() argument
269 parent = ceph_lookup_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
271 parent = ceph_create_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
280 ceph_put_snap_realm(mdsc, realm->parent); in adjust_snap_realm_parent()
568 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in __ceph_finish_cap_snap() local
589 spin_lock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
590 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list); in __ceph_finish_cap_snap()
591 spin_unlock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
640 int ceph_update_snap_trace(struct ceph_mds_client *mdsc, in ceph_update_snap_trace() argument
665 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
667 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
675 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent)); in ceph_update_snap_trace()
723 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
741 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
743 __cleanup_empty_realms(mdsc); in ceph_update_snap_trace()
750 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
752 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
764 static void flush_snaps(struct ceph_mds_client *mdsc) in flush_snaps() argument
771 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
772 while (!list_empty(&mdsc->snap_flush_list)) { in flush_snaps()
773 ci = list_first_entry(&mdsc->snap_flush_list, in flush_snaps()
777 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
782 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
784 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
805 void ceph_handle_snap(struct ceph_mds_client *mdsc, in ceph_handle_snap() argument
809 struct super_block *sb = mdsc->fsc->sb; in ceph_handle_snap()
842 down_write(&mdsc->snap_rwsem); in ceph_handle_snap()
864 realm = ceph_lookup_snap_realm(mdsc, split); in ceph_handle_snap()
866 realm = ceph_create_snap_realm(mdsc, split); in ceph_handle_snap()
916 ceph_get_snap_realm(mdsc, realm); in ceph_handle_snap()
917 ceph_put_snap_realm(mdsc, oldrealm); in ceph_handle_snap()
930 __lookup_snap_realm(mdsc, in ceph_handle_snap()
934 adjust_snap_realm_parent(mdsc, child, realm->ino); in ceph_handle_snap()
942 ceph_update_snap_trace(mdsc, p, e, in ceph_handle_snap()
947 ceph_put_snap_realm(mdsc, realm); in ceph_handle_snap()
949 __cleanup_empty_realms(mdsc); in ceph_handle_snap()
951 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
953 flush_snaps(mdsc); in ceph_handle_snap()
961 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()