Whamcloud - gitweb
LU-5569 ptlrpc: change reverse import life cycle
[fs/lustre-release.git] / lustre / ptlrpc / import.c
index 4185eff..b663ca5 100644 (file)
@@ -40,6 +40,7 @@
 
 #define DEBUG_SUBSYSTEM S_RPC
 
+#include <linux/kthread.h>
 #include <obd_support.h>
 #include <lustre_ha.h>
 #include <lustre_net.h>
@@ -102,6 +103,12 @@ do {                                                                       \
        spin_unlock(&imp->imp_lock);                                    \
 } while(0)
 
+void ptlrpc_import_enter_resend(struct obd_import *imp)
+{
+       IMPORT_SET_STATE(imp, LUSTRE_IMP_RECOVER);
+}
+EXPORT_SYMBOL(ptlrpc_import_enter_resend);
+
 
 static int ptlrpc_connect_interpret(const struct lu_env *env,
                                     struct ptlrpc_request *request,
@@ -405,7 +412,7 @@ void ptlrpc_activate_import(struct obd_import *imp)
 }
 EXPORT_SYMBOL(ptlrpc_activate_import);
 
-static void ptlrpc_pinger_force(struct obd_import *imp)
+void ptlrpc_pinger_force(struct obd_import *imp)
 {
        CDEBUG(D_HA, "%s: waking up pinger s:%s\n", obd2cli_tgt(imp->imp_obd),
               ptlrpc_import_state_name(imp->imp_state));
@@ -417,6 +424,7 @@ static void ptlrpc_pinger_force(struct obd_import *imp)
        if (imp->imp_state != LUSTRE_IMP_CONNECTING)
                ptlrpc_pinger_wake_up();
 }
+EXPORT_SYMBOL(ptlrpc_pinger_force);
 
 void ptlrpc_fail_import(struct obd_import *imp, __u32 conn_cnt)
 {
@@ -727,8 +735,6 @@ int ptlrpc_connect_import(struct obd_import *imp)
         request->rq_timeout = INITIAL_CONNECT_TIMEOUT;
         lustre_msg_set_timeout(request->rq_reqmsg, request->rq_timeout);
 
-        lustre_msg_add_op_flags(request->rq_reqmsg, MSG_CONNECT_NEXT_VER);
-
         request->rq_no_resend = request->rq_no_delay = 1;
         request->rq_send_state = LUSTRE_IMP_CONNECTING;
         /* Allow a slightly larger reply for future growth compatibility */
@@ -756,16 +762,15 @@ int ptlrpc_connect_import(struct obd_import *imp)
                 lustre_msg_add_op_flags(request->rq_reqmsg,
                                         MSG_CONNECT_TRANSNO);
 
-        DEBUG_REQ(D_RPCTRACE, request, "(re)connect request (timeout %d)",
-                  request->rq_timeout);
-        ptlrpcd_add_req(request, PDL_POLICY_ROUND, -1);
-        rc = 0;
+       DEBUG_REQ(D_RPCTRACE, request, "(re)connect request (timeout %d)",
+                 request->rq_timeout);
+       ptlrpcd_add_req(request);
+       rc = 0;
 out:
-        if (rc != 0) {
-                IMPORT_SET_STATE(imp, LUSTRE_IMP_DISCON);
-        }
+       if (rc != 0)
+               IMPORT_SET_STATE(imp, LUSTRE_IMP_DISCON);
 
-        RETURN(rc);
+       RETURN(rc);
 }
 EXPORT_SYMBOL(ptlrpc_connect_import);
 
