Lines Matching refs:index_session

63 static void release_index_session(struct uds_index_session *index_session)  in release_index_session()  argument
65 mutex_lock(&index_session->request_mutex); in release_index_session()
66 if (--index_session->request_count == 0) in release_index_session()
67 uds_broadcast_cond(&index_session->request_cond); in release_index_session()
68 mutex_unlock(&index_session->request_mutex); in release_index_session()
75 static int get_index_session(struct uds_index_session *index_session) in get_index_session() argument
80 mutex_lock(&index_session->request_mutex); in get_index_session()
81 index_session->request_count++; in get_index_session()
82 state = index_session->state; in get_index_session()
83 mutex_unlock(&index_session->request_mutex); in get_index_session()
97 release_index_session(index_session); in get_index_session()
205 struct uds_index_session *index_session = request->session; in handle_callbacks() local
212 release_index_session(index_session); in handle_callbacks()
250 static int __must_check start_loading_index_session(struct uds_index_session *index_session) in start_loading_index_session() argument
254 mutex_lock(&index_session->request_mutex); in start_loading_index_session()
255 if (index_session->state & IS_FLAG_SUSPENDED) { in start_loading_index_session()
258 } else if (index_session->state != 0) { in start_loading_index_session()
262 index_session->state |= IS_FLAG_LOADING; in start_loading_index_session()
265 mutex_unlock(&index_session->request_mutex); in start_loading_index_session()
269 static void finish_loading_index_session(struct uds_index_session *index_session, in finish_loading_index_session() argument
272 mutex_lock(&index_session->request_mutex); in finish_loading_index_session()
273 index_session->state &= ~IS_FLAG_LOADING; in finish_loading_index_session()
275 index_session->state |= IS_FLAG_LOADED; in finish_loading_index_session()
277 uds_broadcast_cond(&index_session->request_cond); in finish_loading_index_session()
278 mutex_unlock(&index_session->request_mutex); in finish_loading_index_session()
281 static int initialize_index_session(struct uds_index_session *index_session, in initialize_index_session() argument
287 result = uds_make_configuration(&index_session->parameters, &config); in initialize_index_session()
293 memset(&index_session->stats, 0, sizeof(index_session->stats)); in initialize_index_session()
294 result = uds_make_index(config, open_type, &index_session->load_context, in initialize_index_session()
295 enter_callback_stage, &index_session->index); in initialize_index_session()
360 static void wait_for_no_requests_in_progress(struct uds_index_session *index_session) in wait_for_no_requests_in_progress() argument
362 mutex_lock(&index_session->request_mutex); in wait_for_no_requests_in_progress()
363 while (index_session->request_count > 0) { in wait_for_no_requests_in_progress()
364 uds_wait_cond(&index_session->request_cond, in wait_for_no_requests_in_progress()
365 &index_session->request_mutex); in wait_for_no_requests_in_progress()
367 mutex_unlock(&index_session->request_mutex); in wait_for_no_requests_in_progress()
370 static int __must_check save_index(struct uds_index_session *index_session) in save_index() argument
372 wait_for_no_requests_in_progress(index_session); in save_index()
373 return uds_save_index(index_session->index); in save_index()
545 static int save_and_free_index(struct uds_index_session *index_session) in save_and_free_index() argument
549 struct uds_index *index = index_session->index; in save_and_free_index()
554 mutex_lock(&index_session->request_mutex); in save_and_free_index()
555 suspended = (index_session->state & IS_FLAG_SUSPENDED); in save_and_free_index()
556 mutex_unlock(&index_session->request_mutex); in save_and_free_index()
565 index_session->index = NULL; in save_and_free_index()
571 mutex_lock(&index_session->load_context.mutex); in save_and_free_index()
572 index_session->load_context.status = INDEX_OPENING; in save_and_free_index()
573 mutex_unlock(&index_session->load_context.mutex); in save_and_free_index()
575 mutex_lock(&index_session->request_mutex); in save_and_free_index()
577 index_session->state &= IS_FLAG_SUSPENDED; in save_and_free_index()
578 mutex_unlock(&index_session->request_mutex); in save_and_free_index()
584 int uds_close_index(struct uds_index_session *index_session) in uds_close_index() argument
589 mutex_lock(&index_session->request_mutex); in uds_close_index()
590 while ((index_session->state & IS_FLAG_WAITING) || in uds_close_index()
591 (index_session->state & IS_FLAG_CLOSING)) { in uds_close_index()
592 uds_wait_cond(&index_session->request_cond, in uds_close_index()
593 &index_session->request_mutex); in uds_close_index()
596 if (index_session->state & IS_FLAG_SUSPENDED) { in uds_close_index()
599 } else if ((index_session->state & IS_FLAG_DESTROYING) || in uds_close_index()
600 !(index_session->state & IS_FLAG_LOADED)) { in uds_close_index()
604 index_session->state |= IS_FLAG_CLOSING; in uds_close_index()
606 mutex_unlock(&index_session->request_mutex); in uds_close_index()
611 wait_for_no_requests_in_progress(index_session); in uds_close_index()
612 result = save_and_free_index(index_session); in uds_close_index()
615 mutex_lock(&index_session->request_mutex); in uds_close_index()
616 index_session->state &= ~IS_FLAG_CLOSING; in uds_close_index()
617 uds_broadcast_cond(&index_session->request_cond); in uds_close_index()
618 mutex_unlock(&index_session->request_mutex); in uds_close_index()
623 int uds_destroy_index_session(struct uds_index_session *index_session) in uds_destroy_index_session() argument
631 mutex_lock(&index_session->request_mutex); in uds_destroy_index_session()
632 while ((index_session->state & IS_FLAG_WAITING) || in uds_destroy_index_session()
633 (index_session->state & IS_FLAG_CLOSING)) { in uds_destroy_index_session()
634 uds_wait_cond(&index_session->request_cond, in uds_destroy_index_session()
635 &index_session->request_mutex); in uds_destroy_index_session()
638 if (index_session->state & IS_FLAG_DESTROYING) { in uds_destroy_index_session()
639 mutex_unlock(&index_session->request_mutex); in uds_destroy_index_session()
644 index_session->state |= IS_FLAG_DESTROYING; in uds_destroy_index_session()
645 load_pending = ((index_session->state & IS_FLAG_LOADING) && in uds_destroy_index_session()
646 (index_session->state & IS_FLAG_SUSPENDED)); in uds_destroy_index_session()
647 mutex_unlock(&index_session->request_mutex); in uds_destroy_index_session()
651 mutex_lock(&index_session->load_context.mutex); in uds_destroy_index_session()
652 if (index_session->load_context.status == INDEX_SUSPENDED) { in uds_destroy_index_session()
653 index_session->load_context.status = INDEX_FREEING; in uds_destroy_index_session()
654 uds_broadcast_cond(&index_session->load_context.cond); in uds_destroy_index_session()
656 mutex_unlock(&index_session->load_context.mutex); in uds_destroy_index_session()
659 mutex_lock(&index_session->request_mutex); in uds_destroy_index_session()
660 while (index_session->state & IS_FLAG_LOADING) { in uds_destroy_index_session()
661 uds_wait_cond(&index_session->request_cond, in uds_destroy_index_session()
662 &index_session->request_mutex); in uds_destroy_index_session()
664 mutex_unlock(&index_session->request_mutex); in uds_destroy_index_session()
667 wait_for_no_requests_in_progress(index_session); in uds_destroy_index_session()
668 result = save_and_free_index(index_session); in uds_destroy_index_session()
669 uds_request_queue_finish(index_session->callback_queue); in uds_destroy_index_session()
670 index_session->callback_queue = NULL; in uds_destroy_index_session()
672 vdo_free(index_session); in uds_destroy_index_session()
677 int uds_flush_index_session(struct uds_index_session *index_session) in uds_flush_index_session() argument
679 wait_for_no_requests_in_progress(index_session); in uds_flush_index_session()
680 uds_wait_for_idle_index(index_session->index); in uds_flush_index_session()
685 static void collect_stats(const struct uds_index_session *index_session, in collect_stats() argument
688 const struct session_stats *session_stats = &index_session->stats; in collect_stats()
705 int uds_get_index_session_stats(struct uds_index_session *index_session, in uds_get_index_session_stats() argument
713 collect_stats(index_session, stats); in uds_get_index_session_stats()
714 if (index_session->index != NULL) { in uds_get_index_session_stats()
715 uds_get_index_stats(index_session->index, stats); in uds_get_index_session_stats()