diff options
author | Sage Weil <sage@newdream.net> | 2010-07-01 15:18:31 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-07-09 15:00:20 -0700 |
commit | f91d3471ccf1ca9a795f46c94b1ded8dd219940c (patch) | |
tree | 7a8d496d69ad9dd7a206183d11f5719b7161e6a7 /fs | |
parent | 39139f64e14684cf2370770deb79d929d27cfd9b (diff) | |
download | lwn-f91d3471ccf1ca9a795f46c94b1ded8dd219940c.tar.gz lwn-f91d3471ccf1ca9a795f46c94b1ded8dd219940c.zip |
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/messenger.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/ceph/messenger.c b/fs/ceph/messenger.c index 3ddef1556457..15167b2daa55 100644 --- a/fs/ceph/messenger.c +++ b/fs/ceph/messenger.c @@ -203,12 +203,13 @@ static void set_sock_callbacks(struct socket *sock, */ static struct socket *ceph_tcp_connect(struct ceph_connection *con) { - struct sockaddr *paddr = (struct sockaddr *)&con->peer_addr.in_addr; + struct sockaddr_storage *paddr = &con->peer_addr.in_addr; struct socket *sock; int ret; BUG_ON(con->sock); - ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); + ret = sock_create_kern(con->peer_addr.in_addr.ss_family, SOCK_STREAM, + IPPROTO_TCP, &sock); if (ret) return ERR_PTR(ret); con->sock = sock; @@ -222,7 +223,8 @@ static struct socket *ceph_tcp_connect(struct ceph_connection *con) dout("connect %s\n", pr_addr(&con->peer_addr.in_addr)); - ret = sock->ops->connect(sock, paddr, sizeof(*paddr), O_NONBLOCK); + ret = sock->ops->connect(sock, (struct sockaddr *)paddr, sizeof(*paddr), + O_NONBLOCK); if (ret == -EINPROGRESS) { dout("connect %s EINPROGRESS sk_state = %u\n", pr_addr(&con->peer_addr.in_addr), |