Lines Matching refs:ls
33 static int enable_locking(struct dlm_ls *ls, uint64_t seq) in enable_locking() argument
37 down_write(&ls->ls_recv_active); in enable_locking()
39 spin_lock(&ls->ls_recover_lock); in enable_locking()
40 if (ls->ls_recover_seq == seq) { in enable_locking()
41 set_bit(LSFL_RUNNING, &ls->ls_flags); in enable_locking()
43 up_write(&ls->ls_in_recovery); in enable_locking()
46 spin_unlock(&ls->ls_recover_lock); in enable_locking()
48 up_write(&ls->ls_recv_active); in enable_locking()
52 static int ls_recover(struct dlm_ls *ls, struct dlm_recover *rv) in ls_recover() argument
57 log_debug(ls, "recover %llx", (unsigned long long)rv->seq); in ls_recover()
59 mutex_lock(&ls->ls_recoverd_active); in ls_recover()
74 dlm_clear_toss_list(ls); in ls_recover()
81 dlm_create_root_list(ls); in ls_recover()
88 error = dlm_recover_members(ls, rv, &neg); in ls_recover()
90 log_debug(ls, "recover_members failed %d", error); in ls_recover()
100 error = dlm_recover_directory(ls); in ls_recover()
102 log_debug(ls, "recover_directory failed %d", error); in ls_recover()
110 error = dlm_recover_directory_wait(ls); in ls_recover()
112 log_debug(ls, "recover_directory_wait failed %d", error); in ls_recover()
122 dlm_recover_waiters_pre(ls); in ls_recover()
124 error = dlm_recovery_stopped(ls); in ls_recover()
128 if (neg || dlm_no_directory(ls)) { in ls_recover()
133 dlm_purge_locks(ls); in ls_recover()
140 error = dlm_recover_masters(ls); in ls_recover()
142 log_debug(ls, "recover_masters failed %d", error); in ls_recover()
150 error = dlm_recover_locks(ls); in ls_recover()
152 log_debug(ls, "recover_locks failed %d", error); in ls_recover()
156 error = dlm_recover_locks_wait(ls); in ls_recover()
158 log_debug(ls, "recover_locks_wait failed %d", error); in ls_recover()
168 dlm_recover_rsbs(ls); in ls_recover()
175 dlm_set_recover_status(ls, DLM_RS_LOCKS); in ls_recover()
177 error = dlm_recover_locks_wait(ls); in ls_recover()
179 log_debug(ls, "recover_locks_wait failed %d", error); in ls_recover()
184 dlm_release_root_list(ls); in ls_recover()
192 dlm_purge_requestqueue(ls); in ls_recover()
194 dlm_set_recover_status(ls, DLM_RS_DONE); in ls_recover()
195 error = dlm_recover_done_wait(ls); in ls_recover()
197 log_debug(ls, "recover_done_wait failed %d", error); in ls_recover()
201 dlm_clear_members_gone(ls); in ls_recover()
203 dlm_adjust_timeouts(ls); in ls_recover()
205 error = enable_locking(ls, rv->seq); in ls_recover()
207 log_debug(ls, "enable_locking failed %d", error); in ls_recover()
211 error = dlm_process_requestqueue(ls); in ls_recover()
213 log_debug(ls, "process_requestqueue failed %d", error); in ls_recover()
217 error = dlm_recover_waiters_post(ls); in ls_recover()
219 log_debug(ls, "recover_waiters_post failed %d", error); in ls_recover()
223 dlm_grant_after_purge(ls); in ls_recover()
227 log_debug(ls, "recover %llx done: %u ms", in ls_recover()
230 mutex_unlock(&ls->ls_recoverd_active); in ls_recover()
235 dlm_release_root_list(ls); in ls_recover()
236 log_debug(ls, "recover %llx error %d", in ls_recover()
238 mutex_unlock(&ls->ls_recoverd_active); in ls_recover()
246 static void do_ls_recovery(struct dlm_ls *ls) in do_ls_recovery() argument
250 spin_lock(&ls->ls_recover_lock); in do_ls_recovery()
251 rv = ls->ls_recover_args; in do_ls_recovery()
252 ls->ls_recover_args = NULL; in do_ls_recovery()
253 if (rv && ls->ls_recover_seq == rv->seq) in do_ls_recovery()
254 clear_bit(LSFL_RECOVERY_STOP, &ls->ls_flags); in do_ls_recovery()
255 spin_unlock(&ls->ls_recover_lock); in do_ls_recovery()
258 ls_recover(ls, rv); in do_ls_recovery()
267 struct dlm_ls *ls; in dlm_recoverd() local
269 ls = dlm_find_lockspace_local(arg); in dlm_recoverd()
270 if (!ls) { in dlm_recoverd()
277 if (!test_bit(LSFL_WORK, &ls->ls_flags)) in dlm_recoverd()
281 if (test_and_clear_bit(LSFL_WORK, &ls->ls_flags)) in dlm_recoverd()
282 do_ls_recovery(ls); in dlm_recoverd()
285 dlm_put_lockspace(ls); in dlm_recoverd()
289 void dlm_recoverd_kick(struct dlm_ls *ls) in dlm_recoverd_kick() argument
291 set_bit(LSFL_WORK, &ls->ls_flags); in dlm_recoverd_kick()
292 wake_up_process(ls->ls_recoverd_task); in dlm_recoverd_kick()
295 int dlm_recoverd_start(struct dlm_ls *ls) in dlm_recoverd_start() argument
300 p = kthread_run(dlm_recoverd, ls, "dlm_recoverd"); in dlm_recoverd_start()
304 ls->ls_recoverd_task = p; in dlm_recoverd_start()
308 void dlm_recoverd_stop(struct dlm_ls *ls) in dlm_recoverd_stop() argument
310 kthread_stop(ls->ls_recoverd_task); in dlm_recoverd_stop()
313 void dlm_recoverd_suspend(struct dlm_ls *ls) in dlm_recoverd_suspend() argument
315 wake_up(&ls->ls_wait_general); in dlm_recoverd_suspend()
316 mutex_lock(&ls->ls_recoverd_active); in dlm_recoverd_suspend()
319 void dlm_recoverd_resume(struct dlm_ls *ls) in dlm_recoverd_resume() argument
321 mutex_unlock(&ls->ls_recoverd_active); in dlm_recoverd_resume()