Bart Van Assche wrote:
On 06/13/13 19:50, Vu Pham wrote:
Hello Bart,

+/**
+ * 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 &&

Targets may advertise/expose on different pkeys
You can have multiple connections  (or paths/scsi hosts) to same target
with different pkeys.
We need extra check to detect the uniqueness:
                                             target->path.pkey ==
t->path.pkey &&

Hello Vu,

Thanks for the feedback. This is something I have already thinking about myself. Unfortunately I have not found any requirements in the T10 SRP standard with regard to InfiniBand partitions. However, in that document there is a section about single RDMA channel operation. In that section it is explained that an SRP target must log out established sessions upon receipt of a new login request. What I'm not sure about is whether only sessions with the same P_Key must be logged out or all established sessions if a new login request is received. I assume the latter since otherwise that would mean that an SRP target would be required to maintain multiple sessions if it allows connections with more than one P_Key to a target port ? My concern about adding a pkey comparison in the function srp_conn_unique() is that if a target allows an initiator to choose which partition to use when logging in, that this could result in the undesired SRP initiator ping-pong effect this patch tries to avoid.

Bart.

Hello Bart,

Yes, you pointed out the unclear/undefined area.

If we stick to single RDMA channel per IT Nexus with unique tuple Initiator Port Identier - Target Port Indentifier then newly created connection with same tuple (I_port_id, T_port_id) but with different P_Key or different DGID is not unique.

Sticking to this rule by excluding P_Key and DGID out of rdma channel indentity, your srp_conn_unique() checking is ok; however, some SRP target implementations may include DGID as part of rdma channel identifier. I'm not sure about different p_key part.

-vu
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to