Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f0af697 authored by Bart Van Assche's avatar Bart Van Assche Committed by Roland Dreier
Browse files

IB/srp: Process all error completions



If the RDMA RC connection is closed, tell the SCSI mid-layer to
terminate all pending commands instead of only the first.

Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Acked-by: default avatarDavid Dillow <dillowda@ornl.gov>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 948d1e88
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -1274,8 +1274,12 @@ static void srp_handle_qp_err(enum ib_wc_status wc_status,
			      enum ib_wc_opcode wc_opcode,
			      struct srp_target_port *target)
{
	shost_printk(KERN_ERR, target->scsi_host, PFX "failed %s status %d\n",
		     wc_opcode & IB_WC_RECV ? "receive" : "send", wc_status);
	if (!target->qp_in_error) {
		shost_printk(KERN_ERR, target->scsi_host,
			     PFX "failed %s status %d\n",
			     wc_opcode & IB_WC_RECV ? "receive" : "send",
			     wc_status);
	}
	target->qp_in_error = true;
}

@@ -1290,7 +1294,6 @@ static void srp_recv_completion(struct ib_cq *cq, void *target_ptr)
			srp_handle_recv(target, &wc);
		} else {
			srp_handle_qp_err(wc.status, wc.opcode, target);
			break;
		}
	}
}
@@ -1307,7 +1310,6 @@ static void srp_send_completion(struct ib_cq *cq, void *target_ptr)
			list_add(&iu->list, &target->free_tx);
		} else {
			srp_handle_qp_err(wc.status, wc.opcode, target);
			break;
		}
	}
}