more information, please refer to bugzilla 17630.
Severity : normal
+Bugzilla : 18674
+Frequency : occasionally during network problems
+Description: client not allowed to reconnect to OST because of active request
+Details : The client also now retries to reconnect to the same server if a
+ connect request failed with EBUSY or -EAGAIN. The patch has not
+ been landed in the previous commits.
+
+Severity : normal
Bugzilla : 19526
Description: can't stat file in some situation.
Details : improve initialize osc date when target is added to mds and
imp_pingable:1, /* pingable */
imp_resend_replay:1, /* resend for replay */
imp_recon_bk:1, /* turn off reconnect if all failovers fail */
- imp_last_recon:1; /* internally used by above */
+ imp_last_recon:1, /* internally used by above */
+ imp_force_reconnect:1; /* import must be reconnected instead of chouse new connection */
__u32 imp_connect_op;
struct obd_connect_data imp_connect_data;
__u64 imp_connect_flags_orig;
}
/* if not found, simply choose the current one */
- if (!imp_conn) {
+ if (!imp_conn || imp->imp_force_reconnect) {
LASSERT(imp->imp_conn_current);
imp_conn = imp->imp_conn_current;
tried_all = 0;
EXIT;
}
+static int ptlrpc_busy_reconnect(int rc)
+{
+ return (rc == -EBUSY) || (rc == -EAGAIN);
+}
+
static int ptlrpc_connect_interpret(struct ptlrpc_request *request,
void * data, int rc)
{
spin_unlock(&imp->imp_lock);
RETURN(0);
}
- spin_unlock(&imp->imp_lock);
- if (rc)
+ if (rc) {
+ /* if this reconnect to busy export - not need select new target
+ * for connecting*/
+ if (ptlrpc_busy_reconnect(rc))
+ imp->imp_force_reconnect = 1;
+ spin_unlock(&imp->imp_lock);
GOTO(out, rc);
+ }
LASSERT(imp->imp_conn_current);
msg_flags = lustre_msg_get_op_flags(request->rq_repmsg);
/* All imports are pingable */
- spin_lock(&imp->imp_lock);
imp->imp_pingable = 1;
+ imp->imp_force_reconnect = 0;
if (aa->pcaa_initial_connect) {
if (msg_flags & MSG_CONNECT_REPLAYABLE) {