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++;
141 doutc(mdsc->fsc->client, "%llx %p\n", realm->ino, realm);
150 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc,
153 struct ceph_client *cl = mdsc->fsc->client;
154 struct rb_node *n = mdsc->snap_realms.rb_node;
157 lockdep_assert_held(&mdsc->snap_rwsem);
173 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc,
177 r = __lookup_snap_realm(mdsc, ino);
179 ceph_get_snap_realm(mdsc, r);
183 static void __put_snap_realm(struct ceph_mds_client *mdsc,
189 static void __destroy_snap_realm(struct ceph_mds_client *mdsc,
192 struct ceph_client *cl = mdsc->fsc->client;
193 lockdep_assert_held_write(&mdsc->snap_rwsem);
197 rb_erase(&realm->node, &mdsc->snap_realms);
198 mdsc->num_snap_realms--;
202 __put_snap_realm(mdsc, realm->parent);
214 static void __put_snap_realm(struct ceph_mds_client *mdsc,
217 lockdep_assert_held_write(&mdsc->snap_rwsem);
224 __destroy_snap_realm(mdsc, realm);
230 void ceph_put_snap_realm(struct ceph_mds_client *mdsc,
233 if (!atomic_dec_and_lock(&realm->nref, &mdsc->snap_empty_lock))
236 if (down_write_trylock(&mdsc->snap_rwsem)) {
237 spin_unlock(&mdsc->snap_empty_lock);
238 __destroy_snap_realm(mdsc, realm);
239 up_write(&mdsc->snap_rwsem);
241 list_add(&realm->empty_item, &mdsc->snap_empty);
242 spin_unlock(&mdsc->snap_empty_lock);
253 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc)
257 lockdep_assert_held_write(&mdsc->snap_rwsem);
259 spin_lock(&mdsc->snap_empty_lock);
260 while (!list_empty(&mdsc->snap_empty)) {
261 realm = list_first_entry(&mdsc->snap_empty,
264 spin_unlock(&mdsc->snap_empty_lock);
265 __destroy_snap_realm(mdsc, realm);
266 spin_lock(&mdsc->snap_empty_lock);
268 spin_unlock(&mdsc->snap_empty_lock);
271 void ceph_cleanup_global_and_empty_realms(struct ceph_mds_client *mdsc)
275 down_write(&mdsc->snap_rwsem);
276 global_realm = __lookup_snap_realm(mdsc, CEPH_INO_GLOBAL_SNAPREALM);
278 ceph_put_snap_realm(mdsc, global_realm);
279 __cleanup_empty_realms(mdsc);
280 up_write(&mdsc->snap_rwsem);
291 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc,
295 struct ceph_client *cl = mdsc->fsc->client;
298 lockdep_assert_held_write(&mdsc->snap_rwsem);
303 parent = ceph_lookup_snap_realm(mdsc, parentino);
305 parent = ceph_create_snap_realm(mdsc, parentino);
313 ceph_put_snap_realm(mdsc, realm->parent);
335 static int build_snap_context(struct ceph_mds_client *mdsc,
340 struct ceph_client *cl = mdsc->fsc->client;
433 static void rebuild_snap_realms(struct ceph_mds_client *mdsc,
437 struct ceph_client *cl = mdsc->fsc->client;
461 last = build_snap_context(mdsc, _realm, &realm_queue,
666 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
667 struct ceph_client *cl = mdsc->fsc->client;
709 spin_lock(&mdsc->snap_flush_lock);
712 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
714 spin_unlock(&mdsc->snap_flush_lock);
722 static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc,
725 struct ceph_client *cl = mdsc->fsc->client;
779 int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
783 struct ceph_client *cl = mdsc->fsc->client;
790 struct ceph_client *client = mdsc->fsc->client;
796 lockdep_assert_held_write(&mdsc->snap_rwsem);
812 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino));
814 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino));
822 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent));
847 if (realm->seq > mdsc->last_snap_seq)
848 mdsc->last_snap_seq = realm->seq;
873 rebuild_snap_realms(mdsc, realm_to_rebuild, &dirty_realms);
878 ceph_put_snap_realm(mdsc, realm);
891 queue_realm_cap_snaps(mdsc, realm);
897 ceph_put_snap_realm(mdsc, first_realm);
899 __cleanup_empty_realms(mdsc);
906 ceph_put_snap_realm(mdsc, realm);
908 ceph_put_snap_realm(mdsc, first_realm);
920 WRITE_ONCE(mdsc->fsc->mount_state, CEPH_MOUNT_FENCE_IO);
942 static void flush_snaps(struct ceph_mds_client *mdsc)
944 struct ceph_client *cl = mdsc->fsc->client;
950 spin_lock(&mdsc->snap_flush_lock);
951 while (!list_empty(&mdsc->snap_flush_list)) {
952 ci = list_first_entry(&mdsc->snap_flush_list,
956 spin_unlock(&mdsc->snap_flush_lock);
959 spin_lock(&mdsc->snap_flush_lock);
961 spin_unlock(&mdsc->snap_flush_lock);
980 struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc;
991 ceph_put_snap_realm(mdsc, oldrealm);
1016 void ceph_handle_snap(struct ceph_mds_client *mdsc,
1020 struct ceph_client *cl = mdsc->fsc->client;
1021 struct super_block *sb = mdsc->fsc->sb;
1036 if (!ceph_inc_mds_stopping_blocker(mdsc, session))
1054 down_write(&mdsc->snap_rwsem);
1076 realm = ceph_lookup_snap_realm(mdsc, split);
1078 realm = ceph_create_snap_realm(mdsc, split);
1116 ceph_get_snap_realm(mdsc, realm);
1130 __lookup_snap_realm(mdsc,
1134 adjust_snap_realm_parent(mdsc, child, realm->ino);
1155 if (ceph_update_snap_trace(mdsc, p, e,
1164 ceph_put_snap_realm(mdsc, realm);
1166 __cleanup_empty_realms(mdsc);
1168 up_write(&mdsc->snap_rwsem);
1170 flush_snaps(mdsc);
1171 ceph_dec_mds_stopping_blocker(mdsc);
1179 up_write(&mdsc->snap_rwsem);
1181 ceph_dec_mds_stopping_blocker(mdsc);
1184 ceph_mdsc_close_sessions(mdsc);
1188 struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc,
1191 struct ceph_client *cl = mdsc->fsc->client;
1197 spin_lock(&mdsc->snapid_map_lock);
1198 p = &mdsc->snapid_map_tree.rb_node;
1212 spin_unlock(&mdsc->snapid_map_lock);
1235 p = &mdsc->snapid_map_tree.rb_node;
1236 spin_lock(&mdsc->snapid_map_lock);
1253 rb_insert_color(&sm->node, &mdsc->snapid_map_tree);
1255 spin_unlock(&mdsc->snapid_map_lock);
1268 void ceph_put_snapid_map(struct ceph_mds_client* mdsc,
1273 if (atomic_dec_and_lock(&sm->ref, &mdsc->snapid_map_lock)) {
1276 list_add_tail(&sm->lru, &mdsc->snapid_map_lru);
1277 spin_unlock(&mdsc->snapid_map_lock);
1281 spin_unlock(&mdsc->snapid_map_lock);
1287 void ceph_trim_snapid_map(struct ceph_mds_client *mdsc)
1289 struct ceph_client *cl = mdsc->fsc->client;
1294 spin_lock(&mdsc->snapid_map_lock);
1297 while (!list_empty(&mdsc->snapid_map_lru)) {
1298 sm = list_first_entry(&mdsc->snapid_map_lru,
1303 rb_erase(&sm->node, &mdsc->snapid_map_tree);
1306 spin_unlock(&mdsc->snapid_map_lock);
1317 void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc)
1319 struct ceph_client *cl = mdsc->fsc->client;
1324 spin_lock(&mdsc->snapid_map_lock);
1325 while ((p = rb_first(&mdsc->snapid_map_tree))) {
1327 rb_erase(p, &mdsc->snapid_map_tree);
1331 spin_unlock(&mdsc->snapid_map_lock);