[PATCH 10/14] tgt: Fix call to getnameinfo() on None Linux systems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Systems other then Linux are more picky with the addr length
passed to getnameinfo. They expect it to be set from the
returned length of the call to getsockname.

Also added a couple of dprints in error cases.

Signed-off-by: Boaz Harrosh <bharrosh@xxxxxxxxxxx>
---
 usr/iscsi/iscsid.c |   28 +++++++++++++++++++++++-----
 1 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/usr/iscsi/iscsid.c b/usr/iscsi/iscsid.c
index bfaec87..dca926e 100644
--- a/usr/iscsi/iscsid.c
+++ b/usr/iscsi/iscsid.c
@@ -743,6 +743,7 @@ static void text_scan_text(struct iscsi_connection *conn)
 {
 	char *key, *value, *data;
 	int datasize;
+	int ret;
 
 	data = conn->req.data;
 	datasize = conn->req.datasize;
@@ -760,22 +761,37 @@ static void text_scan_text(struct iscsi_connection *conn)
 			blen = sizeof(buf);
 
 			slen = sizeof(ss);
-			conn->tp->ep_getsockname(conn, (struct sockaddr *) &ss,
-						 &slen);
+			ret = conn->tp->ep_getsockname(conn,
+						(struct sockaddr *) &ss, &slen);
+			if (ret)
+				eprintf("getsockname Faild=>%d\n", ret);
+
 			if (ss.ss_family == AF_INET6) {
 				*p++ = '[';
 				blen--;
 			}
 
+#ifndef __MAKE_TGT_ON_BSD__
 			slen = sizeof(ss);
-			getnameinfo((struct sockaddr *) &ss, slen, p, blen,
-				    NULL, 0, NI_NUMERICHOST);
+#else
+			slen = ((struct sockaddr *)&ss)->sa_len;
+#endif
+			ret = getnameinfo((struct sockaddr *) &ss, slen, p,
+					  blen, NULL, 0, NI_NUMERICHOST);
+			if (ret) {
+				eprintf("getnameinfo Faild=>%d: %s\n",
+					ret, gai_strerror(ret));
+				/* Let failure show in target traces */
+				strcpy(p, "getnameinfo_Faild");
+			}
 
 			p = buf + strlen(buf);
 
 			if (ss.ss_family == AF_INET6)
 				 *p++ = ']';
 
+			dprintf("getnameinfo => %s\n", buf);
+
 			sprintf(p, ":%d,1", ISCSI_LISTEN_PORT);
 			target_list_build(conn, buf,
 					  strcmp(value, "All") ? value : NULL);
@@ -2071,8 +2087,10 @@ again:
 	case IOSTATE_TX_DATA:
 		ret = do_send(conn, ddigest ?
 			      IOSTATE_TX_INIT_DDIGEST : IOSTATE_TX_END);
-		if (ret < 0)
+		if (ret < 0) {
+			dprintf("do_send => %d\n", ret);
 			goto out;
+		}
 		if (conn->tx_iostate != IOSTATE_TX_INIT_DDIGEST)
 			break;
 	case IOSTATE_TX_INIT_DDIGEST:
-- 
1.6.0.6

--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux SCSI]     [Linux RAID]     [Linux Clusters]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]

  Powered by Linux