aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/iscsi/iscsi_target.c
diff options
context:
space:
mode:
authorAndy Grover <agrover@redhat.com>2015-08-24 13:26:03 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2015-08-27 02:27:09 -0400
commit76c28f1fcfeb42b47f798fe498351ee1d60086ae (patch)
tree14e0a895f308f1bbf90075b080948e942320647c /drivers/target/iscsi/iscsi_target.c
parent109e2381749c1cfd94a0d22b2b54142539024973 (diff)
target/iscsi: Fix np_ip bracket issue by removing np_ip
Revert commit 1997e6259, which causes double brackets on ipv6 inaddr_any addresses. Since we have np_sockaddr, if we need a textual representation we can use "%pISc". Change iscsit_add_network_portal() and iscsit_add_np() signatures to remove *ip_str parameter. Fix and extend some comments earlier in the function. Tested to work for :: and ::1 via iscsiadm, previously :: failed, see https://bugzilla.redhat.com/show_bug.cgi?id=1249107 . CC: stable@vger.kernel.org Signed-off-by: Andy Grover <agrover@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/iscsi/iscsi_target.c')
-rw-r--r--drivers/target/iscsi/iscsi_target.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index e55f49c7c847..d75eeb5ce13a 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -341,7 +341,6 @@ static struct iscsi_np *iscsit_get_np(
341 341
342struct iscsi_np *iscsit_add_np( 342struct iscsi_np *iscsit_add_np(
343 struct __kernel_sockaddr_storage *sockaddr, 343 struct __kernel_sockaddr_storage *sockaddr,
344 char *ip_str,
345 int network_transport) 344 int network_transport)
346{ 345{
347 struct sockaddr_in *sock_in; 346 struct sockaddr_in *sock_in;
@@ -370,11 +369,9 @@ struct iscsi_np *iscsit_add_np(
370 np->np_flags |= NPF_IP_NETWORK; 369 np->np_flags |= NPF_IP_NETWORK;
371 if (sockaddr->ss_family == AF_INET6) { 370 if (sockaddr->ss_family == AF_INET6) {
372 sock_in6 = (struct sockaddr_in6 *)sockaddr; 371 sock_in6 = (struct sockaddr_in6 *)sockaddr;
373 snprintf(np->np_ip, IPV6_ADDRESS_SPACE, "%s", ip_str);
374 np->np_port = ntohs(sock_in6->sin6_port); 372 np->np_port = ntohs(sock_in6->sin6_port);
375 } else { 373 } else {
376 sock_in = (struct sockaddr_in *)sockaddr; 374 sock_in = (struct sockaddr_in *)sockaddr;
377 sprintf(np->np_ip, "%s", ip_str);
378 np->np_port = ntohs(sock_in->sin_port); 375 np->np_port = ntohs(sock_in->sin_port);
379 } 376 }
380 377
@@ -411,8 +408,8 @@ struct iscsi_np *iscsit_add_np(
411 list_add_tail(&np->np_list, &g_np_list); 408 list_add_tail(&np->np_list, &g_np_list);
412 mutex_unlock(&np_lock); 409 mutex_unlock(&np_lock);
413 410
414 pr_debug("CORE[0] - Added Network Portal: %s:%hu on %s\n", 411 pr_debug("CORE[0] - Added Network Portal: %pISc:%hu on %s\n",
415 np->np_ip, np->np_port, np->np_transport->name); 412 &np->np_sockaddr, np->np_port, np->np_transport->name);
416 413
417 return np; 414 return np;
418} 415}
@@ -481,8 +478,8 @@ int iscsit_del_np(struct iscsi_np *np)
481 list_del(&np->np_list); 478 list_del(&np->np_list);
482 mutex_unlock(&np_lock); 479 mutex_unlock(&np_lock);
483 480
484 pr_debug("CORE[0] - Removed Network Portal: %s:%hu on %s\n", 481 pr_debug("CORE[0] - Removed Network Portal: %pISc:%hu on %s\n",
485 np->np_ip, np->np_port, np->np_transport->name); 482 &np->np_sockaddr, np->np_port, np->np_transport->name);
486 483
487 iscsit_put_transport(np->np_transport); 484 iscsit_put_transport(np->np_transport);
488 kfree(np); 485 kfree(np);
@@ -3463,7 +3460,6 @@ iscsit_build_sendtargets_response(struct iscsi_cmd *cmd,
3463 tpg_np_list) { 3460 tpg_np_list) {
3464 struct iscsi_np *np = tpg_np->tpg_np; 3461 struct iscsi_np *np = tpg_np->tpg_np;
3465 bool inaddr_any = iscsit_check_inaddr_any(np); 3462 bool inaddr_any = iscsit_check_inaddr_any(np);
3466 char *fmt_str;
3467 3463
3468 if (np->np_network_transport != network_transport) 3464 if (np->np_network_transport != network_transport)
3469 continue; 3465 continue;
@@ -3491,15 +3487,18 @@ iscsit_build_sendtargets_response(struct iscsi_cmd *cmd,
3491 } 3487 }
3492 } 3488 }
3493 3489
3494 if (np->np_sockaddr.ss_family == AF_INET6) 3490 if (inaddr_any) {
3495 fmt_str = "TargetAddress=[%s]:%hu,%hu"; 3491 len = sprintf(buf, "TargetAddress="
3496 else 3492 "%s:%hu,%hu",
3497 fmt_str = "TargetAddress=%s:%hu,%hu"; 3493 conn->local_ip,
3498 3494 np->np_port,
3499 len = sprintf(buf, fmt_str, 3495 tpg->tpgt);
3500 inaddr_any ? conn->local_ip : np->np_ip, 3496 } else {
3501 np->np_port, 3497 len = sprintf(buf, "TargetAddress="
3502 tpg->tpgt); 3498 "%pISpc,%hu",
3499 &np->np_sockaddr,
3500 tpg->tpgt);
3501 }
3503 len += 1; 3502 len += 1;
3504 3503
3505 if ((len + payload_len) > buffer_len) { 3504 if ((len + payload_len) > buffer_len) {