Lines Matching defs:mdsc
66 void ceph_get_snap_realm(struct ceph_mds_client *mdsc,
69 lockdep_assert_held(&mdsc->snap_rwsem);
80 spin_lock(&mdsc->snap_empty_lock);
83 spin_unlock(&mdsc->snap_empty_lock);
114 struct ceph_mds_client *mdsc,
119 lockdep_assert_held_write(&mdsc->snap_rwsem);
138 __insert_snap_realm(&mdsc->snap_realms, realm);
139 mdsc->num_snap_realms++;
150 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc,
153 struct rb_node *n = mdsc->snap_realms.rb_node;
156 lockdep_assert_held(&mdsc->snap_rwsem);
172 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc,
176 r = __lookup_snap_realm(mdsc, ino);
178 ceph_get_snap_realm(mdsc, r);
182 static void __put_snap_realm(struct ceph_mds_client *mdsc,
188 static void __destroy_snap_realm(struct ceph_mds_client *mdsc,
191 lockdep_assert_held_write(&mdsc->snap_rwsem);
195 rb_erase(&realm->node, &mdsc->snap_realms);
196 mdsc->num_snap_realms--;
200 __put_snap_realm(mdsc, realm->parent);
212 static void __put_snap_realm(struct ceph_mds_client *mdsc,
215 lockdep_assert_held_write(&mdsc->snap_rwsem);
222 __destroy_snap_realm(mdsc, realm);
228 void ceph_put_snap_realm(struct ceph_mds_client *mdsc,
231 if (!atomic_dec_and_lock(&realm->nref, &mdsc->snap_empty_lock))
234 if (down_write_trylock(&mdsc->snap_rwsem)) {
235 spin_unlock(&mdsc->snap_empty_lock);
236 __destroy_snap_realm(mdsc, realm);
237 up_write(&mdsc->snap_rwsem);
239 list_add(&realm->empty_item, &mdsc->snap_empty);
240 spin_unlock(&mdsc->snap_empty_lock);
251 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc)
255 lockdep_assert_held_write(&mdsc->snap_rwsem);
257 spin_lock(&mdsc->snap_empty_lock);
258 while (!list_empty(&mdsc->snap_empty)) {
259 realm = list_first_entry(&mdsc->snap_empty,
262 spin_unlock(&mdsc->snap_empty_lock);
263 __destroy_snap_realm(mdsc, realm);
264 spin_lock(&mdsc->snap_empty_lock);
266 spin_unlock(&mdsc->snap_empty_lock);
269 void ceph_cleanup_global_and_empty_realms(struct ceph_mds_client *mdsc)
273 down_write(&mdsc->snap_rwsem);
274 global_realm = __lookup_snap_realm(mdsc, CEPH_INO_GLOBAL_SNAPREALM);
276 ceph_put_snap_realm(mdsc, global_realm);
277 __cleanup_empty_realms(mdsc);
278 up_write(&mdsc->snap_rwsem);
289 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc,
295 lockdep_assert_held_write(&mdsc->snap_rwsem);
300 parent = ceph_lookup_snap_realm(mdsc, parentino);
302 parent = ceph_create_snap_realm(mdsc, parentino);
310 ceph_put_snap_realm(mdsc, realm->parent);
657 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
698 spin_lock(&mdsc->snap_flush_lock);
701 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
703 spin_unlock(&mdsc->snap_flush_lock);
765 int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
775 struct ceph_client *client = mdsc->fsc->client;
781 lockdep_assert_held_write(&mdsc->snap_rwsem);
797 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino));
799 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino));
807 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent));
832 if (realm->seq > mdsc->last_snap_seq)
833 mdsc->last_snap_seq = realm->seq;
863 ceph_put_snap_realm(mdsc, realm);
882 ceph_put_snap_realm(mdsc, first_realm);
884 __cleanup_empty_realms(mdsc);
891 ceph_put_snap_realm(mdsc, realm);
893 ceph_put_snap_realm(mdsc, first_realm);
905 WRITE_ONCE(mdsc->fsc->mount_state, CEPH_MOUNT_FENCE_IO);
926 static void flush_snaps(struct ceph_mds_client *mdsc)
933 spin_lock(&mdsc->snap_flush_lock);
934 while (!list_empty(&mdsc->snap_flush_list)) {
935 ci = list_first_entry(&mdsc->snap_flush_list,
939 spin_unlock(&mdsc->snap_flush_lock);
942 spin_lock(&mdsc->snap_flush_lock);
944 spin_unlock(&mdsc->snap_flush_lock);
963 struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
974 ceph_put_snap_realm(mdsc, oldrealm);
999 void ceph_handle_snap(struct ceph_mds_client *mdsc,
1003 struct super_block *sb = mdsc->fsc->sb;
1018 if (!ceph_inc_mds_stopping_blocker(mdsc, session))
1036 down_write(&mdsc->snap_rwsem);
1058 realm = ceph_lookup_snap_realm(mdsc, split);
1060 realm = ceph_create_snap_realm(mdsc, split);
1098 ceph_get_snap_realm(mdsc, realm);
1112 __lookup_snap_realm(mdsc,
1116 adjust_snap_realm_parent(mdsc, child, realm->ino);
1137 if (ceph_update_snap_trace(mdsc, p, e,
1146 ceph_put_snap_realm(mdsc, realm);
1148 __cleanup_empty_realms(mdsc);
1150 up_write(&mdsc->snap_rwsem);
1152 flush_snaps(mdsc);
1153 ceph_dec_mds_stopping_blocker(mdsc);
1161 up_write(&mdsc->snap_rwsem);
1163 ceph_dec_mds_stopping_blocker(mdsc);
1166 ceph_mdsc_close_sessions(mdsc);
1170 struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc,
1178 spin_lock(&mdsc->snapid_map_lock);
1179 p = &mdsc->snapid_map_tree.rb_node;
1193 spin_unlock(&mdsc->snapid_map_lock);
1216 p = &mdsc->snapid_map_tree.rb_node;
1217 spin_lock(&mdsc->snapid_map_lock);
1234 rb_insert_color(&sm->node, &mdsc->snapid_map_tree);
1236 spin_unlock(&mdsc->snapid_map_lock);
1250 void ceph_put_snapid_map(struct ceph_mds_client* mdsc,
1255 if (atomic_dec_and_lock(&sm->ref, &mdsc->snapid_map_lock)) {
1258 list_add_tail(&sm->lru, &mdsc->snapid_map_lru);
1259 spin_unlock(&mdsc->snapid_map_lock);
1263 spin_unlock(&mdsc->snapid_map_lock);
1269 void ceph_trim_snapid_map(struct ceph_mds_client *mdsc)
1275 spin_lock(&mdsc->snapid_map_lock);
1278 while (!list_empty(&mdsc->snapid_map_lru)) {
1279 sm = list_first_entry(&mdsc->snapid_map_lru,
1284 rb_erase(&sm->node, &mdsc->snapid_map_tree);
1287 spin_unlock(&mdsc->snapid_map_lock);
1298 void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc)
1304 spin_lock(&mdsc->snapid_map_lock);
1305 while ((p = rb_first(&mdsc->snapid_map_tree))) {
1307 rb_erase(p, &mdsc->snapid_map_tree);
1311 spin_unlock(&mdsc->snapid_map_lock);