Hi Arlin,

On Fri, 2005-07-15 at 13:04, Arlin Davis wrote:
> Your implementation is fine, as long as the correct return values are used
> and the sync version works. I currently get returned a 1 but the ib_route
> data is not filled in and the req_id == 0. I would expect a 0 returned 
> and a
> valid req_id if the ib_route cannot be processed.
> 
> for ret = ib_at_route_by_ip( async_cb provided ), I read this as: 
> 
>   if ret > 0  then ib_route output data is written, resolve complete
>   if ret == 0 then req_id is written with valid id to cancel or poll
>   if ret < 0 error
> 
> Am I reading this right?

Try this patch and let me know if this works for you.

Thanks.

-- Hal

Index: uat.c
===================================================================
--- uat.c       (revision 2849)
+++ uat.c       (working copy)
@@ -271,9 +271,15 @@ static ssize_t ib_uat_route_by_ip(struct
                        goto err4;
                }
        }
-       if (result == 1) 
+       if (result == 1) { 
+               /* Copy route back to userspace */
+               if (copy_to_user(ctx->user_ib_route, ctx->ib_route,
+                                sizeof(*ctx->user_ib_route))) {
+                       result = -EFAULT;
+                       goto err3;
+               }
                ib_uat_route_callback(ctx->req_id, ctx, result);
-       else if (result < 0) {
+       } else if (result < 0) {
                ib_uat_ctx_put(ctx);
                goto err3;
        }
@@ -363,9 +369,15 @@ static ssize_t ib_uat_paths_by_route(str
                        goto err4;
                }
        }
-       if (result == 1)
+       if (result == 1) {
+               /* Copy path records returned from SA to userspace */
+               if (copy_to_user(ctx->user_path_arr, ctx->path_arr,
+                                ctx->user_length)) {
+                       result = -EFAULT;
+                       goto err3;
+               }
                ib_uat_path_callback(ctx->req_id, ctx, result);
-       else if (result < 0) {
+       } else if (result < 0) {
                ib_uat_ctx_put(ctx);
                goto err3;
        }
@@ -453,9 +465,14 @@ static ssize_t ib_uat_ips_by_gid(struct 
                        goto err4;
                }
        }
-       if (result == 1)
+       if (result == 1) {
+               /* Copy IP addresses back to userspace */
+               if (copy_to_user(ctx->user_ips, ctx->ips, ctx->user_length)) {
+                       result = -EFAULT;
+                       goto err3;
+               }
                ib_uat_ips_callback(ctx->req_id, ctx, result);
-       else if (result < 0) {
+       } else if (result < 0) {
                ib_uat_ctx_put(ctx);
                goto err3;
        }





_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to