Module Name:    src
Committed By:   mlelstv
Date:           Sun Jun  5 05:36:57 UTC 2016

Modified Files:
        src/sys/dev/iscsi: iscsi_globals.h iscsi_send.c iscsi_utils.c

Log Message:
Replace the simple tag counter with the command tag coming down from scsipi.
Also set attributes according to tag types.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/iscsi/iscsi_globals.h
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/iscsi/iscsi_send.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/iscsi/iscsi_utils.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/iscsi/iscsi_globals.h
diff -u src/sys/dev/iscsi/iscsi_globals.h:1.18 src/sys/dev/iscsi/iscsi_globals.h:1.19
--- src/sys/dev/iscsi/iscsi_globals.h:1.18	Sun Jun  5 05:07:23 2016
+++ src/sys/dev/iscsi/iscsi_globals.h	Sun Jun  5 05:36:57 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsi_globals.h,v 1.18 2016/06/05 05:07:23 mlelstv Exp $	*/
+/*	$NetBSD: iscsi_globals.h,v 1.19 2016/06/05 05:36:57 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc.
@@ -48,6 +48,7 @@
 #include <sys/device.h>
 
 #include <dev/scsipi/scsi_all.h>
+#include <dev/scsipi/scsi_message.h>
 #include <dev/scsipi/scsipi_all.h>
 #include <dev/scsipi/scsiconf.h>
 #include <dev/scsipi/scsipiconf.h>
@@ -285,6 +286,7 @@ struct ccb_s {
 	/* length of text data so far */
 
 	uint64_t		lun; /* LUN */
+	uint32_t		tag; /* Command tag */
 	uint8_t			*cmd; /* SCSI command block */
 	uint16_t		cmdlen; /* SCSI command block length */
 	bool			data_in; /* if this is a read request */
@@ -462,8 +464,6 @@ struct session_s {
 	connection_t		*mru_connection;
 				/* the most recently used connection */
 
-	uint8_t			itt_id; 	/* counter for use in ITT */
-
 	ccb_t			ccb[CCBS_PER_SESSION];		/* CCBs */
 
 	char			tgtname[ISCSI_STRING_LENGTH + 1];

Index: src/sys/dev/iscsi/iscsi_send.c
diff -u src/sys/dev/iscsi/iscsi_send.c:1.24 src/sys/dev/iscsi/iscsi_send.c:1.25
--- src/sys/dev/iscsi/iscsi_send.c:1.24	Sun Jun  5 05:31:43 2016
+++ src/sys/dev/iscsi/iscsi_send.c	Sun Jun  5 05:36:57 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsi_send.c,v 1.24 2016/06/05 05:31:43 mlelstv Exp $	*/
+/*	$NetBSD: iscsi_send.c,v 1.25 2016/06/05 05:36:57 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc.
@@ -1414,11 +1414,9 @@ send_command(ccb_t *ccb, ccb_disp_t disp
 		}
 	}
 
-	/* currently ignoring tag type and id */
-	pdu->Flags |= ATTR_SIMPLE;
-
 	if (!totlen)
 		pdu->Flags |= FLAG_FINAL;
+	pdu->Flags |= ccb->tag;
 
 	if (ccb->data_in)
 		init_sernum(&ccb->DataSN_buf);
@@ -1507,6 +1505,22 @@ send_run_xfer(session_t *session, struct
 	DEB(10, ("RunXfer: Periph_lun = %d, cmd[1] = %x, cmdlen = %d\n",
 			xs->xs_periph->periph_lun, ccb->cmd[1], xs->cmdlen));
 
+	ccb->ITT |= xs->xs_tag_id << 24;
+	switch (xs->xs_tag_type) {
+	case MSG_ORDERED_Q_TAG:
+		ccb->tag = ATTR_ORDERED;
+		break;
+	case MSG_SIMPLE_Q_TAG:
+		ccb->tag = ATTR_SIMPLE;
+		break;
+	case MSG_HEAD_OF_Q_TAG:
+		ccb->tag = ATTR_HEAD_OF_QUEUE;
+		break;
+	default:
+		ccb->tag = 0;
+		break;
+	}
+
 #ifdef LUN_1
 	ccb->lun += 0x1000000000000LL;
 	ccb->cmd[1] += 0x10;

Index: src/sys/dev/iscsi/iscsi_utils.c
diff -u src/sys/dev/iscsi/iscsi_utils.c:1.14 src/sys/dev/iscsi/iscsi_utils.c:1.15
--- src/sys/dev/iscsi/iscsi_utils.c:1.14	Sun Jun  5 05:18:58 2016
+++ src/sys/dev/iscsi/iscsi_utils.c	Sun Jun  5 05:36:57 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsi_utils.c,v 1.14 2016/06/05 05:18:58 mlelstv Exp $	*/
+/*	$NetBSD: iscsi_utils.c,v 1.15 2016/06/05 05:36:57 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 2004,2005,2006,2008 The NetBSD Foundation, Inc.
@@ -244,7 +244,7 @@ get_ccb(connection_t *conn, bool waitok)
 	ccb->temp_data = NULL;
 	ccb->text_data = NULL;
 	ccb->status = ISCSI_STATUS_SUCCESS;
-	ccb->ITT = (ccb->ITT & 0xffffff) | (++sess->itt_id << 24);
+	ccb->ITT = (ccb->ITT & 0xffffff);
 	ccb->disp = CCBDISP_NOWAIT;
 	ccb->connection = conn;
 	atomic_inc_uint(&conn->usecount);

Reply via email to