int ptlrpc_ping(struct obd_import *imp)
{
struct ptlrpc_request *req;
- int rc = 0;
ENTRY;
- req = ptlrpc_prep_req(imp, LUSTRE_OBD_VERSION, OBD_PING, 1, NULL, NULL);
- if (req) {
- DEBUG_REQ(D_INFO, req, "pinging %s->%s",
- imp->imp_obd->obd_uuid.uuid,
- obd2cli_tgt(imp->imp_obd));
- req->rq_no_resend = req->rq_no_delay = 1;
- ptlrpc_req_set_repsize(req, 1, NULL);
- req->rq_timeout = PING_INTERVAL;
- ptlrpcd_add_req(req);
- } else {
+ req = ptlrpc_request_alloc_pack(imp, &RQF_OBD_PING, LUSTRE_OBD_VERSION,
+ OBD_PING);
+ if (req == NULL) {
CERROR("OOM trying to ping %s->%s\n",
imp->imp_obd->obd_uuid.uuid,
obd2cli_tgt(imp->imp_obd));
- rc = -ENOMEM;
+ RETURN(-ENOMEM);
}
- RETURN(rc);
+ DEBUG_REQ(D_INFO, req, "pinging %s->%s",
+ imp->imp_obd->obd_uuid.uuid, obd2cli_tgt(imp->imp_obd));
+ req->rq_no_resend = req->rq_no_delay = 1;
+ ptlrpc_request_set_replen(req);
+ req->rq_timeout = PING_INTERVAL;
+ ptlrpcd_add_req(req);
+
+ RETURN(0);
}
void ptlrpc_update_next_ping(struct obd_import *imp)
ptlrpc_update_next_ping(imp);
}
mutex_up(&pinger_sem);
+ /* update memory usage info */
+ obd_update_maxusage();
/* Wait until the next ping time, or until we're stopped. */
time_to_next_ping = cfs_time_sub(cfs_time_add(this_ping,
int ping_evictor_wake(struct obd_export *exp)
{
spin_lock(&pet_lock);
- if (pet_exp) {
+ if (pet_exp || (pet_state != PET_READY)) {
/* eventually the new obd will call here again. */
spin_unlock(&pet_lock);
return 1;
continue;
}
- req = ptlrpc_prep_req(imp, LUSTRE_OBD_VERSION, OBD_PING,
- 1, NULL, NULL);
- if (!req) {
- CERROR("out of memory\n");
+ req = ptlrpc_request_alloc_pack(imp, &RQF_OBD_PING,
+ LUSTRE_OBD_VERSION,
+ OBD_PING);
+ if (req == NULL) {
+ CERROR("OOM trying to ping %s->%s\n",
+ imp->imp_obd->obd_uuid.uuid,
+ obd2cli_tgt(imp->imp_obd));
break;
}
+
req->rq_no_resend = 1;
- ptlrpc_req_set_repsize(req, 1, NULL);
+ ptlrpc_request_set_replen(req);
req->rq_send_state = LUSTRE_IMP_FULL;
req->rq_phase = RQ_PHASE_RPC;
req->rq_import_generation = generation;
ptlrpc_set_add_req(set, req);
} else {
- CDEBUG(D_HA, "don't need to ping %s ("CFS_TIME_T" > "
- CFS_TIME_T")\n", obd2cli_tgt(imp->imp_obd),
+ CDEBUG(D_INFO, "don't need to ping %s ("CFS_TIME_T
+ " > "CFS_TIME_T")\n", obd2cli_tgt(imp->imp_obd),
imp->imp_next_ping, pd->pd_this_ping);
}
}
/* Might be empty, that's OK. */
if (set->set_remaining == 0)
- CDEBUG(D_HA, "nothing to ping\n");
+ CDEBUG(D_RPCTRACE, "nothing to ping\n");
list_for_each(iter, &set->set_requests) {
struct ptlrpc_request *req =
list_entry(iter, struct ptlrpc_request,
rq_set_chain);
- DEBUG_REQ(D_HA, req, "pinging %s->%s",
+ DEBUG_REQ(D_RPCTRACE, req, "pinging %s->%s",
req->rq_import->imp_obd->obd_uuid.uuid,
obd2cli_tgt(req->rq_import->imp_obd));
(void)ptl_send_rpc(req, 0);
rc = ptlrpc_check_set(set);
/* not finished, and we are not expired, simply return */
- if (!rc && cfs_time_before(curtime,
- cfs_time_add(pd->pd_this_ping,
- cfs_time_seconds(PING_INTERVAL)))) {
- CDEBUG(D_HA, "not finished, but also not expired\n");
+ if (!rc && cfs_time_before(curtime, cfs_time_add(pd->pd_this_ping,
+ cfs_time_seconds(PING_INTERVAL)))) {
+ CDEBUG(D_RPCTRACE, "not finished, but also not expired\n");
pd->pd_recursion--;
return 0;
}
continue;
}
- CDEBUG(D_HA, "pinger initiate expire_one_request\n");
+ CDEBUG(D_RPCTRACE, "pinger initiate expire_one_request\n");
ptlrpc_expire_one_request(req);
}
mutex_up(&pinger_sem);
cfs_time_seconds(PING_INTERVAL));
pd->pd_this_ping = 0; /* XXX for debug */
- CDEBUG(D_HA, "finished a round ping\n");
+ CDEBUG(D_INFO, "finished a round ping\n");
pd->pd_recursion--;
return 0;
}
struct obd_import *imp;
ENTRY;
list_for_each_entry(imp, &pinger_imports, imp_pinger_chain) {
- CDEBUG(D_HA, "Checking that we need to do anything about import"
- " %s->%s\n", imp->imp_obd->obd_uuid.uuid,
- obd2cli_tgt(imp->imp_obd));
+ CDEBUG(D_RPCTRACE, "checking import %s->%s\n",
+ imp->imp_obd->obd_uuid.uuid, obd2cli_tgt(imp->imp_obd));
#ifdef ENABLE_LIBLUSTRE_RECOVERY
if (imp->imp_state == LUSTRE_IMP_DISCON && !imp->imp_deactive)
#else