Whamcloud - gitweb
LU-13449 tgt: fix recovery timer comparisons
[fs/lustre-release.git] / lustre / ldlm / ldlm_lib.c
index 6d14580..d0c7fd7 100644 (file)
@@ -1138,8 +1138,8 @@ int target_handle_connect(struct ptlrpc_request *req)
                                OBD_CONNECT_MDS_MDS) != 0;
 
                /*
-                * OBD_CONNECT_MNE_SWAB is defined as OBD_CONNECT_MDS_MDS
-                * for Imperative Recovery connection from MGC to MGS.
+                * OBD_CONNECT_MNE_SWAB is removed at 2.14
+                * Checking OBD_CONNECT_FID can be removed in the future.
                 *
                 * Via check OBD_CONNECT_FID, we can distinguish whether
                 * the OBD_CONNECT_MDS_MDS/OBD_CONNECT_MNE_SWAB is from
@@ -1647,8 +1647,8 @@ static void target_finish_recovery(struct lu_target *lut)
                elapsed_time = max_t(time64_t, now - obd->obd_recovery_start,
                                     1);
                LCONSOLE_INFO("%s: Recovery over after %lld:%.02lld, of %d clients %d recovered and %d %s evicted.\n",
-                             obd->obd_name, (s64)elapsed_time / 60,
-                             (s64)elapsed_time % 60,
+                             obd->obd_name, elapsed_time / 60,
+                             elapsed_time % 60,
                              atomic_read(&obd->obd_max_recoverable_clients),
                              atomic_read(&obd->obd_connected_clients),
                              obd->obd_stale_clients,
@@ -1805,7 +1805,7 @@ static void target_start_recovery_timer(struct obd_device *obd)
        hrtimer_start(&obd->obd_recovery_timer, delay, HRTIMER_MODE_ABS);
        spin_unlock(&obd->obd_dev_lock);
 
-       LCONSOLE_WARN("%s: Will be in recovery for at least %lu:%02lu, or until %d client%s reconnect%s\n",
+       LCONSOLE_WARN("%s: Will be in recovery for at least %u:%02u, or until %d client%s reconnect%s\n",
                      obd->obd_name,
                      obd->obd_recovery_timeout / 60,
                      obd->obd_recovery_timeout % 60,
@@ -1823,12 +1823,12 @@ static void target_start_recovery_timer(struct obd_device *obd)
  * at least; otherwise, make sure the recovery timeout value is not less
  * than @dr_timeout.
  */
