diff options
author | Jeff Layton <jlayton@redhat.com> | 2010-07-06 20:43:01 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2010-08-02 08:40:34 -0400 |
commit | 50d971602a6c4bf1abe1f3873686f431d7539dfe (patch) | |
tree | 6c7b58ab4f26cfd4f98a271b4369fd43f9caae7a /fs/cifs/connect.c | |
parent | 488f1d2d6cc9d665c9f09e4b54f77052732e3058 (diff) |
cifs: set the port in sockaddr in a more clearly defined fashion
This patch should replace the patch I sent a couple of weeks ago to
set the port in cifs_convert_address.
Currently we set this in cifs_find_tcp_session, but that's more of a
side effect than anything. Add a new function called cifs_fill_sockaddr.
Have it call cifs_convert_address and then set the port.
This also allows us to skip passing in the port as a separate parm to
cifs_find_tcp_session.
Also, change cifs_convert_address take a struct sockaddr * rather than
void * to make it clearer how this function should be called.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/connect.c')
-rw-r--r-- | fs/cifs/connect.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 90354e39e565..eca86256709b 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -1382,7 +1382,7 @@ cifs_parse_mount_options(char *options, const char *devname, | |||
1382 | } | 1382 | } |
1383 | 1383 | ||
1384 | static struct TCP_Server_Info * | 1384 | static struct TCP_Server_Info * |
1385 | cifs_find_tcp_session(struct sockaddr_storage *addr, unsigned short int port) | 1385 | cifs_find_tcp_session(struct sockaddr_storage *addr) |
1386 | { | 1386 | { |
1387 | struct list_head *tmp; | 1387 | struct list_head *tmp; |
1388 | struct TCP_Server_Info *server; | 1388 | struct TCP_Server_Info *server; |
@@ -1406,7 +1406,6 @@ cifs_find_tcp_session(struct sockaddr_storage *addr, unsigned short int port) | |||
1406 | case AF_INET: | 1406 | case AF_INET: |
1407 | if (addr4->sin_addr.s_addr == | 1407 | if (addr4->sin_addr.s_addr == |
1408 | server->addr.sockAddr.sin_addr.s_addr) { | 1408 | server->addr.sockAddr.sin_addr.s_addr) { |
1409 | addr4->sin_port = htons(port); | ||
1410 | /* user overrode default port? */ | 1409 | /* user overrode default port? */ |
1411 | if (addr4->sin_port) { | 1410 | if (addr4->sin_port) { |
1412 | if (addr4->sin_port != | 1411 | if (addr4->sin_port != |
@@ -1422,7 +1421,6 @@ cifs_find_tcp_session(struct sockaddr_storage *addr, unsigned short int port) | |||
1422 | &server->addr.sockAddr6.sin6_addr) && | 1421 | &server->addr.sockAddr6.sin6_addr) && |
1423 | (addr6->sin6_scope_id == | 1422 | (addr6->sin6_scope_id == |
1424 | server->addr.sockAddr6.sin6_scope_id)) { | 1423 | server->addr.sockAddr6.sin6_scope_id)) { |
1425 | addr6->sin6_port = htons(port); | ||
1426 | /* user overrode default port? */ | 1424 | /* user overrode default port? */ |
1427 | if (addr6->sin6_port) { | 1425 | if (addr6->sin6_port) { |
1428 | if (addr6->sin6_port != | 1426 | if (addr6->sin6_port != |
@@ -1482,7 +1480,9 @@ cifs_get_tcp_session(struct smb_vol *volume_info) | |||
1482 | cFYI(1, "UNC: %s ip: %s", volume_info->UNC, volume_info->UNCip); | 1480 | cFYI(1, "UNC: %s ip: %s", volume_info->UNC, volume_info->UNCip); |
1483 | 1481 | ||
1484 | if (volume_info->UNCip && volume_info->UNC) { | 1482 | if (volume_info->UNCip && volume_info->UNC) { |
1485 | rc = cifs_convert_address(volume_info->UNCip, &addr); | 1483 | rc = cifs_fill_sockaddr((struct sockaddr *)&addr, |
1484 | volume_info->UNCip, | ||
1485 | volume_info->port); | ||
1486 | if (!rc) { | 1486 | if (!rc) { |
1487 | /* we failed translating address */ | 1487 | /* we failed translating address */ |
1488 | rc = -EINVAL; | 1488 | rc = -EINVAL; |
@@ -1502,7 +1502,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info) | |||
1502 | } | 1502 | } |
1503 | 1503 | ||
1504 | /* see if we already have a matching tcp_ses */ | 1504 | /* see if we already have a matching tcp_ses */ |
1505 | tcp_ses = cifs_find_tcp_session(&addr, volume_info->port); | 1505 | tcp_ses = cifs_find_tcp_session(&addr); |
1506 | if (tcp_ses) | 1506 | if (tcp_ses) |
1507 | return tcp_ses; | 1507 | return tcp_ses; |
1508 | 1508 | ||
@@ -1546,12 +1546,10 @@ cifs_get_tcp_session(struct smb_vol *volume_info) | |||
1546 | cFYI(1, "attempting ipv6 connect"); | 1546 | cFYI(1, "attempting ipv6 connect"); |
1547 | /* BB should we allow ipv6 on port 139? */ | 1547 | /* BB should we allow ipv6 on port 139? */ |
1548 | /* other OS never observed in Wild doing 139 with v6 */ | 1548 | /* other OS never observed in Wild doing 139 with v6 */ |
1549 | sin_server6->sin6_port = htons(volume_info->port); | ||
1550 | memcpy(&tcp_ses->addr.sockAddr6, sin_server6, | 1549 | memcpy(&tcp_ses->addr.sockAddr6, sin_server6, |
1551 | sizeof(struct sockaddr_in6)); | 1550 | sizeof(struct sockaddr_in6)); |
1552 | rc = ipv6_connect(tcp_ses); | 1551 | rc = ipv6_connect(tcp_ses); |
1553 | } else { | 1552 | } else { |
1554 | sin_server->sin_port = htons(volume_info->port); | ||
1555 | memcpy(&tcp_ses->addr.sockAddr, sin_server, | 1553 | memcpy(&tcp_ses->addr.sockAddr, sin_server, |
1556 | sizeof(struct sockaddr_in)); | 1554 | sizeof(struct sockaddr_in)); |
1557 | rc = ipv4_connect(tcp_ses); | 1555 | rc = ipv4_connect(tcp_ses); |