Lines Matching refs:r

252 static void recover_list_add(struct dlm_rsb *r)  in recover_list_add()  argument
254 struct dlm_ls *ls = r->res_ls; in recover_list_add()
257 if (list_empty(&r->res_recover_list)) { in recover_list_add()
258 list_add_tail(&r->res_recover_list, &ls->ls_recover_list); in recover_list_add()
260 dlm_hold_rsb(r); in recover_list_add()
265 static void recover_list_del(struct dlm_rsb *r) in recover_list_del() argument
267 struct dlm_ls *ls = r->res_ls; in recover_list_del()
270 list_del_init(&r->res_recover_list); in recover_list_del()
274 dlm_put_rsb(r); in recover_list_del()
279 struct dlm_rsb *r, *s; in recover_list_clear() local
282 list_for_each_entry_safe(r, s, &ls->ls_recover_list, res_recover_list) { in recover_list_clear()
283 list_del_init(&r->res_recover_list); in recover_list_clear()
284 r->res_recover_locks_count = 0; in recover_list_clear()
285 dlm_put_rsb(r); in recover_list_clear()
309 static int recover_idr_add(struct dlm_rsb *r) in recover_idr_add() argument
311 struct dlm_ls *ls = r->res_ls; in recover_idr_add()
316 if (r->res_id) { in recover_idr_add()
320 rv = idr_alloc(&ls->ls_recover_idr, r, 1, 0, GFP_NOWAIT); in recover_idr_add()
324 r->res_id = rv; in recover_idr_add()
326 dlm_hold_rsb(r); in recover_idr_add()
334 static void recover_idr_del(struct dlm_rsb *r) in recover_idr_del() argument
336 struct dlm_ls *ls = r->res_ls; in recover_idr_del()
339 idr_remove(&ls->ls_recover_idr, r->res_id); in recover_idr_del()
340 r->res_id = 0; in recover_idr_del()
344 dlm_put_rsb(r); in recover_idr_del()
349 struct dlm_rsb *r; in recover_idr_find() local
352 r = idr_find(&ls->ls_recover_idr, (int)id); in recover_idr_find()
354 return r; in recover_idr_find()
359 struct dlm_rsb *r; in recover_idr_clear() local
364 idr_for_each_entry(&ls->ls_recover_idr, r, id) { in recover_idr_clear()
366 r->res_id = 0; in recover_idr_clear()
367 r->res_recover_locks_count = 0; in recover_idr_clear()
370 dlm_put_rsb(r); in recover_idr_clear()
415 static void set_master_lkbs(struct dlm_rsb *r) in set_master_lkbs() argument
417 set_lock_master(&r->res_grantqueue, r->res_nodeid); in set_master_lkbs()
418 set_lock_master(&r->res_convertqueue, r->res_nodeid); in set_master_lkbs()
419 set_lock_master(&r->res_waitqueue, r->res_nodeid); in set_master_lkbs()
429 static void set_new_master(struct dlm_rsb *r) in set_new_master() argument
431 set_master_lkbs(r); in set_new_master()
432 rsb_set_flag(r, RSB_NEW_MASTER); in set_new_master()
433 rsb_set_flag(r, RSB_NEW_MASTER2); in set_new_master()
446 static int recover_master(struct dlm_rsb *r, unsigned int *count) in recover_master() argument
448 struct dlm_ls *ls = r->res_ls; in recover_master()
453 if (is_master(r)) in recover_master()
456 is_removed = dlm_is_removed(ls, r->res_nodeid); in recover_master()
458 if (!is_removed && !rsb_flag(r, RSB_NEW_MASTER)) in recover_master()
462 dir_nodeid = dlm_dir_nodeid(r); in recover_master()
466 r->res_master_nodeid = our_nodeid; in recover_master()
467 r->res_nodeid = 0; in recover_master()
473 set_new_master(r); in recover_master()
476 recover_idr_add(r); in recover_master()
477 error = dlm_send_rcom_lookup(r, dir_nodeid); in recover_master()
499 static int recover_master_static(struct dlm_rsb *r, unsigned int *count) in recover_master_static() argument
501 int dir_nodeid = dlm_dir_nodeid(r); in recover_master_static()
507 dlm_purge_mstcpy_locks(r); in recover_master_static()
508 r->res_master_nodeid = dir_nodeid; in recover_master_static()
509 r->res_nodeid = new_master; in recover_master_static()
510 set_new_master(r); in recover_master_static()
527 struct dlm_rsb *r; in dlm_recover_masters() local
536 list_for_each_entry(r, &ls->ls_root_list, res_root_list) { in dlm_recover_masters()
543 lock_rsb(r); in dlm_recover_masters()
545 error = recover_master_static(r, &count); in dlm_recover_masters()
547 error = recover_master(r, &count); in dlm_recover_masters()
548 unlock_rsb(r); in dlm_recover_masters()
570 struct dlm_rsb *r; in dlm_recover_master_reply() local
573 r = recover_idr_find(ls, rc->rc_id); in dlm_recover_master_reply()
574 if (!r) { in dlm_recover_master_reply()
587 lock_rsb(r); in dlm_recover_master_reply()
588 r->res_master_nodeid = ret_nodeid; in dlm_recover_master_reply()
589 r->res_nodeid = new_master; in dlm_recover_master_reply()
590 set_new_master(r); in dlm_recover_master_reply()
591 unlock_rsb(r); in dlm_recover_master_reply()
592 recover_idr_del(r); in dlm_recover_master_reply()
619 static int recover_locks_queue(struct dlm_rsb *r, struct list_head *head) in recover_locks_queue() argument
625 error = dlm_send_rcom_lock(r, lkb); in recover_locks_queue()
628 r->res_recover_locks_count++; in recover_locks_queue()
634 static int recover_locks(struct dlm_rsb *r) in recover_locks() argument
638 lock_rsb(r); in recover_locks()
640 DLM_ASSERT(!r->res_recover_locks_count, dlm_dump_rsb(r);); in recover_locks()
642 error = recover_locks_queue(r, &r->res_grantqueue); in recover_locks()
645 error = recover_locks_queue(r, &r->res_convertqueue); in recover_locks()
648 error = recover_locks_queue(r, &r->res_waitqueue); in recover_locks()
652 if (r->res_recover_locks_count) in recover_locks()
653 recover_list_add(r); in recover_locks()
655 rsb_clear_flag(r, RSB_NEW_MASTER); in recover_locks()
657 unlock_rsb(r); in recover_locks()
663 struct dlm_rsb *r; in dlm_recover_locks() local
667 list_for_each_entry(r, &ls->ls_root_list, res_root_list) { in dlm_recover_locks()
668 if (is_master(r)) { in dlm_recover_locks()
669 rsb_clear_flag(r, RSB_NEW_MASTER); in dlm_recover_locks()
673 if (!rsb_flag(r, RSB_NEW_MASTER)) in dlm_recover_locks()
682 error = recover_locks(r); in dlm_recover_locks()
688 count += r->res_recover_locks_count; in dlm_recover_locks()
701 void dlm_recovered_lock(struct dlm_rsb *r) in dlm_recovered_lock() argument
703 DLM_ASSERT(rsb_flag(r, RSB_NEW_MASTER), dlm_dump_rsb(r);); in dlm_recovered_lock()
705 r->res_recover_locks_count--; in dlm_recovered_lock()
706 if (!r->res_recover_locks_count) { in dlm_recovered_lock()
707 rsb_clear_flag(r, RSB_NEW_MASTER); in dlm_recovered_lock()
708 recover_list_del(r); in dlm_recovered_lock()
711 if (recover_list_empty(r->res_ls)) in dlm_recovered_lock()
712 wake_up(&r->res_ls->ls_wait_general); in dlm_recovered_lock()
735 static void recover_lvb(struct dlm_rsb *r) in recover_lvb() argument
741 int lvblen = r->res_ls->ls_lvblen; in recover_lvb()
743 if (!rsb_flag(r, RSB_NEW_MASTER2) && in recover_lvb()
744 rsb_flag(r, RSB_RECOVER_LVB_INVAL)) { in recover_lvb()
746 rsb_set_flag(r, RSB_VALNOTVALID); in recover_lvb()
750 if (!rsb_flag(r, RSB_NEW_MASTER2)) in recover_lvb()
756 list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { in recover_lvb()
773 list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { in recover_lvb()
796 rsb_set_flag(r, RSB_VALNOTVALID); in recover_lvb()
798 if (!r->res_lvbptr) { in recover_lvb()
799 r->res_lvbptr = dlm_allocate_lvb(r->res_ls); in recover_lvb()
800 if (!r->res_lvbptr) in recover_lvb()
805 r->res_lvbseq = lkb->lkb_lvbseq; in recover_lvb()
806 memcpy(r->res_lvbptr, lkb->lkb_lvbptr, lvblen); in recover_lvb()
808 r->res_lvbseq = high_lkb->lkb_lvbseq; in recover_lvb()
809 memcpy(r->res_lvbptr, high_lkb->lkb_lvbptr, lvblen); in recover_lvb()
811 r->res_lvbseq = 0; in recover_lvb()
812 memset(r->res_lvbptr, 0, lvblen); in recover_lvb()
821 static void recover_conversion(struct dlm_rsb *r) in recover_conversion() argument
823 struct dlm_ls *ls = r->res_ls; in recover_conversion()
827 list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { in recover_conversion()
835 list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { in recover_conversion()
854 static void recover_grant(struct dlm_rsb *r) in recover_grant() argument
856 if (!list_empty(&r->res_waitqueue) || !list_empty(&r->res_convertqueue)) in recover_grant()
857 rsb_set_flag(r, RSB_RECOVER_GRANT); in recover_grant()
862 struct dlm_rsb *r; in dlm_recover_rsbs() local
866 list_for_each_entry(r, &ls->ls_root_list, res_root_list) { in dlm_recover_rsbs()
867 lock_rsb(r); in dlm_recover_rsbs()
868 if (is_master(r)) { in dlm_recover_rsbs()
869 if (rsb_flag(r, RSB_RECOVER_CONVERT)) in dlm_recover_rsbs()
870 recover_conversion(r); in dlm_recover_rsbs()
874 recover_lvb(r); in dlm_recover_rsbs()
876 if (rsb_flag(r, RSB_NEW_MASTER2)) in dlm_recover_rsbs()
877 recover_grant(r); in dlm_recover_rsbs()
880 rsb_clear_flag(r, RSB_VALNOTVALID); in dlm_recover_rsbs()
882 rsb_clear_flag(r, RSB_RECOVER_CONVERT); in dlm_recover_rsbs()
883 rsb_clear_flag(r, RSB_RECOVER_LVB_INVAL); in dlm_recover_rsbs()
884 rsb_clear_flag(r, RSB_NEW_MASTER2); in dlm_recover_rsbs()
885 unlock_rsb(r); in dlm_recover_rsbs()
898 struct dlm_rsb *r; in dlm_create_root_list() local
911 r = rb_entry(n, struct dlm_rsb, res_hashnode); in dlm_create_root_list()
912 list_add(&r->res_root_list, &ls->ls_root_list); in dlm_create_root_list()
913 dlm_hold_rsb(r); in dlm_create_root_list()
927 struct dlm_rsb *r, *safe; in dlm_release_root_list() local
930 list_for_each_entry_safe(r, safe, &ls->ls_root_list, res_root_list) { in dlm_release_root_list()
931 list_del_init(&r->res_root_list); in dlm_release_root_list()
932 dlm_put_rsb(r); in dlm_release_root_list()
940 struct dlm_rsb *r; in dlm_clear_toss() local
948 r = rb_entry(n, struct dlm_rsb, res_hashnode); in dlm_clear_toss()
950 dlm_free_rsb(r); in dlm_clear_toss()