Lines Matching defs:mdsc
65 void ceph_get_snap_realm(struct ceph_mds_client *mdsc,
68 lockdep_assert_held(&mdsc->snap_rwsem);
79 spin_lock(&mdsc->snap_empty_lock);
82 spin_unlock(&mdsc->snap_empty_lock);
113 struct ceph_mds_client *mdsc,
118 lockdep_assert_held_write(&mdsc->snap_rwsem);
132 __insert_snap_realm(&mdsc->snap_realms, realm);
133 mdsc->num_snap_realms++;
144 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc,
147 struct rb_node *n = mdsc->snap_realms.rb_node;
150 lockdep_assert_held(&mdsc->snap_rwsem);
166 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc,
170 r = __lookup_snap_realm(mdsc, ino);
172 ceph_get_snap_realm(mdsc, r);
176 static void __put_snap_realm(struct ceph_mds_client *mdsc,
182 static void __destroy_snap_realm(struct ceph_mds_client *mdsc,
185 lockdep_assert_held_write(&mdsc->snap_rwsem);
189 rb_erase(&realm->node, &mdsc->snap_realms);
190 mdsc->num_snap_realms--;
194 __put_snap_realm(mdsc, realm->parent);
206 static void __put_snap_realm(struct ceph_mds_client *mdsc,
209 lockdep_assert_held_write(&mdsc->snap_rwsem);
216 __destroy_snap_realm(mdsc, realm);
222 void ceph_put_snap_realm(struct ceph_mds_client *mdsc,
225 if (!atomic_dec_and_lock(&realm->nref, &mdsc->snap_empty_lock))
228 if (down_write_trylock(&mdsc->snap_rwsem)) {
229 spin_unlock(&mdsc->snap_empty_lock);
230 __destroy_snap_realm(mdsc, realm);
231 up_write(&mdsc->snap_rwsem);
233 list_add(&realm->empty_item, &mdsc->snap_empty);
234 spin_unlock(&mdsc->snap_empty_lock);
245 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc)
249 lockdep_assert_held_write(&mdsc->snap_rwsem);
251 spin_lock(&mdsc->snap_empty_lock);
252 while (!list_empty(&mdsc->snap_empty)) {
253 realm = list_first_entry(&mdsc->snap_empty,
256 spin_unlock(&mdsc->snap_empty_lock);
257 __destroy_snap_realm(mdsc, realm);
258 spin_lock(&mdsc->snap_empty_lock);
260 spin_unlock(&mdsc->snap_empty_lock);
263 void ceph_cleanup_empty_realms(struct ceph_mds_client *mdsc)
265 down_write(&mdsc->snap_rwsem);
266 __cleanup_empty_realms(mdsc);
267 up_write(&mdsc->snap_rwsem);
278 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc,
284 lockdep_assert_held_write(&mdsc->snap_rwsem);
289 parent = ceph_lookup_snap_realm(mdsc, parentino);
291 parent = ceph_create_snap_realm(mdsc, parentino);
300 ceph_put_snap_realm(mdsc, realm->parent);
622 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
649 spin_lock(&mdsc->snap_flush_lock);
652 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list);
654 spin_unlock(&mdsc->snap_flush_lock);
676 * mdsc->snap_rwsem or in mds dispatch threads */
695 int ceph_update_snap_trace(struct ceph_mds_client *mdsc,
709 lockdep_assert_held_write(&mdsc->snap_rwsem);
725 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino));
727 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino));
735 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent));
760 if (realm->seq > mdsc->last_snap_seq)
761 mdsc->last_snap_seq = realm->seq;
791 ceph_put_snap_realm(mdsc, realm);
810 ceph_put_snap_realm(mdsc, first_realm);
812 __cleanup_empty_realms(mdsc);
819 ceph_put_snap_realm(mdsc, realm);
821 ceph_put_snap_realm(mdsc, first_realm);
833 static void flush_snaps(struct ceph_mds_client *mdsc)
840 spin_lock(&mdsc->snap_flush_lock);
841 while (!list_empty(&mdsc->snap_flush_list)) {
842 ci = list_first_entry(&mdsc->snap_flush_list,
846 spin_unlock(&mdsc->snap_flush_lock);
851 spin_lock(&mdsc->snap_flush_lock);
853 spin_unlock(&mdsc->snap_flush_lock);
874 void ceph_handle_snap(struct ceph_mds_client *mdsc,
878 struct super_block *sb = mdsc->fsc->sb;
911 down_write(&mdsc->snap_rwsem);
933 realm = ceph_lookup_snap_realm(mdsc, split);
935 realm = ceph_create_snap_realm(mdsc, split);
991 ceph_get_snap_realm(mdsc, realm);
992 ceph_put_snap_realm(mdsc, oldrealm);
995 * mdsc->snap_rwsem or mds in dispatch threads */
1007 __lookup_snap_realm(mdsc,
1011 adjust_snap_realm_parent(mdsc, child, realm->ino);
1032 ceph_update_snap_trace(mdsc, p, e,
1037 ceph_put_snap_realm(mdsc, realm);
1039 __cleanup_empty_realms(mdsc);
1041 up_write(&mdsc->snap_rwsem);
1043 flush_snaps(mdsc);
1051 up_write(&mdsc->snap_rwsem);
1055 struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc,
1063 spin_lock(&mdsc->snapid_map_lock);
1064 p = &mdsc->snapid_map_tree.rb_node;
1078 spin_unlock(&mdsc->snapid_map_lock);
1100 p = &mdsc->snapid_map_tree.rb_node;
1101 spin_lock(&mdsc->snapid_map_lock);
1118 rb_insert_color(&sm->node, &mdsc->snapid_map_tree);
1120 spin_unlock(&mdsc->snapid_map_lock);
1132 void ceph_put_snapid_map(struct ceph_mds_client* mdsc,
1137 if (atomic_dec_and_lock(&sm->ref, &mdsc->snapid_map_lock)) {
1140 list_add_tail(&sm->lru, &mdsc->snapid_map_lru);
1141 spin_unlock(&mdsc->snapid_map_lock);
1145 spin_unlock(&mdsc->snapid_map_lock);
1151 void ceph_trim_snapid_map(struct ceph_mds_client *mdsc)
1157 spin_lock(&mdsc->snapid_map_lock);
1160 while (!list_empty(&mdsc->snapid_map_lru)) {
1161 sm = list_first_entry(&mdsc->snapid_map_lru,
1166 rb_erase(&sm->node, &mdsc->snapid_map_tree);
1169 spin_unlock(&mdsc->snapid_map_lock);
1180 void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc)
1186 spin_lock(&mdsc->snapid_map_lock);
1187 while ((p = rb_first(&mdsc->snapid_map_tree))) {
1189 rb_erase(p, &mdsc->snapid_map_tree);
1193 spin_unlock(&mdsc->snapid_map_lock);