aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/super.c')
-rw-r--r--fs/nfs/super.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 7efc6a34b56b..3cbe32f3e88b 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -652,12 +652,23 @@ static void nfs_parse_server_address(char *value,
652 struct sockaddr *sap, 652 struct sockaddr *sap,
653 size_t *len) 653 size_t *len)
654{ 654{
655 struct sockaddr_in *ap = (void *)sap; 655 if (strchr(value, ':')) {
656 struct sockaddr_in6 *ap = (struct sockaddr_in6 *)sap;
657 u8 *addr = (u8 *)&ap->sin6_addr.in6_u;
656 658
657 ap->sin_family = AF_INET; 659 ap->sin6_family = AF_INET6;
658 *len = sizeof(*ap); 660 *len = sizeof(*ap);
659 if (in4_pton(value, -1, (u8 *)&ap->sin_addr.s_addr, '\0', NULL)) 661 if (in6_pton(value, -1, addr, '\0', NULL))
660 return; 662 return;
663 } else {
664 struct sockaddr_in *ap = (struct sockaddr_in *)sap;
665 u8 *addr = (u8 *)&ap->sin_addr.s_addr;
666
667 ap->sin_family = AF_INET;
668 *len = sizeof(*ap);
669 if (in4_pton(value, -1, addr, '\0', NULL))
670 return;
671 }
661 672
662 sap->sa_family = AF_UNSPEC; 673 sap->sa_family = AF_UNSPEC;
663 *len = 0; 674 *len = 0;