From: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
To: Roland Dreier <roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: David Dillow <dave-i1Mk8JYDVaaSihdK6806/g@public.gmane.org>,
Vu Pham <vuhuong-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
Sebastian Riemer
<sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>,
Jinpu Wang <jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>,
linux-rdma <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH v3 10/13] IB/srp: Start timers if a transport layer error occurs
Date: Wed, 03 Jul 2013 14:57:44 +0200 [thread overview]
Message-ID: <51D41FC8.6030303@acm.org> (raw)
In-Reply-To: <51D41C03.4020607-HInyCGIudOg@public.gmane.org>
Start the reconnect timer, fast_io_fail timer and dev_loss timers
if a transport layer error occurs.
Signed-off-by: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
Acked-by: David Dillow <dillowda-1Heg1YXhbW8@public.gmane.org>
Cc: Roland Dreier <roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Vu Pham <vu-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: Sebastian Riemer <sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>
---
drivers/infiniband/ulp/srp/ib_srp.c | 19 +++++++++++++++++++
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
2 files changed, 20 insertions(+)
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 0f69ae1..2557b7a 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -595,6 +595,7 @@ static void srp_remove_target(struct srp_target_port *target)
srp_disconnect_target(target);
ib_destroy_cm_id(target->cm_id);
srp_free_target_ib(target);
+ cancel_work_sync(&target->tl_err_work);
srp_rport_put(target->rport);
srp_free_req_data(target);
scsi_host_put(target->scsi_host);
@@ -1364,6 +1365,21 @@ static void srp_handle_recv(struct srp_target_port *target, struct ib_wc *wc)
PFX "Recv failed with error code %d\n", res);
}
+/**
+ * srp_tl_err_work() - handle a transport layer error
+ *
+ * Note: This function may get invoked before the rport has been created,
+ * hence the target->rport test.
+ */
+static void srp_tl_err_work(struct work_struct *work)
+{
+ struct srp_target_port *target;
+
+ target = container_of(work, struct srp_target_port, tl_err_work);
+ if (target->rport)
+ srp_start_tl_fail_timers(target->rport);
+}
+
static void srp_handle_qp_err(enum ib_wc_status wc_status,
enum ib_wc_opcode wc_opcode,
struct srp_target_port *target)
@@ -1373,6 +1389,7 @@ static void srp_handle_qp_err(enum ib_wc_status wc_status,
PFX "failed %s status %d\n",
wc_opcode & IB_WC_RECV ? "receive" : "send",
wc_status);
+ queue_work(system_long_wq, &target->tl_err_work);
}
target->qp_in_error = true;
}
@@ -1735,6 +1752,7 @@ static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event)
if (ib_send_cm_drep(cm_id, NULL, 0))
shost_printk(KERN_ERR, target->scsi_host,
PFX "Sending CM DREP failed\n");
+ queue_work(system_long_wq, &target->tl_err_work);
break;
case IB_CM_TIMEWAIT_EXIT:
@@ -2379,6 +2397,7 @@ static ssize_t srp_create_target(struct device *dev,
sizeof (struct srp_indirect_buf) +
target->cmd_sg_cnt * sizeof (struct srp_direct_buf);
+ INIT_WORK(&target->tl_err_work, srp_tl_err_work);
INIT_WORK(&target->remove_work, srp_remove_work);
spin_lock_init(&target->lock);
INIT_LIST_HEAD(&target->free_tx);
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h
index fda82f7..e45d9d0 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -175,6 +175,7 @@ struct srp_target_port {
struct srp_iu *rx_ring[SRP_RQ_SIZE];
struct srp_request req_ring[SRP_CMD_SQ_SIZE];
+ struct work_struct tl_err_work;
struct work_struct remove_work;
struct list_head list;
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2013-07-03 12:57 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-03 12:41 [PATCH v3 0/13] IB SRP initiator patches for kernel 3.11 Bart Van Assche
2013-07-03 12:53 ` [PATCH v3 06/13] IB/srp: Keep rport as long as the IB transport layer Bart Van Assche
[not found] ` <51D41C03.4020607-HInyCGIudOg@public.gmane.org>
2013-07-03 12:43 ` [PATCH v3 01/13] IB/srp: Fix remove_one crash due to resource exhaustion Bart Van Assche
2013-07-03 12:44 ` [PATCH v3 02/13] IB/srp: Avoid that srp_reset_host() is skipped after a TL error Bart Van Assche
2013-07-03 12:45 ` [PATCH v3 03/13] IB/srp: Fail I/O fast if target offline Bart Van Assche
2013-07-03 12:50 ` [PATCH v3 04/13] IB/srp: Skip host settle delay Bart Van Assche
2013-07-03 12:51 ` [PATCH v3 05/13] IB/srp: Maintain a single connection per I_T nexus Bart Van Assche
2013-07-03 12:54 ` [PATCH v3 07/13] scsi_transport_srp: Add transport layer error handling Bart Van Assche
[not found] ` <51D41F13.6060203-HInyCGIudOg@public.gmane.org>
2013-07-03 15:14 ` David Dillow
2013-07-03 16:00 ` Bart Van Assche
[not found] ` <51D44A86.5050000-HInyCGIudOg@public.gmane.org>
2013-07-03 17:27 ` David Dillow
[not found] ` <1372872474.24238.43.camel-zHLflQxYYDO4Hhoo1DtQwJ9G+ZOsUmrO@public.gmane.org>
2013-07-03 18:24 ` Bart Van Assche
2013-07-03 18:57 ` David Dillow
[not found] ` <1372877861.24238.64.camel-zHLflQxYYDO4Hhoo1DtQwJ9G+ZOsUmrO@public.gmane.org>
2013-07-03 23:41 ` Vu Pham
2013-07-04 8:01 ` Bart Van Assche
[not found] ` <51D52BD7.1090506-HInyCGIudOg@public.gmane.org>
2013-07-04 8:16 ` Bart Van Assche
2013-07-08 20:37 ` David Dillow
2013-07-08 17:26 ` Vu Pham
[not found] ` <51DAF63D.9010906-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-07-08 18:42 ` Bart Van Assche
2013-07-03 12:55 ` [PATCH v3 08/13] IB/srp: Add srp_terminate_io() Bart Van Assche
[not found] ` <51D41F52.4000409-HInyCGIudOg@public.gmane.org>
2013-07-03 14:08 ` David Dillow
[not found] ` <1372860491.24238.0.camel-zHLflQxYYDO4Hhoo1DtQwJ9G+ZOsUmrO@public.gmane.org>
2013-07-03 14:45 ` Bart Van Assche
[not found] ` <51D43915.9000007-HInyCGIudOg@public.gmane.org>
2013-07-03 14:57 ` David Dillow
[not found] ` <1372863441.24238.26.camel-zHLflQxYYDO4Hhoo1DtQwJ9G+ZOsUmrO@public.gmane.org>
2013-07-03 15:13 ` David Dillow
2013-07-03 12:56 ` [PATCH v3 09/13] IB/srp: Use SRP transport layer error recovery Bart Van Assche
2013-07-03 12:57 ` Bart Van Assche [this message]
2013-07-03 12:58 ` [PATCH v3 11/13] IB/srp: Make HCA completion vector configurable Bart Van Assche
[not found] ` <51D41FFC.6070105-HInyCGIudOg@public.gmane.org>
2013-07-14 9:43 ` Sagi Grimberg
[not found] ` <51E272A4.5030707-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-07-15 11:06 ` Bart Van Assche
[not found] ` <51E3D79D.9070808-HInyCGIudOg@public.gmane.org>
2013-07-15 13:29 ` Sagi Grimberg
[not found] ` <51E3F931.9080903-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-07-15 18:23 ` Bart Van Assche
[not found] ` <51E43E22.2060502-HInyCGIudOg@public.gmane.org>
2013-07-16 10:11 ` Sagi Grimberg
[not found] ` <51E51C56.50906-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-07-16 10:58 ` Bart Van Assche
[not found] ` <51E5275F.2070009-HInyCGIudOg@public.gmane.org>
2013-07-16 12:41 ` Sagi Grimberg
2013-07-16 15:11 ` Bart Van Assche
[not found] ` <51E56296.2000403-HInyCGIudOg@public.gmane.org>
2013-07-17 9:27 ` Sagi Grimberg
2013-07-03 12:59 ` [PATCH v3 12/13] IB/srp: Make transport layer retry count configurable Bart Van Assche
[not found] ` <51D4204E.7040301-HInyCGIudOg@public.gmane.org>
2013-07-03 14:30 ` David Dillow
2013-07-03 13:00 ` [PATCH v3 13/13] IB/srp: Bump driver version and release date Bart Van Assche
2013-07-03 13:38 ` [PATCH v3 0/13] IB SRP initiator patches for kernel 3.11 Or Gerlitz
2013-07-03 14:38 ` Bart Van Assche
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51D41FC8.6030303@acm.org \
--to=bvanassche-hinycgiudog@public.gmane.org \
--cc=dave-i1Mk8JYDVaaSihdK6806/g@public.gmane.org \
--cc=jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=roland-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@public.gmane.org \
--cc=vuhuong-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.