spin_lock_init(&cli->cl_write_page_hist.oh_lock);
spin_lock_init(&cli->cl_read_offset_hist.oh_lock);
spin_lock_init(&cli->cl_write_offset_hist.oh_lock);
+#ifdef ENABLE_CHECKSUM
+ cli->cl_checksum = 1;
+#endif
+ atomic_set(&cli->cl_resends, OSC_DEFAULT_RESENDS);
/* This value may be changed at connect time in
ptlrpc_connect_interpret. */
{
ENTRY;
ldlm_put_ref(obddev->obd_force);
-
RETURN(0);
}
if (obd->obd_namespace != NULL)
CERROR("already have namespace!\n");
obd->obd_namespace = ldlm_namespace_new(obd->obd_name,
- LDLM_NAMESPACE_CLIENT);
+ LDLM_NAMESPACE_CLIENT,
+ LDLM_NAMESPACE_GREEDY);
if (obd->obd_namespace == NULL)
GOTO(out_disco, rc = -ENOMEM);
{
struct obd_export *exp = cb_data;
- CDEBUG(D_HA, "%s: committing for initial connect of %s\n",
+ CDEBUG(D_RPCTRACE, "%s: committing for initial connect of %s\n",
obd->obd_name, exp->exp_client_uuid.uuid);
spin_lock(&exp->exp_lock);
OBD_RACE(OBD_FAIL_TGT_CONN_RACE);
- LASSERT_REQSWAB(req, REQ_REC_OFF);
+ lustre_set_req_swabbed(req, REQ_REC_OFF);
str = lustre_msg_string(req->rq_reqmsg, REQ_REC_OFF, sizeof(tgtuuid)-1);
if (str == NULL) {
DEBUG_REQ(D_ERROR, req, "bad target UUID for connect");
Really, class_uuid2obd should take the ref. */
targref = class_incref(target);
- LASSERT_REQSWAB(req, REQ_REC_OFF + 1);
+ lustre_set_req_swabbed(req, REQ_REC_OFF + 1);
str = lustre_msg_string(req->rq_reqmsg, REQ_REC_OFF + 1,
sizeof(cluuid) - 1);
if (str == NULL) {
req->rq_self,
&remote_uuid);
- if (lustre_msg_get_op_flags(req->rq_repmsg) & MSG_CONNECT_RECONNECT) {
- LASSERT(export->exp_imp_reverse);
- sptlrpc_svc_install_rvs_ctx(export->exp_imp_reverse,
- req->rq_svc_ctx);
- GOTO(out, rc = 0);
- }
-
spin_lock_bh(&target->obd_processing_task_lock);
if (target->obd_recovering && !export->exp_in_recovery) {
spin_lock(&export->exp_lock);
OBD_FREE_PTR(req);
}
+#ifdef __KERNEL__
static void target_finish_recovery(struct obd_device *obd)
{
ENTRY;
ptlrpc_free_clone(req);
}
}
+#endif
/* Called from a cleanup function if the device is being cleaned up
forcefully. The exports should all have been disconnected already,
{
spin_lock_bh(&obd->obd_processing_task_lock);
if (obd->obd_recovery_handler
- || timer_pending(&obd->obd_recovery_timer)) {
+ || timer_pending((struct timer_list *)&obd->obd_recovery_timer)) {
spin_unlock_bh(&obd->obd_processing_task_lock);
return;
}
return req->rq_export->exp_obd;
}
+static inline struct ldlm_pool *ldlm_exp2pl(struct obd_export *exp)
+{
+ LASSERT(exp != NULL);
+ return &exp->exp_obd->obd_namespace->ns_pool;
+}
+
+int target_pack_pool_reply(struct ptlrpc_request *req)
+{
+ struct ldlm_pool *pl;
+ ENTRY;
+
+ if (req->rq_export == NULL) {
+ lustre_msg_set_slv(req->rq_repmsg, 0);
+ lustre_msg_set_limit(req->rq_repmsg, 0);
+ RETURN(0);
+ }
+
+ if (!exp_connect_lru_resize(req->rq_export))
+ RETURN(0);
+
+ pl = ldlm_exp2pl(req->rq_export);
+
+ spin_lock(&pl->pl_lock);
+ lustre_msg_set_slv(req->rq_repmsg, ldlm_pool_get_slv(pl));
+ lustre_msg_set_limit(req->rq_repmsg, ldlm_pool_get_limit(pl));
+ spin_unlock(&pl->pl_lock);
+
+ RETURN(0);
+}
+
int target_send_reply_msg(struct ptlrpc_request *req, int rc, int fail_id)
{
if (OBD_FAIL_CHECK(fail_id | OBD_FAIL_ONCE)) {
DEBUG_REQ(D_NET, req, "sending reply");
}
+ target_pack_pool_reply(req);
return (ptlrpc_send_reply(req, 1));
}
struct obd_export *exp;
struct ptlrpc_service *svc;
+ if (req->rq_no_reply)
+ return;
+
svc = req->rq_rqbd->rqbd_service;
rs = req->rq_reply_state;
if (rs == NULL || !rs->rs_difficult) {