@@ -897,6 +902,14 @@ static int ptlrpc_connect_set_flags(struct obd_import *imp,
 
        client_adjust_max_dirty(cli);
 
+       /* Update client max modify RPCs in flight with value returned
+        * by the server */
+       if (ocd->ocd_connect_flags & OBD_CONNECT_MULTIMODRPCS)
+               cli->cl_max_mod_rpcs_in_flight = min(
+                                       cli->cl_max_mod_rpcs_in_flight,
+                                       ocd->ocd_maxmodrpcs);
+       else
+               cli->cl_max_mod_rpcs_in_flight = 1;
 
        /* Reset ns_connect_flags only for initial connect. It might be
         * changed in while using FS and if we reset it in reconnect
@@ -912,8 +925,7 @@ static int ptlrpc_connect_set_flags(struct obd_import *imp,
                        ocd->ocd_connect_flags;
        }
 
-       if ((ocd->ocd_connect_flags & OBD_CONNECT_AT) &&
-               (imp->imp_msg_magic == LUSTRE_MSG_MAGIC_V2))
+       if (ocd->ocd_connect_flags & OBD_CONNECT_AT)
                /* We need a per-message support flag, because
                 * a. we don't know if the incoming connect reply
                 *    supports AT or not (in reply_in_callback)
@@ -926,11 +938,7 @@ static int ptlrpc_connect_set_flags(struct obd_import *imp,
        else
                imp->imp_msghdr_flags &= ~MSGHDR_AT_SUPPORT;
 
-       if ((ocd->ocd_connect_flags & OBD_CONNECT_FULL20) &&
-           (imp->imp_msg_magic == LUSTRE_MSG_MAGIC_V2))
-               imp->imp_msghdr_flags |= MSGHDR_CKSUM_INCOMPAT18;
-       else
-               imp->imp_msghdr_flags &= ~MSGHDR_CKSUM_INCOMPAT18;
+       imp->imp_msghdr_flags |= MSGHDR_CKSUM_INCOMPAT18;
 
        return 0;
 }
@@ -1053,7 +1061,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env,
 
        /* The net statistics after (re-)connect is not valid anymore,
         * because may reflect other routing, etc. */
-       at_init(&imp->imp_at.iat_net_latency, 0, 0);
+       at_reinit(&imp->imp_at.iat_net_latency, 0, 0);
        ptlrpc_at_adj_net_latency(request,
                        lustre_msg_get_service_time(request->rq_repmsg));
 
@@ -1338,7 +1346,7 @@ static int signal_completed_replay(struct obd_import *imp)
                req->rq_timeout *= 3;
        req->rq_interpret_reply = completed_replay_interpret;
 
-       ptlrpcd_add_req(req, PDL_POLICY_ROUND, -1);
+       ptlrpcd_add_req(req);
        RETURN(0);
 }
 
@@ -1424,7 +1432,7 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
                {
                struct task_struct *task;
                /* bug 17802:  XXX client_disconnect_export vs connect request
-                * race. if client will evicted at this time, we start
+                * race. if client is evicted at this time then we start
                 * invalidate thread without reference to import and import can
                 * be freed at same time. */
                class_import_get(imp);
@@ -1471,9 +1479,7 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
        }
 
         if (imp->imp_state == LUSTRE_IMP_RECOVER) {
-                CDEBUG(D_HA, "reconnected to %s@%s\n",
-                       obd2cli_tgt(imp->imp_obd),
-                       imp->imp_connection->c_remote_uuid.uuid);
+               struct ptlrpc_connection *conn = imp->imp_connection;
 
                 rc = ptlrpc_resend(imp);
                 if (rc)
@@ -1481,12 +1487,10 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
                 IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL);
                 ptlrpc_activate_import(imp);
 
-                deuuidify(obd2cli_tgt(imp->imp_obd), NULL,
-                          &target_start, &target_len);
-                LCONSOLE_INFO("%s: Connection restored to %.*s (at %s)\n",
-                              imp->imp_obd->obd_name,
-                              target_len, target_start,
-                              libcfs_nid2str(imp->imp_connection->c_peer.nid));
+               LCONSOLE_INFO("%s: Connection restored to %s (at %s)\n",
+                             imp->imp_obd->obd_name,
+                             obd_uuid2str(&conn->c_remote_uuid),
+                             libcfs_nid2str(imp->imp_connection->c_peer.nid));
         }
 
        if (imp->imp_state == LUSTRE_IMP_FULL) {