[stgt] [PATCH 2/3] SBC: Add basic WRITE_SAME(16) support. (no unmap support)

Ronnie Sahlberg ronniesahlberg at gmail.com
Wed Apr 18 11:30:41 CEST 2012


Signed-off-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
---
 usr/bs_rdwr.c |    1 +
 usr/sbc.c     |    4 +++-
 usr/scsi.c    |    2 ++
 usr/scsi.h    |    1 +
 4 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/usr/bs_rdwr.c b/usr/bs_rdwr.c
index e4456fc..09524a4 100644
--- a/usr/bs_rdwr.c
+++ b/usr/bs_rdwr.c
@@ -111,6 +111,7 @@ static void bs_rdwr_request(struct scsi_cmd *cmd)
 
 		break;
 	case WRITE_SAME:
+	case WRITE_SAME_16:
 		while (cmd->tl > 0) {
 			blocksize = 1 << cmd->dev->blk_shift;
 			tmpbuf = scsi_get_out_buffer(cmd);
diff --git a/usr/sbc.c b/usr/sbc.c
index cf72e65..de0a13b 100644
--- a/usr/sbc.c
+++ b/usr/sbc.c
@@ -229,6 +229,7 @@ static int sbc_rw(int host_no, struct scsi_cmd *cmd)
 		}
 		break;
 	case WRITE_SAME:
+	case WRITE_SAME_16:
 		/* We only support protection information type 0 */
 		if (cmd->scb[1] & 0xe0) {
 			key = ILLEGAL_REQUEST;
@@ -251,6 +252,7 @@ static int sbc_rw(int host_no, struct scsi_cmd *cmd)
 		case WRITE_12:
 		case WRITE_16:
 		case WRITE_SAME:
+		case WRITE_SAME_16:
 		case PRE_FETCH_10:
 		case PRE_FETCH_16:
 			key = DATA_PROTECT;
@@ -683,7 +685,7 @@ static struct device_type_template sbc_template = {
 		{sbc_rw, NULL, PR_EA_FA|PR_EA_FN}, /*PRE_FETCH_16 */
 		{sbc_sync_cache, NULL, PR_WE_FA|PR_EA_FA|PR_WE_FN|PR_EA_FN},
 		{spc_illegal_op,},
-		{spc_illegal_op,},
+		{sbc_rw,},		/* WRITE_SAME_16 */
 		{spc_illegal_op,},
 		{spc_illegal_op,},
 		{spc_illegal_op,},
diff --git a/usr/scsi.c b/usr/scsi.c
index c46753e..20382f1 100644
--- a/usr/scsi.c
+++ b/usr/scsi.c
@@ -133,6 +133,7 @@ uint64_t scsi_rw_offset(uint8_t *scb)
 	case WRITE_16:
 	case VERIFY_16:
 	case WRITE_VERIFY_16:
+	case WRITE_SAME_16:
 	case SYNCHRONIZE_CACHE_16:
 		off = (uint64_t)scb[2] << 56 | (uint64_t)scb[3] << 48 |
 			(uint64_t)scb[4] << 40 | (uint64_t)scb[5] << 32 |
@@ -179,6 +180,7 @@ uint32_t scsi_rw_count(uint8_t *scb)
 	case WRITE_16:
 	case VERIFY_16:
 	case WRITE_VERIFY_16:
+	case WRITE_SAME_16:
 	case SYNCHRONIZE_CACHE_16:
 		cnt = (uint32_t)scb[10] << 24 | (uint32_t)scb[11] << 16 |
 			(uint32_t)scb[12] << 8 | (uint32_t)scb[13];
diff --git a/usr/scsi.h b/usr/scsi.h
index 1508cc6..0a02c36 100644
--- a/usr/scsi.h
+++ b/usr/scsi.h
@@ -77,6 +77,7 @@
 #define VERIFY_16	      0x8f
 #define PRE_FETCH_16          0x90
 #define SYNCHRONIZE_CACHE_16  0x91
+#define WRITE_SAME_16         0x93
 #define SERVICE_ACTION_IN     0x9e
 #define	SAI_READ_CAPACITY_16  0x10
 #define REPORT_LUNS           0xa0
-- 
1.7.3.1

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



More information about the stgt mailing list