Lines Matching refs:mdsc

66 void ceph_get_snap_realm(struct ceph_mds_client *mdsc,  in ceph_get_snap_realm()  argument
69 lockdep_assert_held(&mdsc->snap_rwsem); in ceph_get_snap_realm()
80 spin_lock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
83 spin_unlock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
114 struct ceph_mds_client *mdsc, in ceph_create_snap_realm() argument
119 lockdep_assert_held_write(&mdsc->snap_rwsem); in ceph_create_snap_realm()
138 __insert_snap_realm(&mdsc->snap_realms, realm); in ceph_create_snap_realm()
139 mdsc->num_snap_realms++; in ceph_create_snap_realm()
150 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc, in __lookup_snap_realm() argument
153 struct rb_node *n = mdsc->snap_realms.rb_node; in __lookup_snap_realm()
156 lockdep_assert_held(&mdsc->snap_rwsem); in __lookup_snap_realm()
172 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc, in ceph_lookup_snap_realm() argument
176 r = __lookup_snap_realm(mdsc, ino); in ceph_lookup_snap_realm()
178 ceph_get_snap_realm(mdsc, r); in ceph_lookup_snap_realm()
182 static void __put_snap_realm(struct ceph_mds_client *mdsc,
188 static void __destroy_snap_realm(struct ceph_mds_client *mdsc, in __destroy_snap_realm() argument
191 lockdep_assert_held_write(&mdsc->snap_rwsem); in __destroy_snap_realm()
195 rb_erase(&realm->node, &mdsc->snap_realms); in __destroy_snap_realm()
196 mdsc->num_snap_realms--; in __destroy_snap_realm()
200 __put_snap_realm(mdsc, realm->parent); in __destroy_snap_realm()
212 static void __put_snap_realm(struct ceph_mds_client *mdsc, in __put_snap_realm() argument
215 lockdep_assert_held_write(&mdsc->snap_rwsem); in __put_snap_realm()
222 __destroy_snap_realm(mdsc, realm); in __put_snap_realm()
228 void ceph_put_snap_realm(struct ceph_mds_client *mdsc, in ceph_put_snap_realm() argument
231 if (!atomic_dec_and_lock(&realm->nref, &mdsc->snap_empty_lock)) in ceph_put_snap_realm()
234 if (down_write_trylock(&mdsc->snap_rwsem)) { in ceph_put_snap_realm()
235 spin_unlock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
236 __destroy_snap_realm(mdsc, realm); in ceph_put_snap_realm()
237 up_write(&mdsc->snap_rwsem); in ceph_put_snap_realm()
239 list_add(&realm->empty_item, &mdsc->snap_empty); in ceph_put_snap_realm()
240 spin_unlock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
251 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc) in __cleanup_empty_realms() argument
255 lockdep_assert_held_write(&mdsc->snap_rwsem); in __cleanup_empty_realms()
257 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
258 while (!list_empty(&mdsc->snap_empty)) { in __cleanup_empty_realms()
259 realm = list_first_entry(&mdsc->snap_empty, in __cleanup_empty_realms()
262 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
263 __destroy_snap_realm(mdsc, realm); in __cleanup_empty_realms()
264 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
266 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
269 void ceph_cleanup_global_and_empty_realms(struct ceph_mds_client *mdsc) in ceph_cleanup_global_and_empty_realms() argument
273 down_write(&mdsc->snap_rwsem); in ceph_cleanup_global_and_empty_realms()
274 global_realm = __lookup_snap_realm(mdsc, CEPH_INO_GLOBAL_SNAPREALM); in ceph_cleanup_global_and_empty_realms()
276 ceph_put_snap_realm(mdsc, global_realm); in ceph_cleanup_global_and_empty_realms()
277 __cleanup_empty_realms(mdsc); in ceph_cleanup_global_and_empty_realms()
278 up_write(&mdsc->snap_rwsem); in ceph_cleanup_global_and_empty_realms()
289 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc, in adjust_snap_realm_parent() argument
295 lockdep_assert_held_write(&mdsc->snap_rwsem); in adjust_snap_realm_parent()
300 parent = ceph_lookup_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
302 parent = ceph_create_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
310 ceph_put_snap_realm(mdsc, realm->parent); in adjust_snap_realm_parent()
332 static int build_snap_context(struct ceph_mds_client *mdsc, in build_snap_context() argument
429 static void rebuild_snap_realms(struct ceph_mds_client *mdsc, in rebuild_snap_realms() argument
456 last = build_snap_context(mdsc, _realm, &realm_queue, in rebuild_snap_realms()
660 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); in __ceph_finish_cap_snap() local
701 spin_lock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
704 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list); in __ceph_finish_cap_snap()
706 spin_unlock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
714 static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc, in queue_realm_cap_snaps() argument
769 int ceph_update_snap_trace(struct ceph_mds_client *mdsc, in ceph_update_snap_trace() argument
779 struct ceph_client *client = mdsc->fsc->client; in ceph_update_snap_trace()
785 lockdep_assert_held_write(&mdsc->snap_rwsem); in ceph_update_snap_trace()
801 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
803 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
811 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent)); in ceph_update_snap_trace()
836 if (realm->seq > mdsc->last_snap_seq) in ceph_update_snap_trace()
837 mdsc->last_snap_seq = realm->seq; in ceph_update_snap_trace()
862 rebuild_snap_realms(mdsc, realm_to_rebuild, &dirty_realms); in ceph_update_snap_trace()
867 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
880 queue_realm_cap_snaps(mdsc, realm); in ceph_update_snap_trace()
886 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
888 __cleanup_empty_realms(mdsc); in ceph_update_snap_trace()
895 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
897 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
909 WRITE_ONCE(mdsc->fsc->mount_state, CEPH_MOUNT_FENCE_IO); in ceph_update_snap_trace()
930 static void flush_snaps(struct ceph_mds_client *mdsc) in flush_snaps() argument
937 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
938 while (!list_empty(&mdsc->snap_flush_list)) { in flush_snaps()
939 ci = list_first_entry(&mdsc->snap_flush_list, in flush_snaps()
943 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
946 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
948 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
967 struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; in ceph_change_snap_realm() local
978 ceph_put_snap_realm(mdsc, oldrealm); in ceph_change_snap_realm()
1003 void ceph_handle_snap(struct ceph_mds_client *mdsc, in ceph_handle_snap() argument
1007 struct super_block *sb = mdsc->fsc->sb; in ceph_handle_snap()
1022 if (!ceph_inc_mds_stopping_blocker(mdsc, session)) in ceph_handle_snap()
1040 down_write(&mdsc->snap_rwsem); in ceph_handle_snap()
1062 realm = ceph_lookup_snap_realm(mdsc, split); in ceph_handle_snap()
1064 realm = ceph_create_snap_realm(mdsc, split); in ceph_handle_snap()
1102 ceph_get_snap_realm(mdsc, realm); in ceph_handle_snap()
1116 __lookup_snap_realm(mdsc, in ceph_handle_snap()
1120 adjust_snap_realm_parent(mdsc, child, realm->ino); in ceph_handle_snap()
1141 if (ceph_update_snap_trace(mdsc, p, e, in ceph_handle_snap()
1150 ceph_put_snap_realm(mdsc, realm); in ceph_handle_snap()
1152 __cleanup_empty_realms(mdsc); in ceph_handle_snap()
1154 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
1156 flush_snaps(mdsc); in ceph_handle_snap()
1157 ceph_dec_mds_stopping_blocker(mdsc); in ceph_handle_snap()
1165 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
1167 ceph_dec_mds_stopping_blocker(mdsc); in ceph_handle_snap()
1170 ceph_mdsc_close_sessions(mdsc); in ceph_handle_snap()
1174 struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc, in ceph_get_snapid_map() argument
1182 spin_lock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1183 p = &mdsc->snapid_map_tree.rb_node; in ceph_get_snapid_map()
1197 spin_unlock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1220 p = &mdsc->snapid_map_tree.rb_node; in ceph_get_snapid_map()
1221 spin_lock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1238 rb_insert_color(&sm->node, &mdsc->snapid_map_tree); in ceph_get_snapid_map()
1240 spin_unlock(&mdsc->snapid_map_lock); in ceph_get_snapid_map()
1254 void ceph_put_snapid_map(struct ceph_mds_client* mdsc, in ceph_put_snapid_map() argument
1259 if (atomic_dec_and_lock(&sm->ref, &mdsc->snapid_map_lock)) { in ceph_put_snapid_map()
1262 list_add_tail(&sm->lru, &mdsc->snapid_map_lru); in ceph_put_snapid_map()
1263 spin_unlock(&mdsc->snapid_map_lock); in ceph_put_snapid_map()
1267 spin_unlock(&mdsc->snapid_map_lock); in ceph_put_snapid_map()
1273 void ceph_trim_snapid_map(struct ceph_mds_client *mdsc) in ceph_trim_snapid_map() argument
1279 spin_lock(&mdsc->snapid_map_lock); in ceph_trim_snapid_map()
1282 while (!list_empty(&mdsc->snapid_map_lru)) { in ceph_trim_snapid_map()
1283 sm = list_first_entry(&mdsc->snapid_map_lru, in ceph_trim_snapid_map()
1288 rb_erase(&sm->node, &mdsc->snapid_map_tree); in ceph_trim_snapid_map()
1291 spin_unlock(&mdsc->snapid_map_lock); in ceph_trim_snapid_map()
1302 void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc) in ceph_cleanup_snapid_map() argument
1308 spin_lock(&mdsc->snapid_map_lock); in ceph_cleanup_snapid_map()
1309 while ((p = rb_first(&mdsc->snapid_map_tree))) { in ceph_cleanup_snapid_map()
1311 rb_erase(p, &mdsc->snapid_map_tree); in ceph_cleanup_snapid_map()
1315 spin_unlock(&mdsc->snapid_map_lock); in ceph_cleanup_snapid_map()