-static void extend_recovery_timer(struct obd_device *obd, time_t dr_timeout,
+static void extend_recovery_timer(struct obd_device *obd, timeout_t dr_timeout,
                                  bool extend)
 {
        ktime_t left_ns;
-       time_t timeout;
-       time_t left;
+       timeout_t timeout;
+       timeout_t left;
 
        spin_lock(&obd->obd_dev_lock);
        if (!obd->obd_recovering || obd->obd_abort_recovery ||
@@ -1849,16 +1849,17 @@ static void extend_recovery_timer(struct obd_device *obd, time_t dr_timeout,
                 */
                if (dr_timeout > left) {
                        timeout += dr_timeout - left;
-                       timeout = min_t(time_t, obd->obd_recovery_time_hard,
+                       timeout = min_t(timeout_t, obd->obd_recovery_time_hard,
                                        timeout);
                }
        } else {
-               timeout = clamp_t(time_t, dr_timeout, obd->obd_recovery_timeout,
+               timeout = clamp_t(timeout_t, dr_timeout,
+                                 obd->obd_recovery_timeout,
                                  obd->obd_recovery_time_hard);
        }
 
        if (timeout == obd->obd_recovery_time_hard)
-               CWARN("%s: extended recovery timer reached hard limit: %ld, extend: %d\n",
+               CWARN("%s: extended recovery timer reached hard limit: %d, extend: %d\n",
                      obd->obd_name, timeout, extend);
 
        if (obd->obd_recovery_timeout < timeout) {
@@ -1873,7 +1874,7 @@ static void extend_recovery_timer(struct obd_device *obd, time_t dr_timeout,
        }
        spin_unlock(&obd->obd_dev_lock);
 
-       CDEBUG(D_HA, "%s: recovery timer will expire in %ld seconds\n",
+       CDEBUG(D_HA, "%s: recovery timer will expire in %d seconds\n",
                obd->obd_name, left);
 }
 
@@ -1892,40 +1893,40 @@ check_and_start_recovery_timer(struct obd_device *obd,
                               struct ptlrpc_request *req,
                               int new_client)
 {
-       time_t service_time = lustre_msg_get_service_time(req->rq_reqmsg);
+       timeout_t service_timeout = lustre_msg_get_service_timeout(req->rq_reqmsg);
        struct obd_device_target *obt = &obd->u.obt;
 
-       if (!new_client && service_time)
+       if (!new_client && service_timeout)
                /*
                 * Teach server about old server's estimates, as first guess
                 * at how long new requests will take.
                 */
                at_measured(&req->rq_rqbd->rqbd_svcpt->scp_at_estimate,
-                           service_time);
+                           service_timeout);
 
        target_start_recovery_timer(obd);
 
        /*
         * Convert the service time to RPC timeout,
-        * and reuse service_time to limit stack usage.
+        * and reuse service_timeout to limit stack usage.
         */
-       service_time = at_est2timeout(service_time);
+       service_timeout = at_est2timeout(service_timeout);
 
        if (OBD_FAIL_CHECK(OBD_FAIL_TGT_SLUGGISH_NET) &&
-           service_time < at_extra)
-               service_time = at_extra;
+           service_timeout < at_extra)
+               service_timeout = at_extra;
 
        /*
-        * We expect other clients to timeout within service_time, then try
+        * We expect other clients to timeout within service_timeout, then try
         * to reconnect, then try the failover server.  The max delay between
         * connect attempts is SWITCH_MAX + SWITCH_INC + INITIAL.
         */
-       service_time += 2 * INITIAL_CONNECT_TIMEOUT;
+       service_timeout += 2 * INITIAL_CONNECT_TIMEOUT;
 
        LASSERT(obt->obt_magic == OBT_MAGIC);
-       service_time += 2 * (CONNECTION_SWITCH_MAX + CONNECTION_SWITCH_INC);
-       if (service_time > obd->obd_recovery_timeout && !new_client)
-               extend_recovery_timer(obd, service_time, false);
+       service_timeout += 2 * (CONNECTION_SWITCH_MAX + CONNECTION_SWITCH_INC);
+       if (service_timeout > obd->obd_recovery_timeout && !new_client)
+               extend_recovery_timer(obd, service_timeout, false);
 }
 
 /** Health checking routines */
@@ -2277,14 +2278,15 @@ static void handle_recovery_req(struct ptlrpc_thread *thread,
 
        /* don't reset timer for final stage */
        if (!exp_finished(req->rq_export)) {
-               time_t to = obd_timeout;
+               timeout_t timeout = obd_timeout;
 
                /**
-                * Add request timeout to the recovery time so next request from
+                * Add request @timeout to the recovery time so next request from
                 * this client may come in recovery time
                 */
                if (!AT_OFF) {
                        struct ptlrpc_service_part *svcpt;
+                       timeout_t est_timeout;
 
                        svcpt = req->rq_rqbd->rqbd_svcpt;
                        /*
@@ -2294,18 +2296,19 @@ static void handle_recovery_req(struct ptlrpc_thread *thread,
                         * use the maxium timeout here for waiting the client
                         * sending the next req
                         */
-                       to = max_t(time_t,
-                                  at_est2timeout(at_get(&svcpt->scp_at_estimate)),
-                                  lustre_msg_get_timeout(req->rq_reqmsg));
+                       est_timeout = at_get(&svcpt->scp_at_estimate);
+                       timeout = max_t(timeout_t, at_est2timeout(est_timeout),
+                                       lustre_msg_get_timeout(req->rq_reqmsg));
                        /*
                         * Add 2 net_latency, one for balance rq_deadline
                         * (see ptl_send_rpc), one for resend the req to server,
                         * Note: client will pack net_latency in replay req
                         * (see ptlrpc_replay_req)
                         */
-                       to += 2 * lustre_msg_get_service_time(req->rq_reqmsg);
+                       timeout += 2 * lustre_msg_get_service_timeout(req->rq_reqmsg);
                }
-               extend_recovery_timer(class_exp2obd(req->rq_export), to, true);
+               extend_recovery_timer(class_exp2obd(req->rq_export), timeout,
+                                     true);
        }
        EXIT;
 }
@@ -2340,7 +2343,7 @@ static int check_for_recovery_ready(struct lu_target *lut)
                        extend_recovery_timer(obd, obd->obd_recovery_timeout,
                                              true);
                        CDEBUG(D_HA,
-                              "%s update recovery is not ready, extend recovery %lu\n",
+                              "%s update recovery is not ready, extend recovery %d\n",
                               obd->obd_name, obd->obd_recovery_timeout);
                        return 0;
                }
@@ -2763,7 +2766,7 @@ static enum hrtimer_restart target_recovery_expired(struct hrtimer *timer)
        CDEBUG(D_HA,
               "%s: recovery timed out; %d clients are still in recovery after %llu seconds (%d clients connected)\n",
               obd->obd_name, atomic_read(&obd->obd_lock_replay_clients),
-              ktime_get_real_seconds() - obd->obd_recovery_start,
+              ktime_get_seconds() - obd->obd_recovery_start,
               atomic_read(&obd->obd_connected_clients));
 
        obd->obd_recovery_expired = 1;