Lines Matching refs:mdsc
47 static u64 __get_oldest_flush_tid(struct ceph_mds_client *mdsc);
48 static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
129 void ceph_caps_init(struct ceph_mds_client *mdsc) in ceph_caps_init() argument
131 INIT_LIST_HEAD(&mdsc->caps_list); in ceph_caps_init()
132 spin_lock_init(&mdsc->caps_list_lock); in ceph_caps_init()
135 void ceph_caps_finalize(struct ceph_mds_client *mdsc) in ceph_caps_finalize() argument
139 spin_lock(&mdsc->caps_list_lock); in ceph_caps_finalize()
140 while (!list_empty(&mdsc->caps_list)) { in ceph_caps_finalize()
141 cap = list_first_entry(&mdsc->caps_list, in ceph_caps_finalize()
146 mdsc->caps_total_count = 0; in ceph_caps_finalize()
147 mdsc->caps_avail_count = 0; in ceph_caps_finalize()
148 mdsc->caps_use_count = 0; in ceph_caps_finalize()
149 mdsc->caps_reserve_count = 0; in ceph_caps_finalize()
150 mdsc->caps_min_count = 0; in ceph_caps_finalize()
151 spin_unlock(&mdsc->caps_list_lock); in ceph_caps_finalize()
154 void ceph_adjust_caps_max_min(struct ceph_mds_client *mdsc, in ceph_adjust_caps_max_min() argument
157 spin_lock(&mdsc->caps_list_lock); in ceph_adjust_caps_max_min()
158 mdsc->caps_min_count = fsopt->max_readdir; in ceph_adjust_caps_max_min()
159 if (mdsc->caps_min_count < 1024) in ceph_adjust_caps_max_min()
160 mdsc->caps_min_count = 1024; in ceph_adjust_caps_max_min()
161 mdsc->caps_use_max = fsopt->caps_max; in ceph_adjust_caps_max_min()
162 if (mdsc->caps_use_max > 0 && in ceph_adjust_caps_max_min()
163 mdsc->caps_use_max < mdsc->caps_min_count) in ceph_adjust_caps_max_min()
164 mdsc->caps_use_max = mdsc->caps_min_count; in ceph_adjust_caps_max_min()
165 spin_unlock(&mdsc->caps_list_lock); in ceph_adjust_caps_max_min()
168 static void __ceph_unreserve_caps(struct ceph_mds_client *mdsc, int nr_caps) in __ceph_unreserve_caps() argument
174 BUG_ON(mdsc->caps_reserve_count < nr_caps); in __ceph_unreserve_caps()
175 mdsc->caps_reserve_count -= nr_caps; in __ceph_unreserve_caps()
176 if (mdsc->caps_avail_count >= in __ceph_unreserve_caps()
177 mdsc->caps_reserve_count + mdsc->caps_min_count) { in __ceph_unreserve_caps()
178 mdsc->caps_total_count -= nr_caps; in __ceph_unreserve_caps()
180 cap = list_first_entry(&mdsc->caps_list, in __ceph_unreserve_caps()
186 mdsc->caps_avail_count += nr_caps; in __ceph_unreserve_caps()
191 mdsc->caps_total_count, mdsc->caps_use_count, in __ceph_unreserve_caps()
192 mdsc->caps_reserve_count, mdsc->caps_avail_count); in __ceph_unreserve_caps()
193 BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count + in __ceph_unreserve_caps()
194 mdsc->caps_reserve_count + in __ceph_unreserve_caps()
195 mdsc->caps_avail_count); in __ceph_unreserve_caps()
202 int ceph_reserve_caps(struct ceph_mds_client *mdsc, in ceph_reserve_caps() argument
218 spin_lock(&mdsc->caps_list_lock); in ceph_reserve_caps()
219 if (mdsc->caps_avail_count >= need) in ceph_reserve_caps()
222 have = mdsc->caps_avail_count; in ceph_reserve_caps()
223 mdsc->caps_avail_count -= have; in ceph_reserve_caps()
224 mdsc->caps_reserve_count += have; in ceph_reserve_caps()
225 BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count + in ceph_reserve_caps()
226 mdsc->caps_reserve_count + in ceph_reserve_caps()
227 mdsc->caps_avail_count); in ceph_reserve_caps()
228 spin_unlock(&mdsc->caps_list_lock); in ceph_reserve_caps()
240 for (j = 0; j < mdsc->max_sessions; j++) { in ceph_reserve_caps()
241 s = __ceph_lookup_mds_session(mdsc, j); in ceph_reserve_caps()
244 mutex_unlock(&mdsc->mutex); in ceph_reserve_caps()
248 ceph_trim_caps(mdsc, s, max_caps); in ceph_reserve_caps()
252 mutex_lock(&mdsc->mutex); in ceph_reserve_caps()
256 spin_lock(&mdsc->caps_list_lock); in ceph_reserve_caps()
257 if (mdsc->caps_avail_count) { in ceph_reserve_caps()
259 if (mdsc->caps_avail_count >= need - i) in ceph_reserve_caps()
262 more_have = mdsc->caps_avail_count; in ceph_reserve_caps()
266 mdsc->caps_avail_count -= more_have; in ceph_reserve_caps()
267 mdsc->caps_reserve_count += more_have; in ceph_reserve_caps()
270 spin_unlock(&mdsc->caps_list_lock); in ceph_reserve_caps()
287 spin_lock(&mdsc->caps_list_lock); in ceph_reserve_caps()
288 mdsc->caps_total_count += alloc; in ceph_reserve_caps()
289 mdsc->caps_reserve_count += alloc; in ceph_reserve_caps()
290 list_splice(&newcaps, &mdsc->caps_list); in ceph_reserve_caps()
292 BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count + in ceph_reserve_caps()
293 mdsc->caps_reserve_count + in ceph_reserve_caps()
294 mdsc->caps_avail_count); in ceph_reserve_caps()
297 __ceph_unreserve_caps(mdsc, have + alloc); in ceph_reserve_caps()
299 spin_unlock(&mdsc->caps_list_lock); in ceph_reserve_caps()
302 ctx, mdsc->caps_total_count, mdsc->caps_use_count, in ceph_reserve_caps()
303 mdsc->caps_reserve_count, mdsc->caps_avail_count); in ceph_reserve_caps()
307 void ceph_unreserve_caps(struct ceph_mds_client *mdsc, in ceph_unreserve_caps() argument
315 spin_lock(&mdsc->caps_list_lock); in ceph_unreserve_caps()
316 __ceph_unreserve_caps(mdsc, ctx->count); in ceph_unreserve_caps()
319 if (mdsc->caps_use_max > 0 && in ceph_unreserve_caps()
320 mdsc->caps_use_count > mdsc->caps_use_max) in ceph_unreserve_caps()
322 spin_unlock(&mdsc->caps_list_lock); in ceph_unreserve_caps()
325 ceph_reclaim_caps_nr(mdsc, ctx->used); in ceph_unreserve_caps()
328 struct ceph_cap *ceph_get_cap(struct ceph_mds_client *mdsc, in ceph_get_cap() argument
337 spin_lock(&mdsc->caps_list_lock); in ceph_get_cap()
338 mdsc->caps_use_count++; in ceph_get_cap()
339 mdsc->caps_total_count++; in ceph_get_cap()
340 spin_unlock(&mdsc->caps_list_lock); in ceph_get_cap()
342 spin_lock(&mdsc->caps_list_lock); in ceph_get_cap()
343 if (mdsc->caps_avail_count) { in ceph_get_cap()
344 BUG_ON(list_empty(&mdsc->caps_list)); in ceph_get_cap()
346 mdsc->caps_avail_count--; in ceph_get_cap()
347 mdsc->caps_use_count++; in ceph_get_cap()
348 cap = list_first_entry(&mdsc->caps_list, in ceph_get_cap()
352 BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count + in ceph_get_cap()
353 mdsc->caps_reserve_count + mdsc->caps_avail_count); in ceph_get_cap()
355 spin_unlock(&mdsc->caps_list_lock); in ceph_get_cap()
361 spin_lock(&mdsc->caps_list_lock); in ceph_get_cap()
363 ctx, ctx->count, mdsc->caps_total_count, mdsc->caps_use_count, in ceph_get_cap()
364 mdsc->caps_reserve_count, mdsc->caps_avail_count); in ceph_get_cap()
366 BUG_ON(ctx->count > mdsc->caps_reserve_count); in ceph_get_cap()
367 BUG_ON(list_empty(&mdsc->caps_list)); in ceph_get_cap()
371 mdsc->caps_reserve_count--; in ceph_get_cap()
372 mdsc->caps_use_count++; in ceph_get_cap()
374 cap = list_first_entry(&mdsc->caps_list, struct ceph_cap, caps_item); in ceph_get_cap()
377 BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count + in ceph_get_cap()
378 mdsc->caps_reserve_count + mdsc->caps_avail_count); in ceph_get_cap()
379 spin_unlock(&mdsc->caps_list_lock); in ceph_get_cap()
383 void ceph_put_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap) in ceph_put_cap() argument
385 spin_lock(&mdsc->caps_list_lock); in ceph_put_cap()
387 cap, mdsc->caps_total_count, mdsc->caps_use_count, in ceph_put_cap()
388 mdsc->caps_reserve_count, mdsc->caps_avail_count); in ceph_put_cap()
389 mdsc->caps_use_count--; in ceph_put_cap()
394 if (mdsc->caps_avail_count >= mdsc->caps_reserve_count + in ceph_put_cap()
395 mdsc->caps_min_count) { in ceph_put_cap()
396 mdsc->caps_total_count--; in ceph_put_cap()
399 mdsc->caps_avail_count++; in ceph_put_cap()
400 list_add(&cap->caps_item, &mdsc->caps_list); in ceph_put_cap()
403 BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count + in ceph_put_cap()
404 mdsc->caps_reserve_count + mdsc->caps_avail_count); in ceph_put_cap()
405 spin_unlock(&mdsc->caps_list_lock); in ceph_put_cap()
412 struct ceph_mds_client *mdsc = fsc->mdsc; in ceph_reservation_status() local
414 spin_lock(&mdsc->caps_list_lock); in ceph_reservation_status()
417 *total = mdsc->caps_total_count; in ceph_reservation_status()
419 *avail = mdsc->caps_avail_count; in ceph_reservation_status()
421 *used = mdsc->caps_use_count; in ceph_reservation_status()
423 *reserved = mdsc->caps_reserve_count; in ceph_reservation_status()
425 *min = mdsc->caps_min_count; in ceph_reservation_status()
427 spin_unlock(&mdsc->caps_list_lock); in ceph_reservation_status()
491 static void __cap_set_timeouts(struct ceph_mds_client *mdsc, in __cap_set_timeouts() argument
494 struct ceph_mount_options *opt = mdsc->fsc->mount_options; in __cap_set_timeouts()
509 static void __cap_delay_requeue(struct ceph_mds_client *mdsc, in __cap_delay_requeue() argument
514 if (!mdsc->stopping) { in __cap_delay_requeue()
515 spin_lock(&mdsc->cap_delay_lock); in __cap_delay_requeue()
521 __cap_set_timeouts(mdsc, ci); in __cap_delay_requeue()
522 list_add_tail(&ci->i_cap_delay_list, &mdsc->cap_delay_list); in __cap_delay_requeue()
524 spin_unlock(&mdsc->cap_delay_lock); in __cap_delay_requeue()
533 static void __cap_delay_requeue_front(struct ceph_mds_client *mdsc, in __cap_delay_requeue_front() argument
537 spin_lock(&mdsc->cap_delay_lock); in __cap_delay_requeue_front()
541 list_add(&ci->i_cap_delay_list, &mdsc->cap_delay_list); in __cap_delay_requeue_front()
542 spin_unlock(&mdsc->cap_delay_lock); in __cap_delay_requeue_front()
550 static void __cap_delay_cancel(struct ceph_mds_client *mdsc, in __cap_delay_cancel() argument
556 spin_lock(&mdsc->cap_delay_lock); in __cap_delay_cancel()
558 spin_unlock(&mdsc->cap_delay_lock); in __cap_delay_cancel()
638 struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; in ceph_add_cap() local
671 atomic64_inc(&mdsc->metric.total_caps); in ceph_add_cap()
706 struct ceph_snap_realm *realm = ceph_lookup_snap_realm(mdsc, in ceph_add_cap()
729 __cap_delay_requeue(mdsc, ci); in ceph_add_cap()
930 ceph_update_cap_hit(&fsc->mdsc->metric); in __ceph_caps_issued_mask_metric()
932 ceph_update_cap_mis(&fsc->mdsc->metric); in __ceph_caps_issued_mask_metric()
1111 struct ceph_mds_client *mdsc; in __ceph_remove_cap() local
1124 mdsc = ceph_inode_to_client(&ci->netfs.inode)->mdsc; in __ceph_remove_cap()
1140 atomic64_dec(&mdsc->metric.total_caps); in __ceph_remove_cap()
1167 ceph_put_cap(mdsc, cap); in __ceph_remove_cap()
1177 __cap_delay_cancel(mdsc, ci); in __ceph_remove_cap()
1594 struct ceph_mds_client *mdsc = session->s_mdsc; in __ceph_flush_snaps() local
1618 spin_lock(&mdsc->cap_dirty_lock); in __ceph_flush_snaps()
1619 capsnap->cap_flush.tid = ++mdsc->last_cap_flush_tid; in __ceph_flush_snaps()
1621 &mdsc->cap_flush_list); in __ceph_flush_snaps()
1623 oldest_flush_tid = __get_oldest_flush_tid(mdsc); in __ceph_flush_snaps()
1628 spin_unlock(&mdsc->cap_dirty_lock); in __ceph_flush_snaps()
1688 struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; in ceph_flush_snaps() local
1715 mutex_lock(&mdsc->mutex); in ceph_flush_snaps()
1716 session = __ceph_lookup_mds_session(mdsc, mds); in ceph_flush_snaps()
1717 mutex_unlock(&mdsc->mutex); in ceph_flush_snaps()
1723 __kick_flushing_caps(mdsc, session, ci, 0); in ceph_flush_snaps()
1734 spin_lock(&mdsc->snap_flush_lock); in ceph_flush_snaps()
1738 spin_unlock(&mdsc->snap_flush_lock); in ceph_flush_snaps()
1752 struct ceph_mds_client *mdsc = in __ceph_mark_dirty_caps() local
1753 ceph_sb_to_client(ci->netfs.inode.i_sb)->mdsc; in __ceph_mark_dirty_caps()
1778 WARN_ON_ONCE(!rwsem_is_locked(&mdsc->snap_rwsem)); in __ceph_mark_dirty_caps()
1785 spin_lock(&mdsc->cap_dirty_lock); in __ceph_mark_dirty_caps()
1787 spin_unlock(&mdsc->cap_dirty_lock); in __ceph_mark_dirty_caps()
1799 __cap_delay_requeue(mdsc, ci); in __ceph_mark_dirty_caps()
1821 static u64 __get_oldest_flush_tid(struct ceph_mds_client *mdsc) in __get_oldest_flush_tid() argument
1823 if (!list_empty(&mdsc->cap_flush_list)) { in __get_oldest_flush_tid()
1825 list_first_entry(&mdsc->cap_flush_list, in __get_oldest_flush_tid()
1836 static bool __detach_cap_flush_from_mdsc(struct ceph_mds_client *mdsc, in __detach_cap_flush_from_mdsc() argument
1842 if (wake && cf->g_list.prev != &mdsc->cap_flush_list) { in __detach_cap_flush_from_mdsc()
1876 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in __mark_caps_flushing() local
1899 spin_lock(&mdsc->cap_dirty_lock); in __mark_caps_flushing()
1902 cf->tid = ++mdsc->last_cap_flush_tid; in __mark_caps_flushing()
1903 list_add_tail(&cf->g_list, &mdsc->cap_flush_list); in __mark_caps_flushing()
1904 *oldest_flush_tid = __get_oldest_flush_tid(mdsc); in __mark_caps_flushing()
1908 mdsc->num_cap_flushing++; in __mark_caps_flushing()
1910 spin_unlock(&mdsc->cap_dirty_lock); in __mark_caps_flushing()
1971 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); in ceph_check_caps() local
2015 if (!mdsc->stopping && inode->i_nlink > 0) { in ceph_check_caps()
2062 if ((!(flags & CHECK_CAPS_NOINVAL) || mdsc->stopping) && in ceph_check_caps()
2179 __kick_flushing_caps(mdsc, session, ci, 0); in ceph_check_caps()
2196 spin_lock(&mdsc->cap_dirty_lock); in ceph_check_caps()
2197 oldest_flush_tid = __get_oldest_flush_tid(mdsc); in ceph_check_caps()
2198 spin_unlock(&mdsc->cap_dirty_lock); in ceph_check_caps()
2218 __cap_delay_requeue(mdsc, ci); in ceph_check_caps()
2235 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in try_flush_caps() local
2255 __kick_flushing_caps(mdsc, session, ci, 0); in try_flush_caps()
2313 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in flush_mdlog_and_wait_inode_unsafe_requests() local
2345 mutex_lock(&mdsc->mutex); in flush_mdlog_and_wait_inode_unsafe_requests()
2346 max_sessions = mdsc->max_sessions; in flush_mdlog_and_wait_inode_unsafe_requests()
2350 mutex_unlock(&mdsc->mutex); in flush_mdlog_and_wait_inode_unsafe_requests()
2390 mutex_unlock(&mdsc->mutex); in flush_mdlog_and_wait_inode_unsafe_requests()
2495 struct ceph_mds_client *mdsc = in ceph_write_inode() local
2496 ceph_sb_to_client(inode->i_sb)->mdsc; in ceph_write_inode()
2500 __cap_delay_requeue_front(mdsc, ci); in ceph_write_inode()
2506 static void __kick_flushing_caps(struct ceph_mds_client *mdsc, in __kick_flushing_caps() argument
2588 void ceph_early_kick_flushing_caps(struct ceph_mds_client *mdsc, in ceph_early_kick_flushing_caps() argument
2597 spin_lock(&mdsc->cap_dirty_lock); in ceph_early_kick_flushing_caps()
2598 oldest_flush_tid = __get_oldest_flush_tid(mdsc); in ceph_early_kick_flushing_caps()
2599 spin_unlock(&mdsc->cap_dirty_lock); in ceph_early_kick_flushing_caps()
2626 __kick_flushing_caps(mdsc, session, ci, in ceph_early_kick_flushing_caps()
2636 void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc, in ceph_kick_flushing_caps() argument
2647 spin_lock(&mdsc->cap_dirty_lock); in ceph_kick_flushing_caps()
2648 oldest_flush_tid = __get_oldest_flush_tid(mdsc); in ceph_kick_flushing_caps()
2649 spin_unlock(&mdsc->cap_dirty_lock); in ceph_kick_flushing_caps()
2661 __kick_flushing_caps(mdsc, session, ci, in ceph_kick_flushing_caps()
2671 struct ceph_mds_client *mdsc = session->s_mdsc; in ceph_kick_flushing_inode_caps() local
2681 spin_lock(&mdsc->cap_dirty_lock); in ceph_kick_flushing_inode_caps()
2684 oldest_flush_tid = __get_oldest_flush_tid(mdsc); in ceph_kick_flushing_inode_caps()
2685 spin_unlock(&mdsc->cap_dirty_lock); in ceph_kick_flushing_inode_caps()
2687 __kick_flushing_caps(mdsc, session, ci, oldest_flush_tid); in ceph_kick_flushing_inode_caps()
2749 struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; in try_get_cap_refs() local
2771 up_read(&mdsc->snap_rwsem); in try_get_cap_refs()
2818 if (!down_read_trylock(&mdsc->snap_rwsem)) { in try_get_cap_refs()
2829 down_read(&mdsc->snap_rwsem); in try_get_cap_refs()
2878 __ceph_touch_fmode(ci, mdsc, flags); in try_get_cap_refs()
2882 up_read(&mdsc->snap_rwsem); in try_get_cap_refs()
2885 ceph_update_cap_mis(&mdsc->metric); in try_get_cap_refs()
2887 ceph_update_cap_hit(&mdsc->metric); in try_get_cap_refs()
2989 struct ceph_mds_client *mdsc = fsc->mdsc; in __ceph_get_caps() local
2998 spin_lock(&mdsc->caps_list_lock); in __ceph_get_caps()
2999 list_add(&cw.list, &mdsc->cap_wait_list); in __ceph_get_caps()
3000 spin_unlock(&mdsc->caps_list_lock); in __ceph_get_caps()
3019 spin_lock(&mdsc->caps_list_lock); in __ceph_get_caps()
3021 spin_unlock(&mdsc->caps_list_lock); in __ceph_get_caps()
3730 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in handle_cap_flush_ack() local
3778 spin_lock(&mdsc->cap_dirty_lock); in handle_cap_flush_ack()
3781 wake_mdsc |= __detach_cap_flush_from_mdsc(mdsc, cf); in handle_cap_flush_ack()
3794 mdsc->num_cap_flushing--; in handle_cap_flush_ack()
3811 spin_unlock(&mdsc->cap_dirty_lock); in handle_cap_flush_ack()
3827 wake_up_all(&mdsc->cap_flushing_wq); in handle_cap_flush_ack()
3836 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in __ceph_remove_capsnap() local
3848 spin_lock(&mdsc->cap_dirty_lock); in __ceph_remove_capsnap()
3852 ret = __detach_cap_flush_from_mdsc(mdsc, &capsnap->cap_flush); in __ceph_remove_capsnap()
3855 spin_unlock(&mdsc->cap_dirty_lock); in __ceph_remove_capsnap()
3880 struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; in handle_cap_flushsnap_ack() local
3915 wake_up_all(&mdsc->cap_flushing_wq); in handle_cap_flushsnap_ack()
3972 struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; in handle_cap_export() local
3995 down_read(&mdsc->snap_rwsem); in handle_cap_export()
4048 spin_lock(&mdsc->cap_dirty_lock); in handle_cap_export()
4051 spin_unlock(&mdsc->cap_dirty_lock); in handle_cap_export()
4059 up_read(&mdsc->snap_rwsem); in handle_cap_export()
4063 tsession = ceph_mdsc_open_export_target_session(mdsc, target); in handle_cap_export()
4074 new_cap = ceph_get_cap(mdsc, NULL); in handle_cap_export()
4085 up_read(&mdsc->snap_rwsem); in handle_cap_export()
4092 ceph_put_cap(mdsc, new_cap); in handle_cap_export()
4100 static void handle_cap_import(struct ceph_mds_client *mdsc, in handle_cap_import() argument
4134 new_cap = ceph_get_cap(mdsc, NULL); in handle_cap_import()
4141 ceph_put_cap(mdsc, new_cap); in handle_cap_import()
4229 struct ceph_mds_client *mdsc = session->s_mdsc; in ceph_handle_caps() local
4250 if (!ceph_inc_mds_stopping_blocker(mdsc, session)) in ceph_handle_caps()
4298 struct ceph_osd_client *osdc = &mdsc->fsc->client->osdc; in ceph_handle_caps()
4349 inode = ceph_find_inode(mdsc->fsc->sb, vino); in ceph_handle_caps()
4387 down_write(&mdsc->snap_rwsem); in ceph_handle_caps()
4388 if (ceph_update_snap_trace(mdsc, snaptrace, in ceph_handle_caps()
4391 up_write(&mdsc->snap_rwsem); in ceph_handle_caps()
4395 downgrade_write(&mdsc->snap_rwsem); in ceph_handle_caps()
4397 down_read(&mdsc->snap_rwsem); in ceph_handle_caps()
4400 handle_cap_import(mdsc, inode, h, peer, session, in ceph_handle_caps()
4405 ceph_put_snap_realm(mdsc, realm); in ceph_handle_caps()
4462 ceph_dec_mds_stopping_blocker(mdsc); in ceph_handle_caps()
4468 ceph_mdsc_close_sessions(mdsc); in ceph_handle_caps()
4480 cap = ceph_get_cap(mdsc, NULL); in ceph_handle_caps()
4491 ceph_flush_cap_releases(mdsc, session); in ceph_handle_caps()
4507 unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc) in ceph_check_delayed_caps() argument
4511 struct ceph_mount_options *opt = mdsc->fsc->mount_options; in ceph_check_delayed_caps()
4517 spin_lock(&mdsc->cap_delay_lock); in ceph_check_delayed_caps()
4518 while (!list_empty(&mdsc->cap_delay_list)) { in ceph_check_delayed_caps()
4519 ci = list_first_entry(&mdsc->cap_delay_list, in ceph_check_delayed_caps()
4534 spin_unlock(&mdsc->cap_delay_lock); in ceph_check_delayed_caps()
4538 spin_lock(&mdsc->cap_delay_lock); in ceph_check_delayed_caps()
4541 spin_unlock(&mdsc->cap_delay_lock); in ceph_check_delayed_caps()
4551 struct ceph_mds_client *mdsc = s->s_mdsc; in flush_dirty_session_caps() local
4556 spin_lock(&mdsc->cap_dirty_lock); in flush_dirty_session_caps()
4563 spin_unlock(&mdsc->cap_dirty_lock); in flush_dirty_session_caps()
4567 spin_lock(&mdsc->cap_dirty_lock); in flush_dirty_session_caps()
4569 spin_unlock(&mdsc->cap_dirty_lock); in flush_dirty_session_caps()
4573 void ceph_flush_dirty_caps(struct ceph_mds_client *mdsc) in ceph_flush_dirty_caps() argument
4575 ceph_mdsc_iterate_sessions(mdsc, flush_dirty_session_caps, true); in ceph_flush_dirty_caps()
4579 struct ceph_mds_client *mdsc, int fmode) in __ceph_touch_fmode() argument
4590 __cap_delay_requeue(mdsc, ci); in __ceph_touch_fmode()
4595 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(ci->netfs.inode.i_sb); in ceph_get_fmode() local
4601 atomic64_inc(&mdsc->metric.opened_files); in ceph_get_fmode()
4618 percpu_counter_inc(&mdsc->metric.opened_inodes); in ceph_get_fmode()
4629 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(ci->netfs.inode.i_sb); in ceph_put_fmode() local
4635 atomic64_dec(&mdsc->metric.opened_files); in ceph_put_fmode()
4654 percpu_counter_dec(&mdsc->metric.opened_inodes); in ceph_put_fmode()
4674 struct ceph_mds_client *mdsc = in ceph_drop_caps_for_unlink() local
4675 ceph_inode_to_client(inode)->mdsc; in ceph_drop_caps_for_unlink()
4676 __cap_delay_requeue_front(mdsc, ci); in ceph_drop_caps_for_unlink()
4833 static int remove_capsnaps(struct ceph_mds_client *mdsc, struct inode *inode) in remove_capsnaps() argument
4852 wake_up_all(&mdsc->cap_flushing_wq); in remove_capsnaps()
4859 struct ceph_mds_client *mdsc = fsc->mdsc; in ceph_purge_inode_cap() local
4882 spin_lock(&mdsc->cap_dirty_lock); in ceph_purge_inode_cap()
4910 mdsc->num_cap_flushing--; in ceph_purge_inode_cap()
4913 spin_unlock(&mdsc->cap_dirty_lock); in ceph_purge_inode_cap()
4942 iputs = remove_capsnaps(mdsc, inode); in ceph_purge_inode_cap()