changeset 13390:a8f63d8645fa

1108 kRPC: ticotsord doesn't support T_ADDR_REQ when datablock type is M_PCPROTO Reviewed by: Gordon Ross <gordon.w.ross@gmail.com> Reviewed by: Dan McDonald <danmcd@nexenta.com> Approved by: Eric Schrock <Eric.Schrock@delphix.com>
author Dan Kruchinin <dan.kruchinin@nexenta.com>
date Mon, 20 Jun 2011 06:44:45 -0700
parents 5929916bbfff
children e851229134c9
files usr/src/uts/common/io/tl.c
diffstat 1 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/tl.c	Wed Jun 15 20:53:22 2011 -0400
+++ b/usr/src/uts/common/io/tl.c	Mon Jun 20 06:44:45 2011 -0700
@@ -22,6 +22,9 @@
  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
+/*
+ * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
+ */
 
 /*
  * Multithreaded STREAMS Local Transport Provider.
@@ -777,7 +780,7 @@
 		-2,		/* ETSDU_size -2 => not supported */
 		-2,		/* CDATA_size -2 => not supported */
 		-2,		/* DDATA_size  -2 => not supported */
-		-1,		/* ADDR_size -1 => unlimited */
+		-1,		/* ADDR_size -1 => infinite */
 		-1,		/* OPT_size */
 		0,		/* TIDU_size - fill at run time */
 		T_CLTS,		/* SERV_type */
@@ -839,6 +842,7 @@
 static void tl_discon_req(mblk_t *, tl_endpt_t *);
 static void tl_capability_req(mblk_t *, tl_endpt_t *);
 static void tl_info_req_ser(mblk_t *, tl_endpt_t *);
+static void tl_addr_req_ser(mblk_t *, tl_endpt_t *);
 static void tl_info_req(mblk_t *, tl_endpt_t *);
 static void tl_addr_req(mblk_t *, tl_endpt_t *);
 static void tl_connected_cots_addr_req(mblk_t *, tl_endpt_t *);
@@ -1853,6 +1857,10 @@
 		case T_INFO_REQ:
 			tl_proc = tl_info_req_ser;
 			break;
+		case T_ADDR_REQ:
+			tl_proc = tl_addr_req_ser;
+			break;
+
 		default:
 			(void) (STRLOG(TL_ID, tep->te_minor, 1,
 			    SL_TRACE|SL_ERROR,
@@ -4159,6 +4167,17 @@
 	}
 }
 
+static void
+tl_addr_req_ser(mblk_t *mp, tl_endpt_t *tep)
+{
+	if (!tep->te_closing)
+		tl_addr_req(mp, tep);
+	else
+		freemsg(mp);
+
+	tl_serializer_exit(tep);
+	tl_refrele(tep);
+}
 
 static void
 tl_addr_req(mblk_t *mp, tl_endpt_t *tep)