sema_init(&cli->cl_sem, 1);
cli->cl_conn_count = 0;
- memcpy(server_uuid.uuid, lcfg->lcfg_inlbuf2, min(lcfg->lcfg_inllen2,
- sizeof(server_uuid)));
+ memcpy(server_uuid.uuid, lcfg->lcfg_inlbuf2,
+ min_t(unsigned int, lcfg->lcfg_inllen2, sizeof(server_uuid)));
cli->cl_dirty = 0;
cli->cl_avail_grant = 0;
INIT_LIST_HEAD(&cli->cl_cache_waiters);
INIT_LIST_HEAD(&cli->cl_loi_ready_list);
INIT_LIST_HEAD(&cli->cl_loi_write_list);
+ INIT_LIST_HEAD(&cli->cl_loi_read_list);
spin_lock_init(&cli->cl_loi_list_lock);
cli->cl_brw_in_flight = 0;
spin_lock_init(&cli->cl_read_rpc_hist.oh_lock);
spin_lock_init(&cli->cl_write_rpc_hist.oh_lock);
spin_lock_init(&cli->cl_read_page_hist.oh_lock);
spin_lock_init(&cli->cl_write_page_hist.oh_lock);
- cli->cl_max_pages_per_rpc = PTL_MD_MAX_PAGES;
+ cli->cl_max_pages_per_rpc = PTLRPC_MAX_BRW_PAGES;
cli->cl_max_rpcs_in_flight = OSC_MAX_RIF_DEFAULT;
ldlm_get_ref();
GOTO(out_ldlm, rc);
}
+ ptlrpc_pinger_add_import(imp);
EXIT;
if (rc) {
/* Yeah, obd_no_recov also (mainly) means "forced shutdown". */
if (obd->obd_no_recov)
- ptlrpc_set_import_active(imp, 0);
+ ptlrpc_invalidate_import(imp, 0);
else
rc = ptlrpc_disconnect_import(imp);
struct lustre_handle *hdl;
hdl = &exp->exp_imp_reverse->imp_remote_handle;
/* Might be a re-connect after a partition. */
- if (!memcmp(&conn->cookie, &hdl->cookie, sizeof conn->cookie)) {
+#warning "FIXME ASAP"
+ memcpy(&hdl->cookie, &conn->cookie, sizeof(conn->cookie));
+ if (1 || !memcmp(&conn->cookie, &hdl->cookie, sizeof conn->cookie)) {
CERROR("%s reconnecting\n", cluuid->uuid);
conn->cookie = exp->exp_handle.h_cookie;
- RETURN(EALREADY);
+ /*RETURN(EALREADY);*/
+ RETURN(0);
} else {
CERROR("%s reconnecting from %s, "
"handle mismatch (ours "LPX64", theirs "
struct list_head *p;
char *str, *tmp;
int rc = 0, abort_recovery;
+ unsigned long flags;
ENTRY;
+ OBD_RACE(OBD_FAIL_TGT_CONN_RACE);
+
LASSERT_REQSWAB (req, 0);
str = lustre_msg_string(req->rq_reqmsg, 0, sizeof(tgtuuid) - 1);
if (str == NULL) {
if (!target) {
target = class_name2obd(str);
}
-
+
if (!target || target->obd_stopping || !target->obd_set_up) {
CERROR("UUID '%s' is not available for connect\n", str);
+
GOTO(out, rc = -ENODEV);
}
} else if (req->rq_reqmsg->conn_cnt == 1) {
CERROR("%s reconnected with 1 conn_cnt; cookies not random?\n",
cluuid.uuid);
- GOTO(out, rc = -EALREADY);
+#warning "FIXME ASAP"
+ /*GOTO(out, rc = -EALREADY);*/
}
/* Tell the client if we're in recovery. */
export = req->rq_export = class_conn2export(&conn);
LASSERT(export != NULL);
+ spin_lock_irqsave(&export->exp_lock, flags);
+#warning "FIXME ASAP"
+ if (0 && export->exp_conn_cnt >= req->rq_reqmsg->conn_cnt) {
+ CERROR("%s: already connected at a higher conn_cnt: %d > %d\n",
+ cluuid.uuid, export->exp_conn_cnt,
+ req->rq_reqmsg->conn_cnt);
+ spin_unlock_irqrestore(&export->exp_lock, flags);
+ GOTO(out, rc = -EALREADY);
+ }
+ export->exp_conn_cnt = req->rq_reqmsg->conn_cnt;
+ spin_unlock_irqrestore(&export->exp_lock, flags);
+
/* request from liblustre? */
if (lustre_msg_get_op_flags(req->rq_reqmsg) & MSG_CONNECT_LIBCLIENT)
export->exp_libclient = 1;
export->exp_connection = ptlrpc_get_connection(&req->rq_peer,
&remote_uuid);
- LASSERT(export->exp_conn_cnt < req->rq_reqmsg->conn_cnt);
- export->exp_conn_cnt = req->rq_reqmsg->conn_cnt;
-
if (rc == EALREADY) {
/* We indicate the reconnection in a flag, not an error code. */
lustre_msg_add_op_flags(req->rq_repmsg, MSG_CONNECT_RECONNECT);