• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/fs/dlm/

Lines Matching refs:ls

46 	struct dlm_ls *ls = (struct dlm_ls *) data;
47 mod_timer(&ls->ls_timer, jiffies + (dlm_config.ci_recover_timer * HZ));
48 wake_up(&ls->ls_wait_general);
51 int dlm_wait_function(struct dlm_ls *ls, int (*testfn) (struct dlm_ls *ls))
55 init_timer(&ls->ls_timer);
56 ls->ls_timer.function = dlm_wait_timer_fn;
57 ls->ls_timer.data = (long) ls;
58 ls->ls_timer.expires = jiffies + (dlm_config.ci_recover_timer * HZ);
59 add_timer(&ls->ls_timer);
61 wait_event(ls->ls_wait_general, testfn(ls) || dlm_recovery_stopped(ls));
62 del_timer_sync(&ls->ls_timer);
64 if (dlm_recovery_stopped(ls)) {
65 log_debug(ls, "dlm_wait_function aborted");
79 uint32_t dlm_recover_status(struct dlm_ls *ls)
82 spin_lock(&ls->ls_recover_lock);
83 status = ls->ls_recover_status;
84 spin_unlock(&ls->ls_recover_lock);
88 void dlm_set_recover_status(struct dlm_ls *ls, uint32_t status)
90 spin_lock(&ls->ls_recover_lock);
91 ls->ls_recover_status |= status;
92 spin_unlock(&ls->ls_recover_lock);
95 static int wait_status_all(struct dlm_ls *ls, uint32_t wait_status)
97 struct dlm_rcom *rc = (struct dlm_rcom *) ls->ls_recover_buf;
101 list_for_each_entry(memb, &ls->ls_nodes, list) {
104 if (dlm_recovery_stopped(ls)) {
109 error = dlm_rcom_status(ls, memb->nodeid);
124 static int wait_status_low(struct dlm_ls *ls, uint32_t wait_status)
126 struct dlm_rcom *rc = (struct dlm_rcom *) ls->ls_recover_buf;
127 int error = 0, delay = 0, nodeid = ls->ls_low_nodeid;
130 if (dlm_recovery_stopped(ls)) {
135 error = dlm_rcom_status(ls, nodeid);
149 static int wait_status(struct dlm_ls *ls, uint32_t status)
154 if (ls->ls_low_nodeid == dlm_our_nodeid()) {
155 error = wait_status_all(ls, status);
157 dlm_set_recover_status(ls, status_all);
159 error = wait_status_low(ls, status_all);
164 int dlm_recover_members_wait(struct dlm_ls *ls)
166 return wait_status(ls, DLM_RS_NODES);
169 int dlm_recover_directory_wait(struct dlm_ls *ls)
171 return wait_status(ls, DLM_RS_DIR);
174 int dlm_recover_locks_wait(struct dlm_ls *ls)
176 return wait_status(ls, DLM_RS_LOCKS);
179 int dlm_recover_done_wait(struct dlm_ls *ls)
181 return wait_status(ls, DLM_RS_DONE);
196 static int recover_list_empty(struct dlm_ls *ls)
200 spin_lock(&ls->ls_recover_list_lock);
201 empty = list_empty(&ls->ls_recover_list);
202 spin_unlock(&ls->ls_recover_list_lock);
209 struct dlm_ls *ls = r->res_ls;
211 spin_lock(&ls->ls_recover_list_lock);
213 list_add_tail(&r->res_recover_list, &ls->ls_recover_list);
214 ls->ls_recover_list_count++;
217 spin_unlock(&ls->ls_recover_list_lock);
222 struct dlm_ls *ls = r->res_ls;
224 spin_lock(&ls->ls_recover_list_lock);
226 ls->ls_recover_list_count--;
227 spin_unlock(&ls->ls_recover_list_lock);
232 static struct dlm_rsb *recover_list_find(struct dlm_ls *ls, uint64_t id)
236 spin_lock(&ls->ls_recover_list_lock);
238 list_for_each_entry(r, &ls->ls_recover_list, res_recover_list) {
244 spin_unlock(&ls->ls_recover_list_lock);
248 static void recover_list_clear(struct dlm_ls *ls)
252 spin_lock(&ls->ls_recover_list_lock);
253 list_for_each_entry_safe(r, s, &ls->ls_recover_list, res_recover_list) {
257 ls->ls_recover_list_count--;
260 if (ls->ls_recover_list_count != 0) {
261 log_error(ls, "warning: recover_list_count %d",
262 ls->ls_recover_list_count);
263 ls->ls_recover_list_count = 0;
265 spin_unlock(&ls->ls_recover_list_lock);
330 struct dlm_ls *ls = r->res_ls;
336 error = dlm_dir_lookup(ls, our_nodeid, r->res_name,
339 log_error(ls, "recover dir lookup error %d", error);
383 int dlm_recover_masters(struct dlm_ls *ls)
388 log_debug(ls, "dlm_recover_masters");
390 down_read(&ls->ls_root_sem);
391 list_for_each_entry(r, &ls->ls_root_list, res_root_list) {
392 if (dlm_recovery_stopped(ls)) {
393 up_read(&ls->ls_root_sem);
398 if (dlm_no_directory(ls))
401 (dlm_is_removed(ls, r->res_nodeid) ||
409 up_read(&ls->ls_root_sem);
411 log_debug(ls, "dlm_recover_masters %d resources", count);
413 error = dlm_wait_function(ls, &recover_list_empty);
416 recover_list_clear(ls);
420 int dlm_recover_master_reply(struct dlm_ls *ls, struct dlm_rcom *rc)
425 r = recover_list_find(ls, rc->rc_id);
427 log_error(ls, "dlm_recover_master_reply no id %llx",
439 if (recover_list_empty(ls))
440 wake_up(&ls->ls_wait_general);
506 int dlm_recover_locks(struct dlm_ls *ls)
511 log_debug(ls, "dlm_recover_locks");
513 down_read(&ls->ls_root_sem);
514 list_for_each_entry(r, &ls->ls_root_list, res_root_list) {
523 if (dlm_recovery_stopped(ls)) {
525 up_read(&ls->ls_root_sem);
531 up_read(&ls->ls_root_sem);
537 up_read(&ls->ls_root_sem);
539 log_debug(ls, "dlm_recover_locks %d locks", count);
541 error = dlm_wait_function(ls, &recover_list_empty);
544 recover_list_clear(ls);
546 dlm_set_recover_status(ls, DLM_RS_LOCKS);
687 void dlm_recover_rsbs(struct dlm_ls *ls)
692 log_debug(ls, "dlm_recover_rsbs");
694 down_read(&ls->ls_root_sem);
695 list_for_each_entry(r, &ls->ls_root_list, res_root_list) {
709 up_read(&ls->ls_root_sem);
711 log_debug(ls, "dlm_recover_rsbs %d rsbs", count);
716 int dlm_create_root_list(struct dlm_ls *ls)
721 down_write(&ls->ls_root_sem);
722 if (!list_empty(&ls->ls_root_list)) {
723 log_error(ls, "root list not empty");
728 for (i = 0; i < ls->ls_rsbtbl_size; i++) {
729 read_lock(&ls->ls_rsbtbl[i].lock);
730 list_for_each_entry(r, &ls->ls_rsbtbl[i].list, res_hashchain) {
731 list_add(&r->res_root_list, &ls->ls_root_list);
734 read_unlock(&ls->ls_rsbtbl[i].lock);
737 up_write(&ls->ls_root_sem);
741 void dlm_release_root_list(struct dlm_ls *ls)
745 down_write(&ls->ls_root_sem);
746 list_for_each_entry_safe(r, safe, &ls->ls_root_list, res_root_list) {
750 up_write(&ls->ls_root_sem);
753 void dlm_clear_toss_list(struct dlm_ls *ls)
758 for (i = 0; i < ls->ls_rsbtbl_size; i++) {
759 write_lock(&ls->ls_rsbtbl[i].lock);
760 list_for_each_entry_safe(r, safe, &ls->ls_rsbtbl[i].toss,
765 write_unlock(&ls->ls_rsbtbl[i].lock);