[openib-general] Re: [PATCH] [RFC] dapltest change for iwarp

James Lentini jlentini at netapp.com
Tue May 2 11:21:28 PDT 2006



On Fri, 28 Apr 2006, Steve Wise wrote:

> James,
> 
> This patch changes the dapltest transaction test to force the client
> side (the side that dat_ep_connect()) to send the first RDMA message.
> This ensures that the IWARP MPA protocol requirements are met.
> 
> I'm presenting this for discussion and possible inclusion in the
> trunk.  
> 
> A transport independent application should be designed to work over all
> transports and should therefore utilize the only the common features.
> This implies that the application should always initiate RDMA exchanges
> starting with the client, to avoid MPA problems.
> 
> Comments?

Steve, 

Thanks for pointing me to the MPA spec. requirement. At this time, I 
don't see a way around this. Although I like the idea of transparently 
satisfying this requirement as part of the iWARP CMs connection 
establishment, that doesn't appear to be viable or standard.

Any objections to using this compressed version of your patch? I 
updated the comment to explain the flow control and used the 
same portion of code for both the client and server's receive.

test/dapltest/test/dapl_transaction_test.c
===================================================================
--- test/dapltest/test/dapl_transaction_test.c	(revision 6735)
+++ test/dapltest/test/dapl_transaction_test.c	(working copy)
@@ -972,38 +972,42 @@ retry:
 	}   /* end foreach op */
 
 	/*
-	 * Send our memory info (synchronously)
+	 * Send our memory info. The client performs the first send to comply
+	 * with the iWARP MPA protocol's "Connection Startup Rules".
 	 */
 	DT_Tdep_PT_Debug (1,(phead,"Test[" F64x "]: Sending %s Memory Info\n",
 			test_ptr->base_port,
 			test_ptr->is_server ? "Server" : "Client"));
 
-	/* post the send buffer */
-	if (!DT_post_send_buffer (phead,
+	if (!test_ptr->is_server ) {
+
+	    /* post the send buffer */
+	    if (!DT_post_send_buffer (phead,
 		    		  test_ptr->ep_context[i].ep_handle,
 				  test_ptr->ep_context[i].bp,
 				  RMI_SEND_BUFFER_ID,
 				  buff_size))
-	{
-	    /* error message printed by DT_post_send_buffer */
-	    goto test_failure;
-	}
-	/* reap the send and verify it */
-	dto_cookie.as_64 = LZERO;
-	dto_cookie.as_ptr =
-	    (DAT_PVOID) DT_Bpool_GetBuffer (
-		test_ptr->ep_context[i].bp,
-		RMI_SEND_BUFFER_ID);
-	if (!DT_dto_event_wait (phead, test_ptr->reqt_evd_hdl, &dto_stat) ||
-	    !DT_dto_check ( phead,
+	    {
+	        /* error message printed by DT_post_send_buffer */
+	        goto test_failure;
+	    }
+	    /* reap the send and verify it */
+	    dto_cookie.as_64 = LZERO;
+	    dto_cookie.as_ptr =
+	        (DAT_PVOID) DT_Bpool_GetBuffer (
+		    test_ptr->ep_context[i].bp,
+		    RMI_SEND_BUFFER_ID);
+	    if (!DT_dto_event_wait (phead, test_ptr->reqt_evd_hdl, &dto_stat) ||
+	        !DT_dto_check ( phead,
 			    &dto_stat,
 			    test_ptr->ep_context[i].ep_handle,
 			    buff_size,
 			    dto_cookie,
 			    test_ptr->is_server ? "Client_Mem_Info_Send"
 						: "Server_Mem_Info_Send"))
-	{
-	    goto test_failure;
+	    {
+	        goto test_failure;
+	    }
 	}
 
 	/*
@@ -1029,6 +1033,36 @@ retry:
 	    goto test_failure;
 	}
 
+	if (test_ptr->is_server ) {
+	    /* post the send buffer */
+	    if (!DT_post_send_buffer (phead,
+		    		  test_ptr->ep_context[i].ep_handle,
+				  test_ptr->ep_context[i].bp,
+				  RMI_SEND_BUFFER_ID,
+				  buff_size))
+	    {
+	        /* error message printed by DT_post_send_buffer */
+	        goto test_failure;
+	    }
+	    /* reap the send and verify it */
+	    dto_cookie.as_64 = LZERO;
+	    dto_cookie.as_ptr =
+	        (DAT_PVOID) DT_Bpool_GetBuffer (
+		    test_ptr->ep_context[i].bp,
+		    RMI_SEND_BUFFER_ID);
+	    if (!DT_dto_event_wait (phead, test_ptr->reqt_evd_hdl, &dto_stat) ||
+	        !DT_dto_check ( phead,
+			    &dto_stat,
+			    test_ptr->ep_context[i].ep_handle,
+			    buff_size,
+			    dto_cookie,
+			    test_ptr->is_server ? "Client_Mem_Info_Send"
+						: "Server_Mem_Info_Send"))
+	    {
+	        goto test_failure;
+	    }
+	}
+
 	/*
 	 * Extract what we need
 	 */



More information about the general mailing list