ceph: fix creation of ipv6 sockets

Use the address family from the peer address instead of assuming IPv4.

Signed-off-by: Sage Weil <sage@newdream.net>

Sage Weil f91d3471 39139f64

+5 -3
+5 -3
fs/ceph/messenger.c
··· 203 203 */ 204 204 static struct socket *ceph_tcp_connect(struct ceph_connection *con) 205 205 { 206 - struct sockaddr *paddr = (struct sockaddr *)&con->peer_addr.in_addr; 206 + struct sockaddr_storage *paddr = &con->peer_addr.in_addr; 207 207 struct socket *sock; 208 208 int ret; 209 209 210 210 BUG_ON(con->sock); 211 - ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); 211 + ret = sock_create_kern(con->peer_addr.in_addr.ss_family, SOCK_STREAM, 212 + IPPROTO_TCP, &sock); 212 213 if (ret) 213 214 return ERR_PTR(ret); 214 215 con->sock = sock; ··· 223 222 224 223 dout("connect %s\n", pr_addr(&con->peer_addr.in_addr)); 225 224 226 - ret = sock->ops->connect(sock, paddr, sizeof(*paddr), O_NONBLOCK); 225 + ret = sock->ops->connect(sock, (struct sockaddr *)paddr, sizeof(*paddr), 226 + O_NONBLOCK); 227 227 if (ret == -EINPROGRESS) { 228 228 dout("connect %s EINPROGRESS sk_state = %u\n", 229 229 pr_addr(&con->peer_addr.in_addr),