GOTO(out, rc);
ptlrpc_activate_import(imp, true);
- LCONSOLE_INFO("%s: Connection restored to %s (at %s)\n",
- imp->imp_obd->obd_name,
- obd_uuid2str(&conn->c_remote_uuid),
- obd_import_nid2str(imp));
+ CDEBUG_LIMIT(imp->imp_was_idle ?
+ imp->imp_idle_debug : D_CONSOLE,
+ "%s: Connection restored to %s (at %s)\n",
+ imp->imp_obd->obd_name,
+ obd_uuid2str(&conn->c_remote_uuid),
+ obd_import_nid2str(imp));
+ spin_lock(&imp->imp_lock);
+ imp->imp_was_idle = 0;
+ spin_unlock(&imp->imp_lock);
}
if (imp->imp_state == LUSTRE_IMP_FULL) {
spin_unlock(&imp->imp_lock);
if (ptlrpc_import_in_recovery(imp)) {
- struct l_wait_info lwi;
long timeout_jiffies;
time64_t timeout;
req_portal = imp->imp_client->cli_request_portal;
idx = import_at_get_index(imp, req_portal);
timeout = at_get(&imp->imp_at.iat_service_estimate[idx]);
- }
+ }
timeout_jiffies = cfs_time_seconds(timeout);
- lwi = LWI_TIMEOUT_INTR(max_t(long, timeout_jiffies, 1),
- back_to_sleep, LWI_ON_SIGNAL_NOOP, NULL);
- rc = l_wait_event(imp->imp_recovery_waitq,
- !ptlrpc_import_in_recovery(imp), &lwi);
-
- }
+ if (wait_event_idle_timeout(imp->imp_recovery_waitq,
+ !ptlrpc_import_in_recovery(imp),
+ timeout_jiffies) == 0 &&
+ l_wait_event_abortable(imp->imp_recovery_waitq,
+ !ptlrpc_import_in_recovery(imp)) < 0)
+ rc = -EINTR;
+ }
spin_lock(&imp->imp_lock);
if (imp->imp_state != LUSTRE_IMP_FULL)
CDEBUG_LIMIT(imp->imp_idle_debug, "%s: disconnect after %llus idle\n",
imp->imp_obd->obd_name,
ktime_get_real_seconds() - imp->imp_last_reply_time);
+
+ /* don't make noise at reconnection */
+ spin_lock(&imp->imp_lock);
+ imp->imp_was_idle = 1;
+ spin_unlock(&imp->imp_lock);
+
req->rq_interpret_reply = ptlrpc_disconnect_idle_interpret;
ptlrpcd_add_req(req);