return 0;
                }
        } else {
+               static bool warned;
+
                spin_lock(&imp->imp_lock);
                list_del(&imp->imp_conn_current->oic_item);
                list_add(&imp->imp_conn_current->oic_item, &imp->imp_conn_list);
                        goto out;
                }
 
-               if ((ocd->ocd_connect_flags & OBD_CONNECT_VERSION) &&
+               if (!warned && (ocd->ocd_connect_flags & OBD_CONNECT_VERSION) &&
                    (ocd->ocd_version > LUSTRE_VERSION_CODE +
                                        LUSTRE_VERSION_OFFSET_WARN ||
                     ocd->ocd_version < LUSTRE_VERSION_CODE -
                        /* Sigh, some compilers do not like #ifdef in the middle
                         * of macro arguments
                         */
-                       const char *older = "older. Consider upgrading server or downgrading client"
-                               ;
-                       const char *newer = "newer than client version. Consider upgrading client"
-                                           ;
+                       const char *older = "older than client. Consider upgrading server";
+                       const char *newer = "newer than client. Consider recompiling application";
 
                        LCONSOLE_WARN("Server %s version (%d.%d.%d.%d) is much %s (%s)\n",
                                      obd2cli_tgt(imp->imp_obd),
                                      OBD_OCD_VERSION_FIX(ocd->ocd_version),
                                      ocd->ocd_version > LUSTRE_VERSION_CODE ?
                                      newer : older, LUSTRE_VERSION_STRING);
+                       warned = true;
                }
 
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 2, 50, 0)