[ofa-general] Re: [PATCH/RFC] RDMA/cma: Remove padding arrays by using struct sockaddr_storage
Aleksey Senin
alekseys at voltaire.com
Thu Jul 31 03:41:59 PDT 2008
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 <rolandd at cisco.com>
> ---
> 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);
More information about the general
mailing list