Whamcloud - gitweb
LU-329 fix missing ost_lock_put() calls
[fs/lustre-release.git] / lustre / ptlrpc / pinger.c
index d2f56f5..6724762 100644 (file)
@@ -105,10 +105,10 @@ int ptlrpc_ping(struct obd_import *imp)
         RETURN(0);
 }
 
-void ptlrpc_update_next_ping(struct obd_import *imp)
+void ptlrpc_update_next_ping(struct obd_import *imp, int soon)
 {
 #ifdef ENABLE_PINGER
-        int time = PING_INTERVAL;
+        int time = soon ? PING_INTERVAL_SHORT : PING_INTERVAL;
         if (imp->imp_state == LUSTRE_IMP_DISCON) {
                 int dtime = max_t(int, CONNECTION_SWITCH_MIN,
                                   AT_OFF ? 0 :
@@ -296,7 +296,7 @@ static int ptlrpc_pinger_main(void *arg)
                             cfs_time_after(imp->imp_next_ping,
                                            cfs_time_add(this_ping,
                                                         cfs_time_seconds(PING_INTERVAL))))
-                                ptlrpc_update_next_ping(imp);
+                                ptlrpc_update_next_ping(imp, 0);
                 }
                 cfs_mutex_up(&pinger_sem);
                 /* update memory usage info */
@@ -406,7 +406,12 @@ int ptlrpc_stop_pinger(void)
 
 void ptlrpc_pinger_sending_on_import(struct obd_import *imp)
 {
-        ptlrpc_update_next_ping(imp);
+        ptlrpc_update_next_ping(imp, 0);
+}
+
+void ptlrpc_pinger_commit_expected(struct obd_import *imp)
+{
+        ptlrpc_update_next_ping(imp, 1);
 }
 
 int ptlrpc_pinger_add_import(struct obd_import *imp)
@@ -420,7 +425,7 @@ int ptlrpc_pinger_add_import(struct obd_import *imp)
                imp->imp_obd->obd_uuid.uuid, obd2cli_tgt(imp->imp_obd));
         /* if we add to pinger we want recovery on this import */
         imp->imp_obd->obd_no_recov = 0;
-        ptlrpc_update_next_ping(imp);
+        ptlrpc_update_next_ping(imp, 0);
         /* XXX sort, blah blah */
         cfs_list_add_tail(&imp->imp_pinger_chain, &pinger_imports);
         class_import_get(imp);
@@ -594,7 +599,7 @@ int ping_evictor_wake(struct obd_export *exp)
 
         obd = class_exp2obd(exp);
         if (cfs_list_empty(&obd->obd_evict_list)) {
-                class_incref(obd, __FUNCTION__, cfs_current());
+                class_incref(obd, "evictor", obd);
                 cfs_list_add(&obd->obd_evict_list, &pet_list);
         }
         cfs_spin_unlock(&pet_lock);
@@ -677,7 +682,7 @@ static int ping_evictor_main(void *arg)
                 cfs_list_del_init(&obd->obd_evict_list);
                 cfs_spin_unlock(&pet_lock);
 
-                class_decref(obd, __FUNCTION__, cfs_current());
+                class_decref(obd, "evictor", obd);
         }
         CDEBUG(D_HA, "Exiting Ping Evictor\n");
 
@@ -902,7 +907,7 @@ void ptlrpc_pinger_sending_on_import(struct obd_import *imp)
 {
 #ifdef ENABLE_PINGER
         cfs_mutex_down(&pinger_sem);
-        ptlrpc_update_next_ping(imp);
+        ptlrpc_update_next_ping(imp, 0);
         if (pinger_args.pd_set == NULL &&
             cfs_time_before(imp->imp_next_ping, pinger_args.pd_next_ping)) {
                 CDEBUG(D_HA, "set next ping to "CFS_TIME_T"(cur "CFS_TIME_T")\n",
@@ -913,6 +918,21 @@ void ptlrpc_pinger_sending_on_import(struct obd_import *imp)
 #endif
 }
 
+void ptlrpc_pinger_commit_expected(struct obd_import *imp)
+{
+#ifdef ENABLE_PINGER
+        cfs_mutex_down(&pinger_sem);
+        ptlrpc_update_next_ping(imp, 1);
+        if (pinger_args.pd_set == NULL &&
+            cfs_time_before(imp->imp_next_ping, pinger_args.pd_next_ping)) {
+                CDEBUG(D_HA,"set next ping to "CFS_TIME_T"(cur "CFS_TIME_T")\n",
+                        imp->imp_next_ping, cfs_time_current());
+                pinger_args.pd_next_ping = imp->imp_next_ping;
+        }
+        cfs_mutex_up(&pinger_sem);
+#endif
+}
+
 int ptlrpc_add_timeout_client(int time, enum timeout_event event,
                               timeout_cb_t cb, void *data,
                               cfs_list_t *obd_list)