Patch "target/iscsi: Fix np_ip bracket issue by removing np_ip" has been added to the 4.2-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
target/iscsi: Fix np_ip bracket issue by removing np_ip
to the 4.2-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
target-iscsi-fix-np_ip-bracket-issue-by-removing-np_ip.patch
and it can be found in the queue-4.2 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
76c28f1fcfeb42b47f798fe498351ee1d60086aeMon Sep 17 00:00:00 2001
From: Andy Grover <[email protected]>
Date: Mon, 24 Aug 2015 10:26:03 -0700
Subject: target/iscsi: Fix np_ip bracket issue by removing np_ip
From: Andy Grover <[email protected]>
commit 76c28f1fcfeb42b47f798fe498351ee1d60086ae upstream.
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 .
--- drivers/target/iscsi/iscsi_target.c | 33 +++++++++++++-------------- drivers/target/iscsi/iscsi_target.h | 2 - drivers/target/iscsi/iscsi_target_configfs.c | 14 +++++------ drivers/target/iscsi/iscsi_target_login.c | 8 +++--- drivers/target/iscsi/iscsi_target_tpg.c | 15 +++++------- drivers/target/iscsi/iscsi_target_tpg.h | 2 - include/target/iscsi/iscsi_target_core.h | 1 7 files changed, 36 insertions(+), 39 deletions(-)
drivers/target/iscsi/iscsi_target.c +16 -17
@@ -341,7 +341,6 @@ static struct iscsi_np *iscsit_get_np(struct iscsi_np *iscsit_add_np (struct __kernel_sockaddr_storage *sockaddr, -char *ip_str,int network_transport) {struct sockaddr_in *sock_in;
@@ -370,11 +369,9 @@ struct iscsi_np *iscsit_add_np( np->np_flags |=NPF_IP_NETWORK ;if (sockaddr->ss_family ==AF_INET6 ) { sock_in6 = (struct sockaddr_in6 *)sockaddr; -snprintf (np->np_ip,IPV6_ADDRESS_SPACE ,"%s" , ip_str); np->np_port =ntohs (sock_in6->sin6_port); }else { sock_in = (struct sockaddr_in *)sockaddr; -sprintf (np->np_ip,"%s" , ip_str); np->np_port =ntohs (sock_in->sin_port); }
@@ -411,8 +408,8 @@ struct iscsi_np *iscsit_add_np(list_add_tail (&np->np_list, &g_np_list);mutex_unlock (&np_lock); -pr_debug ("CORE[0] - Added Network Portal: %s:%hu on %s\n" , - np->np_ip, np->np_port, np->np_transport->name); +pr_debug ("CORE[0] - Added Network Portal: %pISc:%hu on %s\n" , + &np->np_sockaddr, np->np_port, np->np_transport->name);return np; }
@@ -481,8 +478,8 @@ int iscsit_del_np(struct iscsi_np *np)list_del (&np->np_list);mutex_unlock (&np_lock); -pr_debug ("CORE[0] - Removed Network Portal: %s:%hu on %s\n" , - np->np_ip, np->np_port, np->np_transport->name); +pr_debug ("CORE[0] - Removed Network Portal: %pISc:%hu on %s\n" , + &np->np_sockaddr, np->np_port, np->np_transport->name);iscsit_put_transport (np->np_transport);kfree (np);
@@ -3464,7 +3461,6 @@ iscsit_build_sendtargets_response(struct tpg_np_list) {struct iscsi_np *np = tpg_np->tpg_np;bool inaddr_any =iscsit_check_inaddr_any (np); -char *fmt_str;if (np->np_network_transport != network_transport)continue ;
@@ -3492,15 +3488,18 @@ iscsit_build_sendtargets_response(struct } } -if (np->np_sockaddr.ss_family ==AF_INET6 ) - fmt_str ="TargetAddress=[%s]:%hu,%hu" ; -else - fmt_str ="TargetAddress=%s:%hu,%hu" ; - - len =sprintf (buf, fmt_str, - inaddr_any ? conn->local_ip : np->np_ip, - np->np_port, - tpg->tpgt); +if (inaddr_any) { + len =sprintf (buf,"TargetAddress=" +"%s:%hu,%hu" , + conn->local_ip, + np->np_port, + tpg->tpgt); + }else { + len =sprintf (buf,"TargetAddress=" +"%pISpc,%hu" , + &np->np_sockaddr, + tpg->tpgt); + } len +=1 ;if ((len + payload_len) > buffer_len) {
drivers/target/iscsi/iscsi_target.h +1 -1
@@ -13,7 +13,7 @@ extern int iscsit_deaccess_np(struct iscextern bool iscsit_check_np_match (struct __kernel_sockaddr_storage *,struct iscsi_np *,int );extern struct iscsi_np *iscsit_add_np (struct __kernel_sockaddr_storage *, -char *,int ); +int );extern int iscsit_reset_np_thread (struct iscsi_np *,struct iscsi_tpg_np *,struct iscsi_portal_group *,bool );extern int iscsit_del_np (struct iscsi_np *);
drivers/target/iscsi/iscsi_target_configfs.c +7 -7
@@ -99,7 +99,7 @@ static ssize_t lio_target_np_store_sctp(* Use existing np->np_sockaddr for SCTP network portal reference */ tpg_np_sctp =iscsit_tpg_add_network_portal (tpg, &np->np_sockaddr, - np->np_ip, tpg_np,ISCSI_SCTP_TCP ); + tpg_np,ISCSI_SCTP_TCP );if (!tpg_np_sctp ||IS_ERR (tpg_np_sctp)) goto out; }else {
@@ -177,7 +177,7 @@ static ssize_t lio_target_np_store_iser( } tpg_np_iser =iscsit_tpg_add_network_portal (tpg, &np->np_sockaddr, - np->np_ip, tpg_np,ISCSI_INFINIBAND ); + tpg_np,ISCSI_INFINIBAND );if (IS_ERR (tpg_np_iser)) { rc =PTR_ERR (tpg_np_iser); goto out;
@@ -248,8 +248,8 @@ static struct se_tpg_np *lio_target_callreturn ERR_PTR (-EINVAL ); } str++;/* Skip over leading "[" */ - *str2 ='\0' ;/* Terminate the IPv6 address */ - str2++;/* Skip over the "]" */ + *str2 ='\0' ;/* Terminate the unbracketed IPv6 address */ + str2++;/* Skip over the \0 */ port_str =strstr (str2,":" );if (!port_str) { pr_err("Unable to locate \":port\""
@@ -316,7 +316,7 @@ static struct se_tpg_np *lio_target_call* sys/kernel/config/iscsi/$IQN/$TPG/np/$IP:$PORT/ * */ - tpg_np =iscsit_tpg_add_network_portal (tpg, &sockaddr, str,NULL , + tpg_np =iscsit_tpg_add_network_portal (tpg, &sockaddr,NULL ,ISCSI_TCP );if (IS_ERR (tpg_np)) {iscsit_put_tpg (tpg);
@@ -344,8 +344,8 @@ static void lio_target_call_delnpfromtpg se_tpg = &tpg->tpg_se_tpg;pr_debug ("LIO_Target_ConfigFS: DEREGISTER -> %s TPGT: %hu" -" PORTAL: %s:%hu\n" ,config_item_name (&se_tpg->se_tpg_wwn->wwn_group.cg_item), - tpg->tpgt, tpg_np->tpg_np->np_ip, tpg_np->tpg_np->np_port); +" PORTAL: %pISc:%hu\n" ,config_item_name (&se_tpg->se_tpg_wwn->wwn_group.cg_item), + tpg->tpgt, &tpg_np->tpg_np->np_sockaddr, tpg_np->tpg_np->np_port); ret =iscsit_tpg_del_network_portal (tpg, tpg_np);if (ret <0 )
drivers/target/iscsi/iscsi_target_login.c +4 -4
@@ -823,8 +823,8 @@ static void iscsi_handle_login_thread_tistruct iscsi_np *np = (struct iscsi_np *) data;spin_lock_bh (&np->np_thread_lock); -pr_err ("iSCSI Login timeout on Network Portal %s:%hu\n" , - np->np_ip, np->np_port); +pr_err ("iSCSI Login timeout on Network Portal %pISc:%hu\n" , + &np->np_sockaddr, np->np_port);if (np->np_login_timer_flags &ISCSI_TF_STOP ) {spin_unlock_bh (&np->np_thread_lock);
@@ -1302,8 +1302,8 @@ static int __iscsi_target_login_thread(sspin_lock_bh (&np->np_thread_lock);if (np->np_thread_state !=ISCSI_NP_THREAD_ACTIVE ) {spin_unlock_bh (&np->np_thread_lock); -pr_err ("iSCSI Network Portal on %s:%hu currently not" -" active.\n" , np->np_ip, np->np_port); +pr_err ("iSCSI Network Portal on %pISc:%hu currently not" +" active.\n" , &np->np_sockaddr, np->np_port);iscsit_tx_login_rsp (conn,ISCSI_STATUS_CLS_TARGET_ERR ,ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE ); goto new_sess_out;
drivers/target/iscsi/iscsi_target_tpg.c +7 -8
@@ -460,7 +460,6 @@ static bool iscsit_tpg_check_network_porstruct iscsi_tpg_np *iscsit_tpg_add_network_portal (struct iscsi_portal_group *tpg,struct __kernel_sockaddr_storage *sockaddr, -char *ip_str,struct iscsi_tpg_np *tpg_np_parent,int network_transport) {
@@ -470,8 +469,8 @@ struct iscsi_tpg_np *iscsit_tpg_add_netwif (!tpg_np_parent) {if (iscsit_tpg_check_network_portal (tpg->tpg_tiqn, sockaddr, network_transport)) { -pr_err ("Network Portal: %s already exists on a" -" different TPG on %s\n" , ip_str, +pr_err ("Network Portal: %pISc already exists on a" +" different TPG on %s\n" , sockaddr, tpg->tpg_tiqn->tiqn);return ERR_PTR (-EEXIST ); }
@@ -484,7 +483,7 @@ struct iscsi_tpg_np *iscsit_tpg_add_netwreturn ERR_PTR (-ENOMEM ); } - np =iscsit_add_np (sockaddr, ip_str, network_transport); + np =iscsit_add_np (sockaddr, network_transport);if (IS_ERR (np)) {kfree (tpg_np);return ERR_CAST (np);
@@ -514,8 +513,8 @@ struct iscsi_tpg_np *iscsit_tpg_add_netwspin_unlock (&tpg_np_parent->tpg_np_parent_lock); } -pr_debug ("CORE[%s] - Added Network Portal: %s:%hu,%hu on %s\n" , - tpg->tpg_tiqn->tiqn, np->np_ip, np->np_port, tpg->tpgt, +pr_debug ("CORE[%s] - Added Network Portal: %pISc:%hu,%hu on %s\n" , + tpg->tpg_tiqn->tiqn, &np->np_sockaddr, np->np_port, tpg->tpgt, np->np_transport->name);return tpg_np;
@@ -528,8 +527,8 @@ static int iscsit_tpg_release_np( {iscsit_clear_tpg_np_login_thread (tpg_np, tpg, true); -pr_debug ("CORE[%s] - Removed Network Portal: %s:%hu,%hu on %s\n" , - tpg->tpg_tiqn->tiqn, np->np_ip, np->np_port, tpg->tpgt, +pr_debug ("CORE[%s] - Removed Network Portal: %pISc:%hu,%hu on %s\n" , + tpg->tpg_tiqn->tiqn, &np->np_sockaddr, np->np_port, tpg->tpgt, np->np_transport->name); tpg_np->tpg_np =NULL ;
drivers/target/iscsi/iscsi_target_tpg.h +1 -1
@@ -22,7 +22,7 @@ extern struct iscsi_node_attrib *iscsit_extern void iscsit_tpg_del_external_nps (struct iscsi_tpg_np *);extern struct iscsi_tpg_np *iscsit_tpg_locate_child_np (struct iscsi_tpg_np *,int );extern struct iscsi_tpg_np *iscsit_tpg_add_network_portal (struct iscsi_portal_group *, -struct __kernel_sockaddr_storage *,char *,struct iscsi_tpg_np *, +struct __kernel_sockaddr_storage *,struct iscsi_tpg_np *,int );extern int iscsit_tpg_del_network_portal (struct iscsi_portal_group *,struct iscsi_tpg_np *);
include/target/iscsi/iscsi_target_core.h +0 -1
@@ -776,7 +776,6 @@ struct iscsi_np {enum iscsi_timer_flags_table np_login_timer_flags;u32 np_exports;enum np_flags_table np_flags; -unsigned char np_ip[IPV6_ADDRESS_SPACE ];u16 np_port;spinlock_t np_thread_lock;struct completion np_restart_comp;
Patches currently in stable-queue which might be from [email protected] are
queue-4.2/target-iscsi-fix-np_ip-bracket-issue-by-removing-np_ip.patch