/* Turn fail_loc off to prevent it from looping
* forever. */
- OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_UNLINK |
- OBD_FAIL_ONCE);
+ OBD_FAIL_CHECK_QUIET(OBD_FAIL_PTLRPC_LONG_UNLINK |
+ OBD_FAIL_ONCE);
/* Move to next phase if reply was successfully
* unlinked. */
req = list_entry(tmp, struct ptlrpc_request, rq_set_chain);
/* request in-flight? */
- if (!(((req->rq_phase & (RQ_PHASE_RPC |
- RQ_PHASE_UNREGISTERING)) &&
+ if (!(((req->rq_phase &
+ (RQ_PHASE_RPC | RQ_PHASE_UNREGISTERING)) &&
!req->rq_waiting) ||
(req->rq_phase == RQ_PHASE_BULK) ||
(req->rq_phase == RQ_PHASE_NEW)))
continue;
- if (req->rq_timedout) /* already timed out */
+ /* Check those waiting for long reply unlink every one
+ * second. */
+ if (req->rq_phase == RQ_PHASE_NEW) {
+ timeout = 1;
+ break;
+ }
+
+ /* Already timed out. */
+ if (req->rq_timedout)
continue;
if (req->rq_phase == RQ_PHASE_NEW)
- deadline = req->rq_sent; /* delayed send */
+ deadline = req->rq_sent; /* delayed send */
else
deadline = req->rq_deadline;
/* Let's setup deadline for reply unlink. */
if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_LONG_UNLINK) &&
- request->rq_reply_deadline == 0)
+ async && request->rq_reply_deadline == 0)
request->rq_reply_deadline = cfs_time_current_sec()+LONG_UNLINK;
/* Nothing left to do. */