From 24362a87e6a66a5443fe44baf13cfce823d72d56 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 10 Dec 2007 14:59:35 -0500 Subject: [PATCH] --- yaml --- r: 79645 b: refs/heads/master c: 3c7c7e4812e40e50a9ce9d687432ab5515cb3f2f h: refs/heads/master i: 79643: 252005de0b5900890cdd3cb99bc8d06c9955ae41 v: v3 --- [refs] | 2 +- trunk/fs/nfs/super.c | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 5c203da8bb0f..11adf66c59bf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4c5680177012a2b5c0f3fdf58f4375dd84a1da67 +refs/heads/master: 3c7c7e4812e40e50a9ce9d687432ab5515cb3f2f diff --git a/trunk/fs/nfs/super.c b/trunk/fs/nfs/super.c index 7efc6a34b56b..3cbe32f3e88b 100644 --- a/trunk/fs/nfs/super.c +++ b/trunk/fs/nfs/super.c @@ -652,12 +652,23 @@ static void nfs_parse_server_address(char *value, struct sockaddr *sap, size_t *len) { - struct sockaddr_in *ap = (void *)sap; + if (strchr(value, ':')) { + struct sockaddr_in6 *ap = (struct sockaddr_in6 *)sap; + u8 *addr = (u8 *)&ap->sin6_addr.in6_u; - ap->sin_family = AF_INET; - *len = sizeof(*ap); - if (in4_pton(value, -1, (u8 *)&ap->sin_addr.s_addr, '\0', NULL)) - return; + ap->sin6_family = AF_INET6; + *len = sizeof(*ap); + if (in6_pton(value, -1, addr, '\0', NULL)) + return; + } else { + struct sockaddr_in *ap = (struct sockaddr_in *)sap; + u8 *addr = (u8 *)&ap->sin_addr.s_addr; + + ap->sin_family = AF_INET; + *len = sizeof(*ap); + if (in4_pton(value, -1, addr, '\0', NULL)) + return; + } sap->sa_family = AF_UNSPEC; *len = 0;