X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fldlm%2Fldlm_lib.c;h=4f113f4df496d406ef96d33c1f9dfe8fe75d7fa8;hb=401deb5075f9ab7f6c8c1831c56a84b0134e923c;hp=27876190856c49ba226f408bccd9f608ef0227ef;hpb=164bf598e3e4f738cb31e8422904de6dc614a2f0;p=fs%2Flustre-release.git diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c index 2787619..4f113f4 100644 --- a/lustre/ldlm/ldlm_lib.c +++ b/lustre/ldlm/ldlm_lib.c @@ -102,13 +102,14 @@ int client_obd_setup(struct obd_device *obddev, obd_count len, void *buf) 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(); @@ -255,6 +256,7 @@ int client_connect_import(struct lustre_handle *dlm_handle, GOTO(out_ldlm, rc); } + ptlrpc_pinger_add_import(imp); EXIT; if (rc) { @@ -312,7 +314,7 @@ int client_disconnect_export(struct obd_export *exp, int failover) /* 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); @@ -337,10 +339,13 @@ int target_handle_reconnect(struct lustre_handle *conn, struct obd_export *exp, 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 " @@ -371,8 +376,11 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) 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) { @@ -385,9 +393,10 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) 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); } @@ -442,7 +451,8 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) } 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. */ @@ -497,6 +507,18 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) 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; @@ -506,9 +528,6 @@ int target_handle_connect(struct ptlrpc_request *req, svc_handler_t handler) 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);