If so, probably it good idea change also functions like rdma_leave_multicast to 
obtain sockaddr_storage structure, instead of sockaddr and not use casting. 
Does it make sense?

On Wed, 2008-07-30 at 09:57 -0700, Roland Dreier wrote:
> There are a few places that the RDMA CM code handles IPv6 by doing
> 
>       struct sockaddr         addr;
>       u8                      pad[sizeof(struct sockaddr_in6) -
>                                   sizeof(struct sockaddr)];
> 
> This is fragile and ugly; handle this in a better way with just
> 
>       struct sockaddr_storage addr;
> 
> Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
> ---
> Any objections to merging the cleanup below?
> 
> 
>  drivers/infiniband/core/cma.c  |    4 +---
>  drivers/infiniband/core/ucma.c |   10 ++++------
>  2 files changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
> index e980ff3..a16510b 100644
> --- a/drivers/infiniband/core/cma.c
> +++ b/drivers/infiniband/core/cma.c
> @@ -155,9 +155,7 @@ struct cma_multicast {
>       } multicast;
>       struct list_head        list;
>       void                    *context;
> -     struct sockaddr         addr;
> -     u8                      pad[sizeof(struct sockaddr_in6) -
> -                                 sizeof(struct sockaddr)];
> +     struct sockaddr_storage addr;
>  };
>  
>  struct cma_work {
> diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
> index b41dd26..d5a825f 100644
> --- a/drivers/infiniband/core/ucma.c
> +++ b/drivers/infiniband/core/ucma.c
> @@ -81,9 +81,7 @@ struct ucma_multicast {
>  
>       u64                     uid;
>       struct list_head        list;
> -     struct sockaddr         addr;
> -     u8                      pad[sizeof(struct sockaddr_in6) -
> -                                 sizeof(struct sockaddr)];
> +     struct sockaddr_storage addr;
>  };
>  
>  struct ucma_event {
> @@ -913,7 +911,7 @@ static ssize_t ucma_join_multicast(struct ucma_file *file,
>  
>       mc->uid = cmd.uid;
>       memcpy(&mc->addr, &cmd.addr, sizeof cmd.addr);
> -     ret = rdma_join_multicast(ctx->cm_id, &mc->addr, mc);
> +     ret = rdma_join_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr, 
> mc);
>       if (ret)
>               goto err2;
>  
> @@ -929,7 +927,7 @@ static ssize_t ucma_join_multicast(struct ucma_file *file,
>       return 0;
>  
>  err3:
> -     rdma_leave_multicast(ctx->cm_id, &mc->addr);
> +     rdma_leave_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr);
>       ucma_cleanup_mc_events(mc);
>  err2:
>       mutex_lock(&mut);
> @@ -975,7 +973,7 @@ static ssize_t ucma_leave_multicast(struct ucma_file 
> *file,
>               goto out;
>       }
>  
> -     rdma_leave_multicast(mc->ctx->cm_id, &mc->addr);
> +     rdma_leave_multicast(mc->ctx->cm_id, (struct sockaddr *) &mc->addr);
>       mutex_lock(&mc->ctx->file->mut);
>       ucma_cleanup_mc_events(mc);
>       list_del(&mc->list);
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

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

Reply via email to