Lines Matching refs:mdsc

65 void ceph_get_snap_realm(struct ceph_mds_client *mdsc,  in ceph_get_snap_realm()  argument
68 lockdep_assert_held(&mdsc->snap_rwsem); in ceph_get_snap_realm()
79 spin_lock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
82 spin_unlock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
113 struct ceph_mds_client *mdsc, in ceph_create_snap_realm() argument
118 lockdep_assert_held_write(&mdsc->snap_rwsem); in ceph_create_snap_realm()
137 __insert_snap_realm(&mdsc->snap_realms, realm); in ceph_create_snap_realm()
138 mdsc->num_snap_realms++; in ceph_create_snap_realm()
149 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc, in __lookup_snap_realm() argument
152 struct rb_node *n = mdsc->snap_realms.rb_node; in __lookup_snap_realm()
155 lockdep_assert_held(&mdsc->snap_rwsem); in __lookup_snap_realm()
171 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc, in ceph_lookup_snap_realm() argument
175 r = __lookup_snap_realm(mdsc, ino); in ceph_lookup_snap_realm()
177 ceph_get_snap_realm(mdsc, r); in ceph_lookup_snap_realm()
181 static void __put_snap_realm(struct ceph_mds_client *mdsc,
187 static void __destroy_snap_realm(struct ceph_mds_client *mdsc, in __destroy_snap_realm() argument
190 lockdep_assert_held_write(&mdsc->snap_rwsem); in __destroy_snap_realm()
194 rb_erase(&realm->node, &mdsc->snap_realms); in __destroy_snap_realm()
195 mdsc->num_snap_realms--; in __destroy_snap_realm()
199 __put_snap_realm(mdsc, realm->parent); in __destroy_snap_realm()
211 static void __put_snap_realm(struct ceph_mds_client *mdsc, in __put_snap_realm() argument
214 lockdep_assert_held_write(&mdsc->snap_rwsem); in __put_snap_realm()
221 __destroy_snap_realm(mdsc, realm); in __put_snap_realm()
227 void ceph_put_snap_realm(struct ceph_mds_client *mdsc, in ceph_put_snap_realm() argument
230 if (!atomic_dec_and_lock(&realm->nref, &mdsc->snap_empty_lock)) in ceph_put_snap_realm()
233 if (down_write_trylock(&mdsc->snap_rwsem)) { in ceph_put_snap_realm()
234 spin_unlock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
235 __destroy_snap_realm(mdsc, realm); in ceph_put_snap_realm()
236 up_write(&mdsc->snap_rwsem); in ceph_put_snap_realm()
238 list_add(&realm->empty_item, &mdsc->snap_empty); in ceph_put_snap_realm()
239 spin_unlock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
250 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc) in __cleanup_empty_realms() argument
254 lockdep_assert_held_write(&mdsc->snap_rwsem); in __cleanup_empty_realms()
256 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
257 while (!list_empty(&mdsc->snap_empty)) { in __cleanup_empty_realms()
258 realm = list_first_entry(&mdsc->snap_empty, in __cleanup_empty_realms()
261 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
262 __destroy_snap_realm(mdsc, realm); in __cleanup_empty_realms()
263 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
265 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
268 void ceph_cleanup_global_and_empty_realms(struct ceph_mds_client *mdsc) in ceph_cleanup_global_and_empty_realms() argument
272 down_write(&mdsc->snap_rwsem); in ceph_cleanup_global_and_empty_realms()
273 global_realm = __lookup_snap_realm(mdsc, CEPH_INO_GLOBAL_SNAPREALM); in ceph_cleanup_global_and_empty_realms()
275 ceph_put_snap_realm(mdsc, global_realm); in ceph_cleanup_global_and_empty_realms()
276 __cleanup_empty_realms(mdsc); in ceph_cleanup_global_and_empty_realms()
277 up_write(&mdsc->snap_rwsem); in ceph_cleanup_global_and_empty_realms()
288 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc, in adjust_snap_realm_parent() argument
294 lockdep_assert_held_write(&mdsc->snap_rwsem); in adjust_snap_realm_parent()
299 parent = ceph_lookup_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
301 parent = ceph_create_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
309 ceph_put_snap_realm(mdsc, realm->parent); in adjust_snap_realm_parent()
656 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); in __ceph_finish_cap_snap() local
694 spin_lock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
696 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list); in __ceph_finish_cap_snap()
697 spin_unlock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
759 int ceph_update_snap_trace(struct ceph_mds_client *mdsc, in ceph_update_snap_trace() argument
773 lockdep_assert_held_write(&mdsc->snap_rwsem); in ceph_update_snap_trace()
789 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
791 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
799 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent)); in ceph_update_snap_trace()
824 if (realm->seq > mdsc->last_snap_seq) in ceph_update_snap_trace()
825 mdsc->last_snap_seq = realm->seq; in ceph_update_snap_trace()
855 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
874 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
876 __cleanup_empty_realms(mdsc); in ceph_update_snap_trace()
883 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
885 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
897 static void flush_snaps(struct ceph_mds_client *mdsc) in flush_snaps() argument
904 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
905 while (!list_empty(&mdsc->snap_flush_list)) { in flush_snaps()
906 ci = list_first_entry(&mdsc->snap_flush_list, in flush_snaps()
910 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
913 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
915 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
934 struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; in ceph_change_snap_realm() local
945 ceph_put_snap_realm(mdsc, oldrealm); in ceph_change_snap_realm()
970 void ceph_handle_snap(struct ceph_mds_client *mdsc, in ceph_handle_snap() argument
974 struct super_block *sb = mdsc->fsc->sb; in ceph_handle_snap()
1007 down_write(&mdsc->snap_rwsem); in ceph_handle_snap()
1029 realm = ceph_lookup_snap_realm(mdsc, split); in ceph_handle_snap()
1031 realm = ceph_create_snap_realm(mdsc, split); in ceph_handle_snap()
1069 ceph_get_snap_realm(mdsc, realm); in ceph_handle_snap()
1083 __lookup_snap_realm(mdsc, in ceph_handle_snap()
1087 adjust_snap_realm_parent(mdsc, child, realm->ino); in ceph_handle_snap()
1095 ceph_update_snap_trace(mdsc, p, e, in ceph_handle_snap()
1100 ceph_put_snap_realm(mdsc, realm); in ceph_handle_snap()
1102 __cleanup_empty_realms(mdsc); in ceph_handle_snap()
1104 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
1106 flush_snaps(mdsc); in ceph_handle_snap()
1114 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
1118 struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc, in ceph_get_snapid_map() argument
1126 spin_lock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1127 p = &mdsc->snapid_map_tree.rb_node; in ceph_get_snapid_map()
1141 spin_unlock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1164 p = &mdsc->snapid_map_tree.rb_node; in ceph_get_snapid_map()
1165 spin_lock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1182 rb_insert_color(&sm->node, &mdsc->snapid_map_tree); in ceph_get_snapid_map()
1184 spin_unlock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1198 void ceph_put_snapid_map(struct ceph_mds_client* mdsc, in ceph_put_snapid_map() argument
1203 if (atomic_dec_and_lock(&sm->ref, &mdsc->snapid_map_lock)) { in ceph_put_snapid_map()
1206 list_add_tail(&sm->lru, &mdsc->snapid_map_lru); in ceph_put_snapid_map()
1207 spin_unlock(&mdsc->snapid_map_lock); in ceph_put_snapid_map()
1211 spin_unlock(&mdsc->snapid_map_lock); in ceph_put_snapid_map()
1217 void ceph_trim_snapid_map(struct ceph_mds_client *mdsc) in ceph_trim_snapid_map() argument
1223 spin_lock(&mdsc->snapid_map_lock); in ceph_trim_snapid_map()
1226 while (!list_empty(&mdsc->snapid_map_lru)) { in ceph_trim_snapid_map()
1227 sm = list_first_entry(&mdsc->snapid_map_lru, in ceph_trim_snapid_map()
1232 rb_erase(&sm->node, &mdsc->snapid_map_tree); in ceph_trim_snapid_map()
1235 spin_unlock(&mdsc->snapid_map_lock); in ceph_trim_snapid_map()
1246 void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc) in ceph_cleanup_snapid_map() argument
1252 spin_lock(&mdsc->snapid_map_lock); in ceph_cleanup_snapid_map()
1253 while ((p = rb_first(&mdsc->snapid_map_tree))) { in ceph_cleanup_snapid_map()
1255 rb_erase(p, &mdsc->snapid_map_tree); in ceph_cleanup_snapid_map()
1259 spin_unlock(&mdsc->snapid_map_lock); in ceph_cleanup_snapid_map()