* intent operation, when server returns -EINPROGRESS for acquiring
* intent lock, we'll retry in after_reply(). */
if (it && (int)lockrep->lock_policy_res2 == -EINPROGRESS) {
- mdc_clear_replay_flag(req, rc);
- ptlrpc_req_finished(req);
- resends++;
-
- CDEBUG(D_HA, "%s: resend:%d op:%d "DFID"/"DFID"\n",
- obddev->obd_name, resends, it->it_op,
- PFID(&op_data->op_fid1), PFID(&op_data->op_fid2));
-
- if (generation == obddev->u.cli.cl_import->imp_generation) {
- goto resend;
- } else {
+ mdc_clear_replay_flag(req, rc);
+ ptlrpc_req_finished(req);
+ if (generation == obddev->u.cli.cl_import->imp_generation) {
+ if (signal_pending(current))
+ RETURN(-EINTR);
+
+ resends++;
+ CDEBUG(D_HA, "%s: resend:%d op:%d "DFID"/"DFID"\n",
+ obddev->obd_name, resends, it->it_op,
+ PFID(&op_data->op_fid1),
+ PFID(&op_data->op_fid2));
+ goto resend;
+ } else {
CDEBUG(D_HA, "resend cross eviction\n");
- RETURN(-EIO);
- }
- }
+ RETURN(-EIO);
+ }
+ }
rc = mdc_finish_enqueue(exp, req, einfo, it, lockh, rc);
if (rc < 0) {
level = LUSTRE_IMP_RECOVER;
goto resend;
} else if (rc == -EINPROGRESS) {
- /* Retry create infinitely until succeed or get other
- * error code. */
- ptlrpc_req_finished(req);
- resends++;
-
- CDEBUG(D_HA, "%s: resend:%d create on "DFID"/"DFID"\n",
- exp->exp_obd->obd_name, resends,
- PFID(&op_data->op_fid1), PFID(&op_data->op_fid2));
-
- if (generation == import->imp_generation) {
- goto rebuild;
+ /* Retry create infinitely until succeed or get other
+ * error code or interrupted. */
+ ptlrpc_req_finished(req);
+ if (generation == import->imp_generation) {
+ if (signal_pending(current))
+ RETURN(-EINTR);
+
+ resends++;
+ CDEBUG(D_HA, "%s: resend:%d create on "DFID"/"DFID"\n",
+ exp->exp_obd->obd_name, resends,
+ PFID(&op_data->op_fid1),
+ PFID(&op_data->op_fid2));
+ goto rebuild;
} else {
CDEBUG(D_HA, "resend cross eviction\n");
RETURN(-EIO);