// SPDX-License-Identifier: GPL-2.0-only /****************************************************************************** ******************************************************************************* ** ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. ** Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved. ** ** ******************************************************************************* ******************************************************************************/ #include "dlm_internal.h" #include "lockspace.h" #include "member.h" #include "dir.h" #include "ast.h" #include "recover.h" #include "lowcomms.h" #include "lock.h" #include "requestqueue.h" #include "recoverd.h" static int dlm_create_masters_list(struct dlm_ls *ls) { … } static void dlm_release_masters_list(struct dlm_ls *ls) { … } static void dlm_create_root_list(struct dlm_ls *ls, struct list_head *root_list) { … } static void dlm_release_root_list(struct list_head *root_list) { … } /* If the start for which we're re-enabling locking (seq) has been superseded by a newer stop (ls_recover_seq), we need to leave locking disabled. We suspend dlm_recv threads here to avoid the race where dlm_recv a) sees locking stopped and b) adds a message to the requestqueue, but dlm_recoverd enables locking and clears the requestqueue between a and b. */ static int enable_locking(struct dlm_ls *ls, uint64_t seq) { … } static int ls_recover(struct dlm_ls *ls, struct dlm_recover *rv) { … } /* The dlm_ls_start() that created the rv we take here may already have been stopped via dlm_ls_stop(); in that case we need to leave the RECOVERY_STOP flag set. */ static void do_ls_recovery(struct dlm_ls *ls) { … } static int dlm_recoverd(void *arg) { … } int dlm_recoverd_start(struct dlm_ls *ls) { … } void dlm_recoverd_stop(struct dlm_ls *ls) { … } void dlm_recoverd_suspend(struct dlm_ls *ls) { … } void dlm_recoverd_resume(struct dlm_ls *ls) { … }