- if (!cfs_list_empty(&obd->obd_req_replay_queue)) {
- req = cfs_list_entry(obd->obd_req_replay_queue.next,
- struct ptlrpc_request, rq_list);
- req_transno = lustre_msg_get_transno(req->rq_reqmsg);
- } else {
- req_transno = 0;
- }
-
- connected = cfs_atomic_read(&obd->obd_connected_clients);
- completed = connected - cfs_atomic_read(&obd->obd_req_replay_clients);
- queue_len = obd->obd_requests_queued_for_recovery;
- next_transno = obd->obd_next_recovery_transno;
-
- CDEBUG(D_HA, "max: %d, connected: %d, completed: %d, queue_len: %d, "
- "req_transno: "LPU64", next_transno: "LPU64"\n",
- obd->obd_max_recoverable_clients, connected, completed,
- queue_len, req_transno, next_transno);
-
- if (obd->obd_abort_recovery) {
- CDEBUG(D_HA, "waking for aborted recovery\n");
- wake_up = 1;
- } else if (obd->obd_recovery_expired) {
- CDEBUG(D_HA, "waking for expired recovery\n");
- wake_up = 1;
- } else if (cfs_atomic_read(&obd->obd_req_replay_clients) == 0) {
- CDEBUG(D_HA, "waking for completed recovery\n");
- wake_up = 1;
- } else if (req_transno == next_transno) {
- CDEBUG(D_HA, "waking for next ("LPD64")\n", next_transno);
- wake_up = 1;
- } else if (queue_len == cfs_atomic_read(&obd->obd_req_replay_clients)) {
- int d_lvl = D_HA;
- /** handle gaps occured due to lost reply or VBR */
- LASSERTF(req_transno >= next_transno,
- "req_transno: "LPU64", next_transno: "LPU64"\n",
- req_transno, next_transno);
- if (req_transno > obd->obd_last_committed &&
- !obd->obd_version_recov)
- d_lvl = D_ERROR;
- CDEBUG(d_lvl,
- "%s: waking for gap in transno, VBR is %s (skip: "
- LPD64", ql: %d, comp: %d, conn: %d, next: "LPD64
- ", last_committed: "LPD64")\n",
- obd->obd_name, obd->obd_version_recov ? "ON" : "OFF",
- next_transno, queue_len, completed, connected,
- req_transno, obd->obd_last_committed);
- obd->obd_next_recovery_transno = req_transno;
- wake_up = 1;
- } else if (OBD_FAIL_CHECK(OBD_FAIL_MDS_RECOVERY_ACCEPTS_GAPS)) {
- CDEBUG(D_HA, "accepting transno gaps is explicitly allowed"
- " by fail_lock, waking up ("LPD64")\n", next_transno);
- obd->obd_next_recovery_transno = req_transno;
- wake_up = 1;
- }
+ if (!list_empty(&obd->obd_req_replay_queue)) {
+ req = list_entry(obd->obd_req_replay_queue.next,
+ struct ptlrpc_request, rq_list);
+ req_transno = lustre_msg_get_transno(req->rq_reqmsg);
+ } else {
+ req_transno = 0;
+ }
+
+ connected = atomic_read(&obd->obd_connected_clients);
+ completed = connected - atomic_read(&obd->obd_req_replay_clients);
+ queue_len = obd->obd_requests_queued_for_recovery;
+ next_transno = obd->obd_next_recovery_transno;
+
+ CDEBUG(D_HA, "max: %d, connected: %d, completed: %d, queue_len: %d, "
+ "req_transno: "LPU64", next_transno: "LPU64"\n",
+ obd->obd_max_recoverable_clients, connected, completed,
+ queue_len, req_transno, next_transno);
+
+ if (obd->obd_abort_recovery) {
+ CDEBUG(D_HA, "waking for aborted recovery\n");
+ wake_up = 1;
+ } else if (obd->obd_recovery_expired) {
+ CDEBUG(D_HA, "waking for expired recovery\n");
+ wake_up = 1;
+ } else if (req_transno == next_transno) {
+ CDEBUG(D_HA, "waking for next ("LPD64")\n", next_transno);
+ wake_up = 1;
+ } else if (queue_len > 0 &&
+ queue_len == atomic_read(&obd->obd_req_replay_clients)) {
+ int d_lvl = D_HA;
+ /** handle gaps occured due to lost reply or VBR */
+ LASSERTF(req_transno >= next_transno,
+ "req_transno: "LPU64", next_transno: "LPU64"\n",
+ req_transno, next_transno);
+ if (req_transno > obd->obd_last_committed &&
+ !obd->obd_version_recov)
+ d_lvl = D_ERROR;
+ CDEBUG(d_lvl,
+ "%s: waking for gap in transno, VBR is %s (skip: "
+ LPD64", ql: %d, comp: %d, conn: %d, next: "LPD64
+ ", last_committed: "LPD64")\n",
+ obd->obd_name, obd->obd_version_recov ? "ON" : "OFF",
+ next_transno, queue_len, completed, connected,
+ req_transno, obd->obd_last_committed);
+ obd->obd_next_recovery_transno = req_transno;
+ wake_up = 1;
+ } else if (atomic_read(&obd->obd_req_replay_clients) == 0) {
+ CDEBUG(D_HA, "waking for completed recovery\n");
+ wake_up = 1;
+ } else if (OBD_FAIL_CHECK(OBD_FAIL_MDS_RECOVERY_ACCEPTS_GAPS)) {
+ CDEBUG(D_HA, "accepting transno gaps is explicitly allowed"
+ " by fail_lock, waking up ("LPD64")\n", next_transno);
+ obd->obd_next_recovery_transno = req_transno;
+ wake_up = 1;
+ }