diff options
Diffstat (limited to 'drivers/infiniband/core/ucma.c')
-rw-r--r-- | drivers/infiniband/core/ucma.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c index b41dd26bbfa1..3ddacf39b7ba 100644 --- a/drivers/infiniband/core/ucma.c +++ b/drivers/infiniband/core/ucma.c | |||
@@ -81,9 +81,7 @@ struct ucma_multicast { | |||
81 | 81 | ||
82 | u64 uid; | 82 | u64 uid; |
83 | struct list_head list; | 83 | struct list_head list; |
84 | struct sockaddr addr; | 84 | struct sockaddr_storage addr; |
85 | u8 pad[sizeof(struct sockaddr_in6) - | ||
86 | sizeof(struct sockaddr)]; | ||
87 | }; | 85 | }; |
88 | 86 | ||
89 | struct ucma_event { | 87 | struct ucma_event { |
@@ -603,11 +601,11 @@ static ssize_t ucma_query_route(struct ucma_file *file, | |||
603 | return PTR_ERR(ctx); | 601 | return PTR_ERR(ctx); |
604 | 602 | ||
605 | memset(&resp, 0, sizeof resp); | 603 | memset(&resp, 0, sizeof resp); |
606 | addr = &ctx->cm_id->route.addr.src_addr; | 604 | addr = (struct sockaddr *) &ctx->cm_id->route.addr.src_addr; |
607 | memcpy(&resp.src_addr, addr, addr->sa_family == AF_INET ? | 605 | memcpy(&resp.src_addr, addr, addr->sa_family == AF_INET ? |
608 | sizeof(struct sockaddr_in) : | 606 | sizeof(struct sockaddr_in) : |
609 | sizeof(struct sockaddr_in6)); | 607 | sizeof(struct sockaddr_in6)); |
610 | addr = &ctx->cm_id->route.addr.dst_addr; | 608 | addr = (struct sockaddr *) &ctx->cm_id->route.addr.dst_addr; |
611 | memcpy(&resp.dst_addr, addr, addr->sa_family == AF_INET ? | 609 | memcpy(&resp.dst_addr, addr, addr->sa_family == AF_INET ? |
612 | sizeof(struct sockaddr_in) : | 610 | sizeof(struct sockaddr_in) : |
613 | sizeof(struct sockaddr_in6)); | 611 | sizeof(struct sockaddr_in6)); |
@@ -913,7 +911,7 @@ static ssize_t ucma_join_multicast(struct ucma_file *file, | |||
913 | 911 | ||
914 | mc->uid = cmd.uid; | 912 | mc->uid = cmd.uid; |
915 | memcpy(&mc->addr, &cmd.addr, sizeof cmd.addr); | 913 | memcpy(&mc->addr, &cmd.addr, sizeof cmd.addr); |
916 | ret = rdma_join_multicast(ctx->cm_id, &mc->addr, mc); | 914 | ret = rdma_join_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr, mc); |
917 | if (ret) | 915 | if (ret) |
918 | goto err2; | 916 | goto err2; |
919 | 917 | ||
@@ -929,7 +927,7 @@ static ssize_t ucma_join_multicast(struct ucma_file *file, | |||
929 | return 0; | 927 | return 0; |
930 | 928 | ||
931 | err3: | 929 | err3: |
932 | rdma_leave_multicast(ctx->cm_id, &mc->addr); | 930 | rdma_leave_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr); |
933 | ucma_cleanup_mc_events(mc); | 931 | ucma_cleanup_mc_events(mc); |
934 | err2: | 932 | err2: |
935 | mutex_lock(&mut); | 933 | mutex_lock(&mut); |
@@ -975,7 +973,7 @@ static ssize_t ucma_leave_multicast(struct ucma_file *file, | |||
975 | goto out; | 973 | goto out; |
976 | } | 974 | } |
977 | 975 | ||
978 | rdma_leave_multicast(mc->ctx->cm_id, &mc->addr); | 976 | rdma_leave_multicast(mc->ctx->cm_id, (struct sockaddr *) &mc->addr); |
979 | mutex_lock(&mc->ctx->file->mut); | 977 | mutex_lock(&mc->ctx->file->mut); |
980 | ucma_cleanup_mc_events(mc); | 978 | ucma_cleanup_mc_events(mc); |
981 | list_del(&mc->list); | 979 | list_del(&mc->list); |