Lines Matching refs:r
248 static void recover_list_add(struct dlm_rsb *r) in recover_list_add() argument
250 struct dlm_ls *ls = r->res_ls; in recover_list_add()
253 if (list_empty(&r->res_recover_list)) { in recover_list_add()
254 list_add_tail(&r->res_recover_list, &ls->ls_recover_list); in recover_list_add()
256 dlm_hold_rsb(r); in recover_list_add()
261 static void recover_list_del(struct dlm_rsb *r) in recover_list_del() argument
263 struct dlm_ls *ls = r->res_ls; in recover_list_del()
266 list_del_init(&r->res_recover_list); in recover_list_del()
270 dlm_put_rsb(r); in recover_list_del()
275 struct dlm_rsb *r, *s; in recover_list_clear() local
278 list_for_each_entry_safe(r, s, &ls->ls_recover_list, res_recover_list) { in recover_list_clear()
279 list_del_init(&r->res_recover_list); in recover_list_clear()
280 r->res_recover_locks_count = 0; in recover_list_clear()
281 dlm_put_rsb(r); in recover_list_clear()
305 static int recover_idr_add(struct dlm_rsb *r) in recover_idr_add() argument
307 struct dlm_ls *ls = r->res_ls; in recover_idr_add()
312 if (r->res_id) { in recover_idr_add()
316 rv = idr_alloc(&ls->ls_recover_idr, r, 1, 0, GFP_NOWAIT); in recover_idr_add()
320 r->res_id = rv; in recover_idr_add()
322 dlm_hold_rsb(r); in recover_idr_add()
330 static void recover_idr_del(struct dlm_rsb *r) in recover_idr_del() argument
332 struct dlm_ls *ls = r->res_ls; in recover_idr_del()
335 idr_remove(&ls->ls_recover_idr, r->res_id); in recover_idr_del()
336 r->res_id = 0; in recover_idr_del()
340 dlm_put_rsb(r); in recover_idr_del()
345 struct dlm_rsb *r; in recover_idr_find() local
348 r = idr_find(&ls->ls_recover_idr, (int)id); in recover_idr_find()
350 return r; in recover_idr_find()
355 struct dlm_rsb *r; in recover_idr_clear() local
360 idr_for_each_entry(&ls->ls_recover_idr, r, id) { in recover_idr_clear()
362 r->res_id = 0; in recover_idr_clear()
363 r->res_recover_locks_count = 0; in recover_idr_clear()
366 dlm_put_rsb(r); in recover_idr_clear()
411 static void set_master_lkbs(struct dlm_rsb *r) in set_master_lkbs() argument
413 set_lock_master(&r->res_grantqueue, r->res_nodeid); in set_master_lkbs()
414 set_lock_master(&r->res_convertqueue, r->res_nodeid); in set_master_lkbs()
415 set_lock_master(&r->res_waitqueue, r->res_nodeid); in set_master_lkbs()
425 static void set_new_master(struct dlm_rsb *r) in set_new_master() argument
427 set_master_lkbs(r); in set_new_master()
428 rsb_set_flag(r, RSB_NEW_MASTER); in set_new_master()
429 rsb_set_flag(r, RSB_NEW_MASTER2); in set_new_master()
442 static int recover_master(struct dlm_rsb *r, unsigned int *count) in recover_master() argument
444 struct dlm_ls *ls = r->res_ls; in recover_master()
449 if (is_master(r)) in recover_master()
452 is_removed = dlm_is_removed(ls, r->res_nodeid); in recover_master()
454 if (!is_removed && !rsb_flag(r, RSB_NEW_MASTER)) in recover_master()
458 dir_nodeid = dlm_dir_nodeid(r); in recover_master()
462 r->res_master_nodeid = our_nodeid; in recover_master()
463 r->res_nodeid = 0; in recover_master()
469 set_new_master(r); in recover_master()
472 recover_idr_add(r); in recover_master()
473 error = dlm_send_rcom_lookup(r, dir_nodeid); in recover_master()
495 static int recover_master_static(struct dlm_rsb *r, unsigned int *count) in recover_master_static() argument
497 int dir_nodeid = dlm_dir_nodeid(r); in recover_master_static()
503 dlm_purge_mstcpy_locks(r); in recover_master_static()
504 r->res_master_nodeid = dir_nodeid; in recover_master_static()
505 r->res_nodeid = new_master; in recover_master_static()
506 set_new_master(r); in recover_master_static()
523 struct dlm_rsb *r; in dlm_recover_masters() local
532 list_for_each_entry(r, &ls->ls_root_list, res_root_list) { in dlm_recover_masters()
539 lock_rsb(r); in dlm_recover_masters()
541 error = recover_master_static(r, &count); in dlm_recover_masters()
543 error = recover_master(r, &count); in dlm_recover_masters()
544 unlock_rsb(r); in dlm_recover_masters()
566 struct dlm_rsb *r; in dlm_recover_master_reply() local
569 r = recover_idr_find(ls, rc->rc_id); in dlm_recover_master_reply()
570 if (!r) { in dlm_recover_master_reply()
583 lock_rsb(r); in dlm_recover_master_reply()
584 r->res_master_nodeid = ret_nodeid; in dlm_recover_master_reply()
585 r->res_nodeid = new_master; in dlm_recover_master_reply()
586 set_new_master(r); in dlm_recover_master_reply()
587 unlock_rsb(r); in dlm_recover_master_reply()
588 recover_idr_del(r); in dlm_recover_master_reply()
615 static int recover_locks_queue(struct dlm_rsb *r, struct list_head *head) in recover_locks_queue() argument
621 error = dlm_send_rcom_lock(r, lkb); in recover_locks_queue()
624 r->res_recover_locks_count++; in recover_locks_queue()
630 static int recover_locks(struct dlm_rsb *r) in recover_locks() argument
634 lock_rsb(r); in recover_locks()
636 DLM_ASSERT(!r->res_recover_locks_count, dlm_dump_rsb(r);); in recover_locks()
638 error = recover_locks_queue(r, &r->res_grantqueue); in recover_locks()
641 error = recover_locks_queue(r, &r->res_convertqueue); in recover_locks()
644 error = recover_locks_queue(r, &r->res_waitqueue); in recover_locks()
648 if (r->res_recover_locks_count) in recover_locks()
649 recover_list_add(r); in recover_locks()
651 rsb_clear_flag(r, RSB_NEW_MASTER); in recover_locks()
653 unlock_rsb(r); in recover_locks()
659 struct dlm_rsb *r; in dlm_recover_locks() local
663 list_for_each_entry(r, &ls->ls_root_list, res_root_list) { in dlm_recover_locks()
664 if (is_master(r)) { in dlm_recover_locks()
665 rsb_clear_flag(r, RSB_NEW_MASTER); in dlm_recover_locks()
669 if (!rsb_flag(r, RSB_NEW_MASTER)) in dlm_recover_locks()
678 error = recover_locks(r); in dlm_recover_locks()
684 count += r->res_recover_locks_count; in dlm_recover_locks()
697 void dlm_recovered_lock(struct dlm_rsb *r) in dlm_recovered_lock() argument
699 DLM_ASSERT(rsb_flag(r, RSB_NEW_MASTER), dlm_dump_rsb(r);); in dlm_recovered_lock()
701 r->res_recover_locks_count--; in dlm_recovered_lock()
702 if (!r->res_recover_locks_count) { in dlm_recovered_lock()
703 rsb_clear_flag(r, RSB_NEW_MASTER); in dlm_recovered_lock()
704 recover_list_del(r); in dlm_recovered_lock()
707 if (recover_list_empty(r->res_ls)) in dlm_recovered_lock()
708 wake_up(&r->res_ls->ls_wait_general); in dlm_recovered_lock()
731 static void recover_lvb(struct dlm_rsb *r) in recover_lvb() argument
737 int lvblen = r->res_ls->ls_lvblen; in recover_lvb()
739 if (!rsb_flag(r, RSB_NEW_MASTER2) && in recover_lvb()
740 rsb_flag(r, RSB_RECOVER_LVB_INVAL)) { in recover_lvb()
742 rsb_set_flag(r, RSB_VALNOTVALID); in recover_lvb()
746 if (!rsb_flag(r, RSB_NEW_MASTER2)) in recover_lvb()
752 list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { in recover_lvb()
769 list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { in recover_lvb()
792 rsb_set_flag(r, RSB_VALNOTVALID); in recover_lvb()
794 if (!r->res_lvbptr) { in recover_lvb()
795 r->res_lvbptr = dlm_allocate_lvb(r->res_ls); in recover_lvb()
796 if (!r->res_lvbptr) in recover_lvb()
801 r->res_lvbseq = lkb->lkb_lvbseq; in recover_lvb()
802 memcpy(r->res_lvbptr, lkb->lkb_lvbptr, lvblen); in recover_lvb()
804 r->res_lvbseq = high_lkb->lkb_lvbseq; in recover_lvb()
805 memcpy(r->res_lvbptr, high_lkb->lkb_lvbptr, lvblen); in recover_lvb()
807 r->res_lvbseq = 0; in recover_lvb()
808 memset(r->res_lvbptr, 0, lvblen); in recover_lvb()
817 static void recover_conversion(struct dlm_rsb *r) in recover_conversion() argument
819 struct dlm_ls *ls = r->res_ls; in recover_conversion()
823 list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { in recover_conversion()
831 list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { in recover_conversion()
850 static void recover_grant(struct dlm_rsb *r) in recover_grant() argument
852 if (!list_empty(&r->res_waitqueue) || !list_empty(&r->res_convertqueue)) in recover_grant()
853 rsb_set_flag(r, RSB_RECOVER_GRANT); in recover_grant()
858 struct dlm_rsb *r; in dlm_recover_rsbs() local
862 list_for_each_entry(r, &ls->ls_root_list, res_root_list) { in dlm_recover_rsbs()
863 lock_rsb(r); in dlm_recover_rsbs()
864 if (is_master(r)) { in dlm_recover_rsbs()
865 if (rsb_flag(r, RSB_RECOVER_CONVERT)) in dlm_recover_rsbs()
866 recover_conversion(r); in dlm_recover_rsbs()
870 recover_lvb(r); in dlm_recover_rsbs()
872 if (rsb_flag(r, RSB_NEW_MASTER2)) in dlm_recover_rsbs()
873 recover_grant(r); in dlm_recover_rsbs()
876 rsb_clear_flag(r, RSB_VALNOTVALID); in dlm_recover_rsbs()
878 rsb_clear_flag(r, RSB_RECOVER_CONVERT); in dlm_recover_rsbs()
879 rsb_clear_flag(r, RSB_RECOVER_LVB_INVAL); in dlm_recover_rsbs()
880 rsb_clear_flag(r, RSB_NEW_MASTER2); in dlm_recover_rsbs()
881 unlock_rsb(r); in dlm_recover_rsbs()
894 struct dlm_rsb *r; in dlm_create_root_list() local
907 r = rb_entry(n, struct dlm_rsb, res_hashnode); in dlm_create_root_list()
908 list_add(&r->res_root_list, &ls->ls_root_list); in dlm_create_root_list()
909 dlm_hold_rsb(r); in dlm_create_root_list()
923 struct dlm_rsb *r, *safe; in dlm_release_root_list() local
926 list_for_each_entry_safe(r, safe, &ls->ls_root_list, res_root_list) { in dlm_release_root_list()
927 list_del_init(&r->res_root_list); in dlm_release_root_list()
928 dlm_put_rsb(r); in dlm_release_root_list()
936 struct dlm_rsb *r; in dlm_clear_toss() local
944 r = rb_entry(n, struct dlm_rsb, res_hashnode); in dlm_clear_toss()
946 dlm_free_rsb(r); in dlm_clear_toss()