Lines Matching refs:mdsc
63 void ceph_get_snap_realm(struct ceph_mds_client *mdsc, in ceph_get_snap_realm() argument
75 spin_lock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
77 spin_unlock(&mdsc->snap_empty_lock); in ceph_get_snap_realm()
109 struct ceph_mds_client *mdsc, in ceph_create_snap_realm() argument
126 __insert_snap_realm(&mdsc->snap_realms, realm); in ceph_create_snap_realm()
136 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc, in __lookup_snap_realm() argument
139 struct rb_node *n = mdsc->snap_realms.rb_node; in __lookup_snap_realm()
156 struct ceph_snap_realm *ceph_lookup_snap_realm(struct ceph_mds_client *mdsc, in ceph_lookup_snap_realm() argument
160 r = __lookup_snap_realm(mdsc, ino); in ceph_lookup_snap_realm()
162 ceph_get_snap_realm(mdsc, r); in ceph_lookup_snap_realm()
166 static void __put_snap_realm(struct ceph_mds_client *mdsc,
172 static void __destroy_snap_realm(struct ceph_mds_client *mdsc, in __destroy_snap_realm() argument
177 rb_erase(&realm->node, &mdsc->snap_realms); in __destroy_snap_realm()
181 __put_snap_realm(mdsc, realm->parent); in __destroy_snap_realm()
193 static void __put_snap_realm(struct ceph_mds_client *mdsc, in __put_snap_realm() argument
199 __destroy_snap_realm(mdsc, realm); in __put_snap_realm()
205 void ceph_put_snap_realm(struct ceph_mds_client *mdsc, in ceph_put_snap_realm() argument
213 if (down_write_trylock(&mdsc->snap_rwsem)) { in ceph_put_snap_realm()
214 __destroy_snap_realm(mdsc, realm); in ceph_put_snap_realm()
215 up_write(&mdsc->snap_rwsem); in ceph_put_snap_realm()
217 spin_lock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
218 list_add(&realm->empty_item, &mdsc->snap_empty); in ceph_put_snap_realm()
219 spin_unlock(&mdsc->snap_empty_lock); in ceph_put_snap_realm()
230 static void __cleanup_empty_realms(struct ceph_mds_client *mdsc) in __cleanup_empty_realms() argument
234 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
235 while (!list_empty(&mdsc->snap_empty)) { in __cleanup_empty_realms()
236 realm = list_first_entry(&mdsc->snap_empty, in __cleanup_empty_realms()
239 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
240 __destroy_snap_realm(mdsc, realm); in __cleanup_empty_realms()
241 spin_lock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
243 spin_unlock(&mdsc->snap_empty_lock); in __cleanup_empty_realms()
246 void ceph_cleanup_empty_realms(struct ceph_mds_client *mdsc) in ceph_cleanup_empty_realms() argument
248 down_write(&mdsc->snap_rwsem); in ceph_cleanup_empty_realms()
249 __cleanup_empty_realms(mdsc); in ceph_cleanup_empty_realms()
250 up_write(&mdsc->snap_rwsem); in ceph_cleanup_empty_realms()
261 static int adjust_snap_realm_parent(struct ceph_mds_client *mdsc, in adjust_snap_realm_parent() argument
270 parent = ceph_lookup_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
272 parent = ceph_create_snap_realm(mdsc, parentino); in adjust_snap_realm_parent()
281 ceph_put_snap_realm(mdsc, realm->parent); in adjust_snap_realm_parent()
593 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in __ceph_finish_cap_snap() local
618 spin_lock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
619 list_add_tail(&ci->i_snap_flush_item, &mdsc->snap_flush_list); in __ceph_finish_cap_snap()
620 spin_unlock(&mdsc->snap_flush_lock); in __ceph_finish_cap_snap()
659 int ceph_update_snap_trace(struct ceph_mds_client *mdsc, in ceph_update_snap_trace() argument
684 realm = ceph_lookup_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
686 realm = ceph_create_snap_realm(mdsc, le64_to_cpu(ri->ino)); in ceph_update_snap_trace()
694 err = adjust_snap_realm_parent(mdsc, realm, le64_to_cpu(ri->parent)); in ceph_update_snap_trace()
719 if (realm->seq > mdsc->last_snap_seq) in ceph_update_snap_trace()
720 mdsc->last_snap_seq = realm->seq; in ceph_update_snap_trace()
742 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
761 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
763 __cleanup_empty_realms(mdsc); in ceph_update_snap_trace()
770 ceph_put_snap_realm(mdsc, realm); in ceph_update_snap_trace()
772 ceph_put_snap_realm(mdsc, first_realm); in ceph_update_snap_trace()
784 static void flush_snaps(struct ceph_mds_client *mdsc) in flush_snaps() argument
791 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
792 while (!list_empty(&mdsc->snap_flush_list)) { in flush_snaps()
793 ci = list_first_entry(&mdsc->snap_flush_list, in flush_snaps()
797 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
800 spin_lock(&mdsc->snap_flush_lock); in flush_snaps()
802 spin_unlock(&mdsc->snap_flush_lock); in flush_snaps()
823 void ceph_handle_snap(struct ceph_mds_client *mdsc, in ceph_handle_snap() argument
827 struct super_block *sb = mdsc->fsc->sb; in ceph_handle_snap()
860 down_write(&mdsc->snap_rwsem); in ceph_handle_snap()
882 realm = ceph_lookup_snap_realm(mdsc, split); in ceph_handle_snap()
884 realm = ceph_create_snap_realm(mdsc, split); in ceph_handle_snap()
940 ceph_get_snap_realm(mdsc, realm); in ceph_handle_snap()
941 ceph_put_snap_realm(mdsc, oldrealm); in ceph_handle_snap()
954 __lookup_snap_realm(mdsc, in ceph_handle_snap()
958 adjust_snap_realm_parent(mdsc, child, realm->ino); in ceph_handle_snap()
966 ceph_update_snap_trace(mdsc, p, e, in ceph_handle_snap()
971 ceph_put_snap_realm(mdsc, realm); in ceph_handle_snap()
973 __cleanup_empty_realms(mdsc); in ceph_handle_snap()
975 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()
977 flush_snaps(mdsc); in ceph_handle_snap()
985 up_write(&mdsc->snap_rwsem); in ceph_handle_snap()