Lines Matching refs:mdsc
65 void ceph_get_snap_realm(struct ceph_mds_client *mdsc, in ceph_get_snap_realm() argument
77 spin_lock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
79 spin_unlock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
111 struct ceph_mds_client *mdsc, in ceph_create_snap_realm() argument
128 __insert_snap_realm(&mdsc->snap_realms, realm); in ceph_create_snap_realm()
129 mdsc->num_snap_realms++; in ceph_create_snap_realm()
140 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc, in __lookup_snap_realm() argument
143 struct rb_node *n = mdsc->snap_realms.rb_node; in __lookup_snap_realm()
160 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc, in ceph_lookup_snap_realm() argument
164 r = __lookup_snap_realm(mdsc, ino); in ceph_lookup_snap_realm()
166 ceph_get_snap_realm(mdsc, r); in ceph_lookup_snap_realm()
170 static void __put_snap_realm(struct ceph_mds_client *mdsc,
176 static void __destroy_snap_realm(struct ceph_mds_client *mdsc, in __destroy_snap_realm() argument
181 rb_erase(&realm->node, &mdsc->snap_realms); in __destroy_snap_realm()
182 mdsc->num_snap_realms--; in __destroy_snap_realm()
186 __put_snap_realm(mdsc, realm->parent); in __destroy_snap_realm()
198 static void __put_snap_realm(struct ceph_mds_client *mdsc, in __put_snap_realm() argument
204 __destroy_snap_realm(mdsc, realm); in __put_snap_realm()
210 void ceph_put_snap_realm(struct ceph_mds_client *mdsc, in ceph_put_snap_realm() argument
218 if (down_write_trylock(&mdsc->snap_rwsem)) { in ceph_put_snap_realm()
219 __destroy_snap_realm(mdsc, realm); in ceph_put_snap_realm()
220 up_write(&mdsc->snap_rwsem); in ceph_put_snap_realm()
222 spin_lock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
223 list_add(&realm->empty_item, &mdsc->snap_empty); in ceph_put_snap_realm()
224 spin_unlock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
235 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc) in __cleanup_empty_realms() argument
239 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
240 while (!list_empty(&mdsc->snap_empty)) { in __cleanup_empty_realms()
241 realm = list_first_entry(&mdsc->snap_empty, in __cleanup_empty_realms()
244 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
245 __destroy_snap_realm(mdsc, realm); in __cleanup_empty_realms()
246 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
248 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
251 void ceph_cleanup_empty_realms(struct ceph_mds_client *mdsc) in ceph_cleanup_empty_realms() argument
253 down_write(&mdsc->snap_rwsem); in ceph_cleanup_empty_realms()
254 __cleanup_empty_realms(mdsc); in ceph_cleanup_empty_realms()
255 up_write(&mdsc->snap_rwsem); in ceph_cleanup_empty_realms()
266 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc, in adjust_snap_realm_parent() argument
275 parent = ceph_lookup_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
277 parent = ceph_create_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
286 ceph_put_snap_realm(mdsc, realm->parent); in adjust_snap_realm_parent()
605 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in __ceph_finish_cap_snap() local
632 spin_lock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
634 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list); in __ceph_finish_cap_snap()
635 spin_unlock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
676 int ceph_update_snap_trace(struct ceph_mds_client *mdsc, in ceph_update_snap_trace() argument
701 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
703 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
711 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent)); in ceph_update_snap_trace()
736 if (realm->seq > mdsc->last_snap_seq) in ceph_update_snap_trace()
737 mdsc->last_snap_seq = realm->seq; in ceph_update_snap_trace()
759 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
778 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
780 __cleanup_empty_realms(mdsc); in ceph_update_snap_trace()
787 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
789 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
801 static void flush_snaps(struct ceph_mds_client *mdsc) in flush_snaps() argument
808 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
809 while (!list_empty(&mdsc->snap_flush_list)) { in flush_snaps()
810 ci = list_first_entry(&mdsc->snap_flush_list, in flush_snaps()
814 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
819 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
821 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
842 void ceph_handle_snap(struct ceph_mds_client *mdsc, in ceph_handle_snap() argument
846 struct super_block *sb = mdsc->fsc->sb; in ceph_handle_snap()
879 down_write(&mdsc->snap_rwsem); in ceph_handle_snap()
901 realm = ceph_lookup_snap_realm(mdsc, split); in ceph_handle_snap()
903 realm = ceph_create_snap_realm(mdsc, split); in ceph_handle_snap()
959 ceph_get_snap_realm(mdsc, realm); in ceph_handle_snap()
960 ceph_put_snap_realm(mdsc, oldrealm); in ceph_handle_snap()
975 __lookup_snap_realm(mdsc, in ceph_handle_snap()
979 adjust_snap_realm_parent(mdsc, child, realm->ino); in ceph_handle_snap()
987 ceph_update_snap_trace(mdsc, p, e, in ceph_handle_snap()
992 ceph_put_snap_realm(mdsc, realm); in ceph_handle_snap()
994 __cleanup_empty_realms(mdsc); in ceph_handle_snap()
996 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
998 flush_snaps(mdsc); in ceph_handle_snap()
1006 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
1010 struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc, in ceph_get_snapid_map() argument
1018 spin_lock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1019 p = &mdsc->snapid_map_tree.rb_node; in ceph_get_snapid_map()
1033 spin_unlock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1055 p = &mdsc->snapid_map_tree.rb_node; in ceph_get_snapid_map()
1056 spin_lock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1073 rb_insert_color(&sm->node, &mdsc->snapid_map_tree); in ceph_get_snapid_map()
1075 spin_unlock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1087 void ceph_put_snapid_map(struct ceph_mds_client* mdsc, in ceph_put_snapid_map() argument
1092 if (atomic_dec_and_lock(&sm->ref, &mdsc->snapid_map_lock)) { in ceph_put_snapid_map()
1095 list_add_tail(&sm->lru, &mdsc->snapid_map_lru); in ceph_put_snapid_map()
1096 spin_unlock(&mdsc->snapid_map_lock); in ceph_put_snapid_map()
1100 spin_unlock(&mdsc->snapid_map_lock); in ceph_put_snapid_map()
1106 void ceph_trim_snapid_map(struct ceph_mds_client *mdsc) in ceph_trim_snapid_map() argument
1112 spin_lock(&mdsc->snapid_map_lock); in ceph_trim_snapid_map()
1115 while (!list_empty(&mdsc->snapid_map_lru)) { in ceph_trim_snapid_map()
1116 sm = list_first_entry(&mdsc->snapid_map_lru, in ceph_trim_snapid_map()
1121 rb_erase(&sm->node, &mdsc->snapid_map_tree); in ceph_trim_snapid_map()
1124 spin_unlock(&mdsc->snapid_map_lock); in ceph_trim_snapid_map()
1135 void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc) in ceph_cleanup_snapid_map() argument
1141 spin_lock(&mdsc->snapid_map_lock); in ceph_cleanup_snapid_map()
1142 while ((p = rb_first(&mdsc->snapid_map_tree))) { in ceph_cleanup_snapid_map()
1144 rb_erase(p, &mdsc->snapid_map_tree); in ceph_cleanup_snapid_map()
1148 spin_unlock(&mdsc->snapid_map_lock); in ceph_cleanup_snapid_map()