[openib-general] Re: ib_uat kernel panic without async callback

Hal Rosenstock halr at voltaire.com
Wed Jul 20 04:30:54 PDT 2005


On Tue, 2005-07-19 at 14:42, Arlin Davis wrote:
> Yes, it returns the route data (GID) when the return == 1.  However, I 
> still get a callback event with a req_id ==0 which is somewhat 
> unexpected. This seems unnecessary given that ib_at_route_by_ip() just 
> returned the data. Is this the expected behavior?
> 
> Here is my output from the call and from the at_thread.
> 
> 4116 Running as client
> 4116 Server Name: iclust-20-ib0
> 4116 Server Net Address: 192.168.0.20
> dapl_ep_connect (0x515c40, {4294967232.4294967208.0.20}, 115D3, 5000000, 
> 0, (nil), 0, 0)
>  connect: r_SID 71123, pdata (nil), plen 0
>  connect: at_route ret=1, req_id 0, GID fe80000000000000 
> 0002c90200004071   <<<< ib_route info returned with call
> dapl_ep_connect () returns 0x0
> 4116 Waiting for connect response
> 
> at_thread: get_callback
>  rt_comp_handler: conn 0x519e30, req_id 0 rec_num 1                 
>  rt_comp_handler: SRC GID subnet fe80000000000000 id 0002c9020000409d    
> <<< get_callback event fires
>  rt_comp_handler: DST GID subnet fe80000000000000 id 0002c90200004071
>  at_thread: callback woke

Try this incremental patch:

Index: uat.c
===================================================================
--- uat.c	(revision 2884)
+++ uat.c	(working copy)
@@ -29,7 +29,7 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  *
- * $Id:$
+ * $Id$
  */
 #include <linux/init.h>
 #include <linux/fs.h>
@@ -276,9 +276,10 @@ static ssize_t ib_uat_route_by_ip(struct
 		if (copy_to_user(ctx->user_ib_route, ctx->ib_route,
 				 sizeof(*ctx->user_ib_route))) {
 			result = -EFAULT;
+			kfree(ctx->ib_route);
+			ib_uat_ctx_put(ctx);
 			goto err3;
 		}
-		ib_uat_route_callback(ctx->req_id, ctx, result);
 	} else if (result < 0) {
 		ib_uat_ctx_put(ctx);
 		goto err3;
@@ -374,9 +375,10 @@ static ssize_t ib_uat_paths_by_route(str
 		if (copy_to_user(ctx->user_path_arr, ctx->path_arr,
 				 ctx->user_length)) {
 			result = -EFAULT;
+			kfree(ctx->path_arr);
+			ib_uat_ctx_put(ctx);
 			goto err3;
 		}
-		ib_uat_path_callback(ctx->req_id, ctx, result);
 	} else if (result < 0) {
 		ib_uat_ctx_put(ctx);
 		goto err3;
@@ -469,9 +471,10 @@ static ssize_t ib_uat_ips_by_gid(struct 
 		/* Copy IP addresses back to userspace */
 		if (copy_to_user(ctx->user_ips, ctx->ips, ctx->user_length)) {
 			result = -EFAULT;
+			kfree(ctx->ips);
+			ib_uat_ctx_put(ctx);
 			goto err3;
 		}
-		ib_uat_ips_callback(ctx->req_id, ctx, result);
 	} else if (result < 0) {
 		ib_uat_ctx_put(ctx);
 		goto err3;






More information about the general mailing list