Lines Matching defs:ls

28 void dlm_slot_save(struct dlm_ls *ls, struct dlm_rcom *rc,
40 void dlm_slots_copy_out(struct dlm_ls *ls, struct dlm_rcom *rc)
50 for (i = 0; i < ls->ls_slots_size; i++) {
51 slot = &ls->ls_slots[i];
62 static void log_slots(struct dlm_ls *ls, uint32_t gen, int num_slots,
94 log_rinfo(ls, "generation %u slots %d%s", gen, num_slots, line);
97 int dlm_slots_copy_in(struct dlm_ls *ls)
100 struct dlm_rcom *rc = ls->ls_recover_buf;
111 if (gen <= ls->ls_generation) {
112 log_error(ls, "dlm_slots_copy_in gen %u old %u",
113 gen, ls->ls_generation);
115 ls->ls_generation = gen;
123 log_slots(ls, gen, num_slots, ro0, NULL, 0);
125 list_for_each_entry(memb, &ls->ls_nodes, list) {
135 if (ls->ls_slot && ls->ls_slot != memb->slot) {
136 log_error(ls, "dlm_slots_copy_in our slot "
137 "changed %d %d", ls->ls_slot,
142 if (!ls->ls_slot)
143 ls->ls_slot = memb->slot;
147 log_error(ls, "dlm_slots_copy_in nodeid %d no slot",
160 int dlm_slots_assign(struct dlm_ls *ls, int *num_slots, int *slots_size,
174 list_for_each_entry(memb, &ls->ls_nodes, list) {
176 memb->slot = ls->ls_slot;
177 memb->generation = ls->ls_generation;
182 list_for_each_entry(memb, &ls->ls_nodes, list) {
206 log_error(ls, "nodeid %d slot changed %d %d",
222 list_for_each_entry(memb, &ls->ls_nodes, list) {
227 log_error(ls, "invalid slot number %d", memb->slot);
239 list_for_each_entry(memb, &ls->ls_nodes, list) {
253 if (!ls->ls_slot && memb->nodeid == our_nodeid)
254 ls->ls_slot = memb->slot;
259 log_error(ls, "no free slot found");
267 log_slots(ls, gen, num, NULL, array, array_size);
273 log_error(ls, "num_slots %d exceeds max_slots %d",
286 static void add_ordered_member(struct dlm_ls *ls, struct dlm_member *new)
291 struct list_head *head = &ls->ls_nodes;
325 static int dlm_add_member(struct dlm_ls *ls, struct dlm_config_node *node)
344 add_ordered_member(ls, memb);
345 ls->ls_num_nodes++;
360 int dlm_is_member(struct dlm_ls *ls, int nodeid)
362 if (find_memb(&ls->ls_nodes, nodeid))
367 int dlm_is_removed(struct dlm_ls *ls, int nodeid)
369 if (find_memb(&ls->ls_nodes_gone, nodeid))
396 void dlm_clear_members(struct dlm_ls *ls)
398 clear_memb_list(&ls->ls_nodes, remove_remote_member);
399 ls->ls_num_nodes = 0;
402 void dlm_clear_members_gone(struct dlm_ls *ls)
404 clear_memb_list(&ls->ls_nodes_gone, NULL);
407 static void make_member_array(struct dlm_ls *ls)
412 kfree(ls->ls_node_array);
413 ls->ls_node_array = NULL;
415 list_for_each_entry(memb, &ls->ls_nodes, list) {
423 total = ls->ls_num_nodes;
427 ls->ls_total_weight = total;
432 list_for_each_entry(memb, &ls->ls_nodes, list) {
447 ls->ls_node_array = array;
452 static int ping_members(struct dlm_ls *ls, uint64_t seq)
457 list_for_each_entry(memb, &ls->ls_nodes, list) {
458 if (dlm_recovery_stopped(ls)) {
462 error = dlm_rcom_status(ls, memb->nodeid, 0, seq);
467 log_rinfo(ls, "ping_members aborted %d last nodeid %d",
468 error, ls->ls_recover_nodeid);
472 static void dlm_lsop_recover_prep(struct dlm_ls *ls)
474 if (!ls->ls_ops || !ls->ls_ops->recover_prep)
476 ls->ls_ops->recover_prep(ls->ls_ops_arg);
479 static void dlm_lsop_recover_slot(struct dlm_ls *ls, struct dlm_member *memb)
485 if (!ls->ls_ops || !ls->ls_ops->recover_slot)
502 ls->ls_ops->recover_slot(ls->ls_ops_arg, &slot);
505 void dlm_lsop_recover_done(struct dlm_ls *ls)
511 if (!ls->ls_ops || !ls->ls_ops->recover_done)
514 num = ls->ls_num_nodes;
520 list_for_each_entry(memb, &ls->ls_nodes, list) {
522 log_error(ls, "dlm_lsop_recover_done bad num %d", num);
530 ls->ls_ops->recover_done(ls->ls_ops_arg, slots, num,
531 ls->ls_slot, ls->ls_generation);
548 int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out)
561 list_for_each_entry(memb, &ls->ls_nodes_gone, list) {
562 log_rinfo(ls, "prev removed member %d", memb->nodeid);
568 list_for_each_entry_safe(memb, safe, &ls->ls_nodes, list) {
574 log_rinfo(ls, "remove member %d", memb->nodeid);
577 log_rinfo(ls, "remove member %d comm_seq %u %u",
582 list_move(&memb->list, &ls->ls_nodes_gone);
584 ls->ls_num_nodes--;
585 dlm_lsop_recover_slot(ls, memb);
592 if (dlm_is_member(ls, node->nodeid))
594 error = dlm_add_member(ls, node);
598 log_rinfo(ls, "add member %d", node->nodeid);
601 list_for_each_entry(memb, &ls->ls_nodes, list) {
605 ls->ls_low_nodeid = low;
607 make_member_array(ls);
610 error = ping_members(ls, rv->seq);
611 log_rinfo(ls, "dlm_recover_members %d nodes", ls->ls_num_nodes);
618 int dlm_ls_stop(struct dlm_ls *ls)
633 down_write(&ls->ls_recv_active);
641 spin_lock(&ls->ls_recover_lock);
642 set_bit(LSFL_RECOVER_STOP, &ls->ls_flags);
643 new = test_and_clear_bit(LSFL_RUNNING, &ls->ls_flags);
644 ls->ls_recover_seq++;
645 spin_unlock(&ls->ls_recover_lock);
652 up_write(&ls->ls_recv_active);
663 set_bit(LSFL_RECOVER_DOWN, &ls->ls_flags);
664 wake_up_process(ls->ls_recoverd_task);
665 wait_event(ls->ls_recover_lock_wait,
666 test_bit(LSFL_RECOVER_LOCK, &ls->ls_flags));
675 dlm_recoverd_suspend(ls);
677 spin_lock(&ls->ls_recover_lock);
678 kfree(ls->ls_slots);
679 ls->ls_slots = NULL;
680 ls->ls_num_slots = 0;
681 ls->ls_slots_size = 0;
682 ls->ls_recover_status = 0;
683 spin_unlock(&ls->ls_recover_lock);
685 dlm_recoverd_resume(ls);
687 if (!ls->ls_recover_begin)
688 ls->ls_recover_begin = jiffies;
698 dlm_lsop_recover_prep(ls);
703 int dlm_ls_start(struct dlm_ls *ls)
713 error = dlm_config_nodes(ls->ls_name, &nodes, &count);
717 spin_lock(&ls->ls_recover_lock);
721 if (!dlm_locking_stopped(ls)) {
722 spin_unlock(&ls->ls_recover_lock);
723 log_error(ls, "start ignored: lockspace running");
730 rv->seq = ++ls->ls_recover_seq;
731 rv_old = ls->ls_recover_args;
732 ls->ls_recover_args = rv;
733 spin_unlock(&ls->ls_recover_lock);
736 log_error(ls, "unused recovery %llx %d",
742 set_bit(LSFL_RECOVER_WORK, &ls->ls_flags);
743 wake_up_process(ls->ls_recoverd_task);