static struct list_head timeout_list =
LIST_HEAD_INIT(timeout_list);
-int ptlrpc_pinger_suppress_pings()
+int ptlrpc_pinger_suppress_pings(void)
{
return suppress_pings;
}
imp->imp_force_next_verify = 0;
- spin_unlock(&imp->imp_lock);
-
CDEBUG(level == LUSTRE_IMP_FULL ? D_INFO : D_HA,
"%s->%s: level %s/%u force %u force_next %u deactive %u pingable %u suppress %u\n",
imp->imp_obd->obd_uuid.uuid, obd2cli_tgt(imp->imp_obd),
if (level == LUSTRE_IMP_DISCON && !imp_is_deactive(imp)) {
/* wait for a while before trying recovery again */
imp->imp_next_ping = ptlrpc_next_reconnect(imp);
+ spin_unlock(&imp->imp_lock);
if (!imp->imp_no_pinger_recover ||
imp->imp_connect_error == -EAGAIN)
ptlrpc_initiate_recovery(imp);
- } else if (level != LUSTRE_IMP_FULL ||
- imp->imp_obd->obd_no_recov ||
+ } else if (level != LUSTRE_IMP_FULL || imp->imp_obd->obd_no_recov ||
imp_is_deactive(imp)) {
CDEBUG(D_HA,
"%s->%s: not pinging (in recovery or recovery disabled: %s)\n",
imp->imp_obd->obd_uuid.uuid, obd2cli_tgt(imp->imp_obd),
ptlrpc_import_state_name(level));
- if (force) {
- spin_lock(&imp->imp_lock);
+ if (force)
imp->imp_force_verify = 1;
- spin_unlock(&imp->imp_lock);
- }
+ spin_unlock(&imp->imp_lock);
} else if ((imp->imp_pingable && !suppress) || force_next || force) {
+ spin_unlock(&imp->imp_lock);
ptlrpc_ping(imp);
+ } else {
+ spin_unlock(&imp->imp_lock);
}
}
return 0;
}
-void ptlrpc_pinger_wake_up()
+void ptlrpc_pinger_wake_up(void)
{
#ifdef ENABLE_PINGER
mod_delayed_work(pinger_wq, &ping_work, 0);
static int pet_refcount;
static int pet_state;
static wait_queue_head_t pet_waitq;
-static struct list_head pet_list;
+static LIST_HEAD(pet_list);
static DEFINE_SPINLOCK(pet_lock);
int ping_evictor_wake(struct obd_export *exp)
{
struct obd_device *obd;
struct obd_export *exp;
- struct l_wait_info lwi = { 0 };
time64_t expire_time;
ENTRY;
CDEBUG(D_HA, "Starting Ping Evictor\n");
pet_state = PET_READY;
while (1) {
- l_wait_event(pet_waitq, (!list_empty(&pet_list)) ||
- (pet_state == PET_TERMINATE), &lwi);
+ wait_event_idle(pet_waitq,
+ (!list_empty(&pet_list)) ||
+ (pet_state == PET_TERMINATE));
/* loop until all obd's will be removed */
if ((pet_state == PET_TERMINATE) && list_empty(&pet_list))
if (++pet_refcount > 1)
return;
- INIT_LIST_HEAD(&pet_list);
init_waitqueue_head(&pet_waitq);
task = kthread_run(ping_evictor_main, NULL, "ll_evictor");