Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 May 2016 17:38:52 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r300315 - head/sys/dev/iscsi
Message-ID:  <201605201738.u4KHcqY6086873@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Fri May 20 17:38:51 2016
New Revision: 300315
URL: https://svnweb.freebsd.org/changeset/base/300315

Log:
  Call the ICL module's handoff method even when using ICL proxy.
  The upcoming iSER code uses this.
  
  MFC after:	1 month
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/dev/iscsi/icl_soft.c
  head/sys/dev/iscsi/iscsi.c

Modified: head/sys/dev/iscsi/icl_soft.c
==============================================================================
--- head/sys/dev/iscsi/icl_soft.c	Fri May 20 17:38:45 2016	(r300314)
+++ head/sys/dev/iscsi/icl_soft.c	Fri May 20 17:38:51 2016	(r300315)
@@ -1327,6 +1327,23 @@ icl_soft_conn_handoff(struct icl_conn *i
 
 	ICL_CONN_LOCK_ASSERT_NOT(ic);
 
+#ifdef ICL_KERNEL_PROXY
+	/*
+	 * We're transitioning to Full Feature phase, and we don't
+	 * really care.
+	 */
+	if (fd == 0) {
+		ICL_CONN_LOCK(ic);
+		if (ic->ic_socket == NULL) {
+			ICL_CONN_UNLOCK(ic);
+			ICL_WARN("proxy handoff without connect"); 
+			return (EINVAL);
+		}
+		ICL_CONN_UNLOCK(ic);
+		return (0);
+	}
+#endif
+
 	/*
 	 * Steal the socket from userland.
 	 */

Modified: head/sys/dev/iscsi/iscsi.c
==============================================================================
--- head/sys/dev/iscsi/iscsi.c	Fri May 20 17:38:45 2016	(r300314)
+++ head/sys/dev/iscsi/iscsi.c	Fri May 20 17:38:51 2016	(r300315)
@@ -1415,21 +1415,17 @@ iscsi_ioctl_daemon_handoff(struct iscsi_
 
 	ISCSI_SESSION_UNLOCK(is);
 
-#ifdef ICL_KERNEL_PROXY
-	if (handoff->idh_socket != 0) {
-#endif
-		/*
-		 * Handoff without using ICL proxy.
-		 */
-		error = icl_conn_handoff(ic, handoff->idh_socket);
-		if (error != 0) {
-			sx_sunlock(&sc->sc_lock);
-			iscsi_session_terminate(is);
-			return (error);
-		}
-#ifdef ICL_KERNEL_PROXY
+	/*
+	 * If we're going through the proxy, the idh_socket will be 0,
+	 * and the ICL module can simply ignore this call.  It can also
+	 * use it to determine it's no longer in the Login phase.
+	 */
+	error = icl_conn_handoff(ic, handoff->idh_socket);
+	if (error != 0) {
+		sx_sunlock(&sc->sc_lock);
+		iscsi_session_terminate(is);
+		return (error);
 	}
-#endif
 
 	sx_sunlock(&sc->sc_lock);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605201738.u4KHcqY6086873>