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 05/13] IB/srp: Maintain a single connection per I_T nexus
Date: Wed, 03 Jul 2013 14:51:48 +0200 [thread overview]
Message-ID: <51D41E64.8080904@acm.org> (raw)
In-Reply-To: <51D41C03.4020607-HInyCGIudOg@public.gmane.org>
An SRP target is required to maintain a single connection between
initiator and target. This means that if the 'add_target' attribute
is used to create a second connection to a target that the first
connection will be logged out and that the SCSI error handler will
kick in. The SCSI error handler will cause the SRP initiator to
reconnect, which will cause I/O over the second connection to fail.
Avoid such ping-pong behavior by disabling relogins. Note: if
reconnecting manually is necessary, that is possible by deleting
and recreating an rport via sysfs.
Signed-off-by: Bart Van Assche <bvanassche-HInyCGIudOg@public.gmane.org>
Signed-off-by: Sebastian Riemer <sebastian.riemer-EIkl63zCoXaH+58JC4qpiA@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>
---
drivers/infiniband/ulp/srp/ib_srp.c | 44 +++++++++++++++++++++++++++++++++--
1 file changed, 42 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 2c82b90..f046e32 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -542,11 +542,11 @@ static void srp_remove_work(struct work_struct *work)
WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED);
+ srp_remove_target(target);
+
spin_lock(&target->srp_host->target_lock);
list_del(&target->list);
spin_unlock(&target->srp_host->target_lock);
-
- srp_remove_target(target);
}
static void srp_rport_delete(struct srp_rport *rport)
@@ -2008,6 +2008,36 @@ static struct class srp_class = {
.dev_release = srp_release_dev
};
+/**
+ * srp_conn_unique() - check whether the connection to a target is unique
+ */
+static bool srp_conn_unique(struct srp_host *host,
+ struct srp_target_port *target)
+{
+ struct srp_target_port *t;
+ bool ret = false;
+
+ if (target->state == SRP_TARGET_REMOVED)
+ goto out;
+
+ ret = true;
+
+ spin_lock(&host->target_lock);
+ list_for_each_entry(t, &host->target_list, list) {
+ if (t != target &&
+ target->id_ext == t->id_ext &&
+ target->ioc_guid == t->ioc_guid &&
+ target->initiator_ext == t->initiator_ext) {
+ ret = false;
+ break;
+ }
+ }
+ spin_unlock(&host->target_lock);
+
+out:
+ return ret;
+}
+
/*
* Target ports are added by writing
*
@@ -2264,6 +2294,16 @@ static ssize_t srp_create_target(struct device *dev,
if (ret)
goto err;
+ if (!srp_conn_unique(target->srp_host, target)) {
+ shost_printk(KERN_INFO, target->scsi_host,
+ PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;initiator_ext=%016llx\n",
+ be64_to_cpu(target->id_ext),
+ be64_to_cpu(target->ioc_guid),
+ be64_to_cpu(target->initiator_ext));
+ ret = -EEXIST;
+ goto err;
+ }
+
if (!host->srp_dev->fmr_pool && !target->allow_ext_sg &&
target->cmd_sg_cnt < target->sg_tablesize) {
pr_warn("No FMR pool and no external indirect descriptors, limiting sg_tablesize to cmd_sg_cnt\n");
--
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:51 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 ` Bart Van Assche [this message]
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 ` [PATCH v3 10/13] IB/srp: Start timers if a transport layer error occurs Bart Van Assche
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=51D41E64.8080904@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox