|
@@ -789,7 +789,7 @@ static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
|
|
|
int ret;
|
|
|
|
|
|
dprintk("svcrdma: Creating RDMA socket\n");
|
|
|
- if (sa->sa_family != AF_INET) {
|
|
|
+ if ((sa->sa_family != AF_INET) && (sa->sa_family != AF_INET6)) {
|
|
|
dprintk("svcrdma: Address family %d is not supported.\n", sa->sa_family);
|
|
|
return ERR_PTR(-EAFNOSUPPORT);
|
|
|
}
|
|
@@ -805,6 +805,16 @@ static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
|
|
|
goto err0;
|
|
|
}
|
|
|
|
|
|
+ /* Allow both IPv4 and IPv6 sockets to bind a single port
|
|
|
+ * at the same time.
|
|
|
+ */
|
|
|
+#if IS_ENABLED(CONFIG_IPV6)
|
|
|
+ ret = rdma_set_afonly(listen_id, 1);
|
|
|
+ if (ret) {
|
|
|
+ dprintk("svcrdma: rdma_set_afonly failed = %d\n", ret);
|
|
|
+ goto err1;
|
|
|
+ }
|
|
|
+#endif
|
|
|
ret = rdma_bind_addr(listen_id, sa);
|
|
|
if (ret) {
|
|
|
dprintk("svcrdma: rdma_bind_addr failed = %d\n", ret);
|