All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3/6] sg: improve sg_write_mode option names
       [not found]   ` <CGME20211115200821uscas1p209c5e40580f1e5a6328f1a725f887f0f@uscas1p2.samsung.com>
@ 2021-11-15 20:07     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-15 20:07 UTC (permalink / raw)
  To: axboe, fio; +Cc: Vincent Fu

There is a name collision for the sg_write_mode options for the WRITE AND
VERIFY and VERIFY commands. Deprecate the 'verify' option and use
'write_and_verify' instead. Do the same thing for 'same' and 'write_same' to
have a consistent naming scheme. The original option names are still supported
for backward compatibility but list them as deprecated.

Here are the new sg_write_mode options:

Option			SCSI command
write			WRITE (default)
write_and_verify	WRITE AND VERIFY
verify (deprecated)	WRITE AND VERIFY
write_same		WRITE SAME
same (deprecated)	WRITE SAME
write_same_ndob         WRITE SAME with NDOB flag set
verify_bytchk_00	VERIFY with BYTCHK set to 00
verify_bytchk_01	VERIFY with BYTCHK set to 01
verify_bytchk_11	VERIFY with BYTCHK set to 11

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
---
 HOWTO        |  8 ++++++--
 engines/sg.c | 14 ++++++++++++--
 fio.1        | 10 ++++++++--
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/HOWTO b/HOWTO
index 3c507d50..0f204afa 100644
--- a/HOWTO
+++ b/HOWTO
@@ -2486,11 +2486,13 @@ with the caveat that when used on the command line, they must come after the
 
 	**write**
 		This is the default where write opcodes are issued as usual.
-	**verify**
+	**write_and_verify**
 		Issue WRITE AND VERIFY commands. The BYTCHK bit is set to 0. This
 		directs the device to carry out a medium verification with no data
 		comparison. The writefua option is ignored with this selection.
-	**same**
+	**verify**
+		This option is deprecated. Use write_and_verify instead.
+	**write_same**
 		Issue WRITE SAME commands. This transfers a single block to the device
 		and writes this same block of data to a contiguous sequence of LBAs
 		beginning at the specified offset. fio's block size parameter specifies
@@ -2501,6 +2503,8 @@ with the caveat that when used on the command line, they must come after the
 		for each command but only the first 512 bytes will be used and
 		transferred to the device. The writefua option is ignored with this
 		selection.
+	**same**
+		This option is deprecated. Use write_same instead.
 	**write_same_ndob**
 		Issue WRITE SAME(16) commands as above but with the No Data Output
 		Buffer (NDOB) bit set. No data will be transferred to the device with
diff --git a/engines/sg.c b/engines/sg.c
index 3c4e986d..d15b438f 100644
--- a/engines/sg.c
+++ b/engines/sg.c
@@ -124,14 +124,24 @@ static struct fio_option options[] = {
 			    .oval = FIO_SG_WRITE,
 			    .help = "Issue standard SCSI WRITE commands",
 			  },
-			  { .ival = "verify",
+			  { .ival = "write_and_verify",
 			    .oval = FIO_SG_WRITE_VERIFY,
 			    .help = "Issue SCSI WRITE AND VERIFY commands",
 			  },
-			  { .ival = "same",
+			  { .ival = "verify",
+			    .oval = FIO_SG_WRITE_VERIFY,
+			    .help = "Issue SCSI WRITE AND VERIFY commands. This "
+				    "option is deprecated. Use write_and_verify instead.",
+			  },
+			  { .ival = "write_same",
 			    .oval = FIO_SG_WRITE_SAME,
 			    .help = "Issue SCSI WRITE SAME commands",
 			  },
+			  { .ival = "same",
+			    .oval = FIO_SG_WRITE_SAME,
+			    .help = "Issue SCSI WRITE SAME commands. This "
+				    "option is deprecated. Use write_same instead.",
+			  },
 			  { .ival = "write_same_ndob",
 			    .oval = FIO_SG_WRITE_SAME_NDOB,
 			    .help = "Issue SCSI WRITE SAME(16) commands with NDOB flag set",
diff --git a/fio.1 b/fio.1
index b1af6e8f..71f98135 100644
--- a/fio.1
+++ b/fio.1
@@ -2289,12 +2289,15 @@ values:
 .B write (default)
 Write opcodes are issued as usual
 .TP
-.B verify
+.B write_and_verify
 Issue WRITE AND VERIFY commands. The BYTCHK bit is set to 00b. This directs the
 device to carry out a medium verification with no data comparison for the data
 that was written. The writefua option is ignored with this selection.
 .TP
-.B same
+.B verify
+This option is deprecated. Use write_and_verify instead.
+.TP
+.B write_same
 Issue WRITE SAME commands. This transfers a single block to the device
 and writes this same block of data to a contiguous sequence of LBAs
 beginning at the specified offset. fio's block size parameter
@@ -2306,6 +2309,9 @@ generate 8k of data for each command butonly the first 512 bytes will
 be used and transferred to the device. The writefua option is ignored
 with this selection.
 .TP
+.B same
+This option is deprecated. Use write_same instead.
+.TP
 .B write_same_ndob
 Issue WRITE SAME(16) commands as above but with the No Data Output
 Buffer (NDOB) bit set. No data will be transferred to the device with
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 0/6] additional sg ionegine commands
       [not found] <CGME20211115200821uscas1p12939025b77aaf0ec414bf1427cf1b72a@uscas1p1.samsung.com>
@ 2021-11-15 20:07 ` Vincent Fu
       [not found]   ` <CGME20211115200821uscas1p1319ea93782358999fb69feb0f2f2c087@uscas1p1.samsung.com>
                     ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-15 20:07 UTC (permalink / raw)
  To: axboe, fio; +Cc: Vincent Fu

Jens, please consider this patch series that adds to the sg ioengine
support for the SCSI commands VERIFY, WRITE SAME(16), and WRITE
STREAM(16).

Vincent


Vincent Fu (6):
  sg: add support for VERIFY command using write modes
  sg: add support for WRITE SAME(16) commands with NDOB flag set
  sg: improve sg_write_mode option names
  sg: add support for WRITE STREAM(16) commands
  sg: allow fio to open and close streams for WRITE STREAM(16) commands
  docs: documentation for sg WRITE STREAM(16)

 HOWTO                           |  36 ++++++-
 engines/sg.c                    | 181 ++++++++++++++++++++++++++++++--
 examples/sg_verify-fail.fio     |  48 +++++++++
 examples/sg_verify.fio          |  57 ++++++++++
 examples/sg_write_same_ndob.fio |  44 ++++++++
 fio.1                           |  47 ++++++++-
 6 files changed, 397 insertions(+), 16 deletions(-)
 create mode 100644 examples/sg_verify-fail.fio
 create mode 100644 examples/sg_verify.fio
 create mode 100644 examples/sg_write_same_ndob.fio

-- 
2.25.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/6] sg: add support for VERIFY command using write modes
       [not found]   ` <CGME20211115200821uscas1p2e7dc56386571a492e3379b718ca2770c@uscas1p2.samsung.com>
@ 2021-11-15 20:07     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-15 20:07 UTC (permalink / raw)
  To: axboe, fio; +Cc: Vincent Fu

fio does not have an explicit verify data direction and creating a new data
direction just for SCSI VERIFY commands probably is not worthwhile. The format
of SCSI VERIFY commands matches that of write operations since VERIFY commands
can include data transfer to the device. So it seems reasonable to have VERIFY
commands be accounted for as write operations by fio.

Use the sg_write_mode option to support SCSI VERIFY commands with different
BYTCHK values.

BYTCHK	Description
00	No data is transferred to the device; device data is checked
01	Device data is compared with data transferred to device
11	Same as 01 except that only one sector of data is transferred to the
device and each sector specified in the verification extent is compared against
this transferred data.

Also update documentation and add a couple example jobs files.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
---
 HOWTO                       | 14 +++++++++
 engines/sg.c                | 41 ++++++++++++++++++++++++--
 examples/sg_verify-fail.fio | 48 +++++++++++++++++++++++++++++++
 examples/sg_verify.fio      | 57 +++++++++++++++++++++++++++++++++++++
 fio.1                       | 24 +++++++++++++---
 5 files changed, 178 insertions(+), 6 deletions(-)
 create mode 100644 examples/sg_verify-fail.fio
 create mode 100644 examples/sg_verify.fio

diff --git a/HOWTO b/HOWTO
index 196bca6c..c641a2a5 100644
--- a/HOWTO
+++ b/HOWTO
@@ -2501,6 +2501,20 @@ with the caveat that when used on the command line, they must come after the
 		for each command but only the first 512 bytes will be used and
 		transferred to the device. The writefua option is ignored with this
 		selection.
+	**verify_bytchk_00**
+		Issue VERIFY commands with BYTCHK set to 00. This directs the
+		device to carry out a medium verification with no data comparison.
+	**verify_bytchk_01**
+		Issue VERIFY commands with BYTCHK set to 01. This directs the device to
+		compare the data on the device with the data transferred to the device.
+	**verify_bytchk_11**
+		Issue VERIFY commands with BYTCHK set to 11. This transfers a
+		single block to the device and compares the contents of this block with the
+		data on the device beginning at the specified offset. fio's block size
+		parameter specifies the total amount of data compared with this command.
+		However, only one block (sector) worth of data is transferred to the device.
+		This is similar to the WRITE SAME command except that data is compared instead
+		of written.
 
 .. option:: hipri : [sg]
 
diff --git a/engines/sg.c b/engines/sg.c
index 1c019384..0c525fae 100644
--- a/engines/sg.c
+++ b/engines/sg.c
@@ -66,8 +66,11 @@
 
 enum {
 	FIO_SG_WRITE		= 1,
-	FIO_SG_WRITE_VERIFY	= 2,
-	FIO_SG_WRITE_SAME	= 3
+	FIO_SG_WRITE_VERIFY,
+	FIO_SG_WRITE_SAME,
+	FIO_SG_VERIFY_BYTCHK_00,
+	FIO_SG_VERIFY_BYTCHK_01,
+	FIO_SG_VERIFY_BYTCHK_11,
 };
 
 struct sg_options {
@@ -128,6 +131,18 @@ static struct fio_option options[] = {
 			    .oval = FIO_SG_WRITE_SAME,
 			    .help = "Issue SCSI WRITE SAME commands",
 			  },
+			  { .ival = "verify_bytchk_00",
+			    .oval = FIO_SG_VERIFY_BYTCHK_00,
+			    .help = "Issue SCSI VERIFY commands with BYTCHK set to 00",
+			  },
+			  { .ival = "verify_bytchk_01",
+			    .oval = FIO_SG_VERIFY_BYTCHK_01,
+			    .help = "Issue SCSI VERIFY commands with BYTCHK set to 01",
+			  },
+			  { .ival = "verify_bytchk_11",
+			    .oval = FIO_SG_VERIFY_BYTCHK_11,
+			    .help = "Issue SCSI VERIFY commands with BYTCHK set to 11",
+			  },
 		},
 		.category = FIO_OPT_C_ENGINE,
 		.group	= FIO_OPT_G_SG,
@@ -576,6 +591,28 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u)
 			else
 				hdr->cmdp[0] = 0x93; // write same(16)
 			break;
+		case FIO_SG_VERIFY_BYTCHK_00:
+			if (lba < MAX_10B_LBA)
+				hdr->cmdp[0] = 0x2f; // VERIFY(10)
+			else
+				hdr->cmdp[0] = 0x8f; // VERIFY(16)
+			hdr->dxfer_len = 0;
+			break;
+		case FIO_SG_VERIFY_BYTCHK_01:
+			if (lba < MAX_10B_LBA)
+				hdr->cmdp[0] = 0x2f; // VERIFY(10)
+			else
+				hdr->cmdp[0] = 0x8f; // VERIFY(16)
+			hdr->cmdp[1] |= 0x02;		// BYTCHK = 01b
+			break;
+		case FIO_SG_VERIFY_BYTCHK_11:
+			if (lba < MAX_10B_LBA)
+				hdr->cmdp[0] = 0x2f; // VERIFY(10)
+			else
+				hdr->cmdp[0] = 0x8f; // VERIFY(16)
+			hdr->cmdp[1] |= 0x06;		// BYTCHK = 11b
+			hdr->dxfer_len = sd->bs;
+			break;
 		};
 
 		fio_sgio_rw_lba(hdr, lba, nr_blocks);
diff --git a/examples/sg_verify-fail.fio b/examples/sg_verify-fail.fio
new file mode 100644
index 00000000..64feece3
--- /dev/null
+++ b/examples/sg_verify-fail.fio
@@ -0,0 +1,48 @@
+#
+# **********************************
+# * !!THIS IS A DESTRUCTIVE TEST!! *
+# * IF NOT CHANGED THIS TEST WILL  *
+# * DESTROY DATA ON /dev/sdb       *
+# **********************************
+#
+# Test SCSI VERIFY commands issued via the sg ioengine
+# The jobs with fail in the name should produce errors
+#
+# job			description
+# precon		precondition the device by writing with a known
+#			pattern
+# verify01		verify each block one at a time by comparing to known
+#			pattern
+# verify01-fail		verifying one too many blocks should produce a failure
+# verify11-one_ios	verify all 20 blocks by sending only 512 bytes
+# verify11-fail		verifying beyond the preconditioned region should
+#			produce a failure
+
+[global]
+filename=/dev/sdb
+buffer_pattern=0x01
+ioengine=sg
+rw=write
+bs=512
+number_ios=20
+stonewall
+
+[precon]
+
+[verify01]
+sg_write_mode=verify_bytchk_01
+number_ios=20
+
+[verify01-fail]
+sg_write_mode=verify_bytchk_01
+number_ios=21
+
+[verify11-one_ios]
+sg_write_mode=verify_bytchk_11
+number_ios=1
+bs=10240
+
+[verify11-fail]
+sg_write_mode=verify_bytchk_11
+number_ios=1
+bs=10752
diff --git a/examples/sg_verify.fio b/examples/sg_verify.fio
new file mode 100644
index 00000000..6db0dd0a
--- /dev/null
+++ b/examples/sg_verify.fio
@@ -0,0 +1,57 @@
+#
+# **********************************
+# * !!THIS IS A DESTRUCTIVE TEST!! *
+# * IF NOT CHANGED THIS TEST WILL  *
+# * DESTROY DATA ON /dev/sdb       *
+# **********************************
+#
+# Test SCSI VERIFY commands issued via the sg ioengine
+# All of the jobs below should complete without error
+#
+# job			description
+# precon		precondition the device by writing with a known
+#			pattern
+# verify00		verify written data on medium only
+# verify01		verify each block one at a time by comparing to known
+#			pattern
+# verify01-two_ios	verify same data but with only two VERIFY operations
+# verify11		verify each block one at a time
+# verify11-five_ios	verify data with five IOs, four blocks at a time,
+#			sending 512 bytes for each IO
+# verify11-one_ios	verify all 20 blocks by sending only 512 bytes
+#
+
+[global]
+filename=/dev/sdb
+buffer_pattern=0x01
+ioengine=sg
+rw=write
+bs=512
+number_ios=20
+stonewall
+
+[precon]
+
+[verify00]
+sg_write_mode=verify_bytchk_00
+
+[verify01]
+sg_write_mode=verify_bytchk_01
+
+[verify01-two_ios]
+sg_write_mode=verify_bytchk_01
+bs=5120
+number_ios=2
+
+[verify11]
+sg_write_mode=verify_bytchk_11
+
+[verify11-five_ios]
+sg_write_mode=verify_bytchk_11
+bs=2048
+number_ios=5
+
+[verify11-one_ios]
+sg_write_mode=verify_bytchk_11
+bs=10240
+number_ios=1
diff --git a/fio.1 b/fio.1
index e3c3feae..2d69615b 100644
--- a/fio.1
+++ b/fio.1
@@ -2281,7 +2281,7 @@ With writefua option set to 1, write operations include the force
 unit access (fua) flag. Default: 0.
 .TP
 .BI (sg)sg_write_mode \fR=\fPstr
-Specify the type of write commands to issue. This option can take three
+Specify the type of write commands to issue. This option can take multiple
 values:
 .RS
 .RS
@@ -2290,9 +2290,9 @@ values:
 Write opcodes are issued as usual
 .TP
 .B verify
-Issue WRITE AND VERIFY commands. The BYTCHK bit is set to 0. This
-directs the device to carry out a medium verification with no data
-comparison. The writefua option is ignored with this selection.
+Issue WRITE AND VERIFY commands. The BYTCHK bit is set to 00b. This directs the
+device to carry out a medium verification with no data comparison for the data
+that was written. The writefua option is ignored with this selection.
 .TP
 .B same
 Issue WRITE SAME commands. This transfers a single block to the device
@@ -2305,6 +2305,22 @@ blocksize=8k will write 16 sectors with each command. fio will still
 generate 8k of data for each command butonly the first 512 bytes will
 be used and transferred to the device. The writefua option is ignored
 with this selection.
+.TP
+.B verify_bytchk_00
+Issue VERIFY commands with BYTCHK set to 00. This directs the device to carry
+out a medium verification with no data comparison.
+.TP
+.B verify_bytchk_01
+Issue VERIFY commands with BYTCHK set to 01. This directs the device to
+compare the data on the device with the data transferred to the device.
+.TP
+.B verify_bytchk_11
+Issue VERIFY commands with BYTCHK set to 11. This transfers a single block to
+the device and compares the contents of this block with the data on the device
+beginning at the specified offset. fio's block size parameter specifies the
+total amount of data compared with this command. However, only one block
+(sector) worth of data is transferred to the device. This is similar to the
+WRITE SAME command except that data is compared instead of written.
 .RE
 .RE
 .TP
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/6] sg: allow fio to open and close streams for WRITE STREAM(16) commands
       [not found]   ` <CGME20211115200822uscas1p16f41fc3283e4f36e668ff9ea189f16c5@uscas1p1.samsung.com>
@ 2021-11-15 20:07     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-15 20:07 UTC (permalink / raw)
  To: axboe, fio; +Cc: Vincent Fu

If --stream_id=0 then fio will open a stream for WRITE STREAM(16) commands and
close the stream when the device file is closed.

Example:
./fio --name=test --filename=/dev/sdb --ioengine=sg --number_ios=1 --debug=file,io --sg_write_mode=write_stream --rw=randwrite
fio: set debug option file
fio: set debug option io
test: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=sg, iodepth=1
fio-3.27
Starting 1 process
file     1072297 setup files
file     1072297 get file size for 0x7f0306fa5110/0//dev/sdb
file     1072307 trying file /dev/sdb 290
file     1072307 fd open /dev/sdb
file     1072307 file not found in hash /dev/sdb
file     1072307 sgio_stream_control: opened stream 1
file     1072307 get file /dev/sdb, ref=0
io       1072307 drop page cache /dev/sdb
file     1072307 goodf=1, badf=2, ff=2b1
file     1072307 get_next_file_rr: 0x7f0306fa5110
file     1072307 get_next_file: 0x7f0306fa5110 [/dev/sdb]
file     1072307 get file /dev/sdb, ref=1
io       1072307 fill: io_u 0xb55700: off=0x35ef554000,len=0x1000,ddir=1,file=/dev/sdb
io       1072307 prep: io_u 0xb55700: off=0x35ef554000,len=0x1000,ddir=1,file=/dev/sdb
io       1072307 prep: io_u 0xb55700: ret=0
io       1072307 queue: io_u 0xb55700: off=0x35ef554000,len=0x1000,ddir=1,file=/dev/sdb
io       1072307 complete: io_u 0xb55700: off=0x35ef554000,len=0x1000,ddir=1,file=/dev/sdb
file     1072307 put file /dev/sdb, ref=2
file     1072307 close files
file     1072307 put file /dev/sdb, ref=1
file     1072307 sgio_stream_control: closed stream 1
file     1072307 fd close /dev/sdb
io       1072307 close ioengine sg
io       1072307 free ioengine sg

test: (groupid=0, jobs=1): err= 0: pid=1072307: Mon Aug 16 14:25:45 2021
  write: IOPS=200, BW=800KiB/s (819kB/s)(4096B/5msec); 0 zone resets
    clat (nsec): min=93339, max=93339, avg=93339.00, stdev= 0.00
     lat (nsec): min=96201, max=96201, avg=96201.00, stdev= 0.00
    clat percentiles (nsec):
     |  1.00th=[93696],  5.00th=[93696], 10.00th=[93696], 20.00th=[93696],
     | 30.00th=[93696], 40.00th=[93696], 50.00th=[93696], 60.00th=[93696],
     | 70.00th=[93696], 80.00th=[93696], 90.00th=[93696], 95.00th=[93696],
     | 99.00th=[93696], 99.50th=[93696], 99.90th=[93696], 99.95th=[93696],
     | 99.99th=[93696]
  lat (usec)   : 100=100.00%
  cpu          : usr=100.00%, sys=0.00%, ctx=2, majf=0, minf=20
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,1,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=800KiB/s (819kB/s), 800KiB/s-800KiB/s (819kB/s-819kB/s), io=4096B (4096B), run=5-5msec

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
---
 engines/sg.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 82 insertions(+), 2 deletions(-)

diff --git a/engines/sg.c b/engines/sg.c
index b51edb07..72ee07ba 100644
--- a/engines/sg.c
+++ b/engines/sg.c
@@ -217,6 +217,11 @@ struct sgio_data {
 #endif
 };
 
+static inline uint16_t sgio_get_be16(uint8_t *buf)
+{
+	return be16_to_cpu(*((uint16_t *) buf));
+}
+
 static inline uint32_t sgio_get_be32(uint8_t *buf)
 {
 	return be32_to_cpu(*((uint32_t *) buf));
@@ -632,7 +637,7 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u)
 			if (o->writefua)
 				hdr->cmdp[1] |= 0x08;
 			sgio_set_be64(lba, &hdr->cmdp[2]);
-			sgio_set_be16(o->stream_id, &hdr->cmdp[10]);
+			sgio_set_be16((uint16_t) io_u->file->engine_pos, &hdr->cmdp[10]);
 			sgio_set_be16((uint16_t) nr_blocks, &hdr->cmdp[12]);
 			break;
 		case FIO_SG_VERIFY_BYTCHK_00:
@@ -1053,9 +1058,60 @@ static int fio_sgio_type_check(struct thread_data *td, struct fio_file *f)
 	return 0;
 }
 
+static int fio_sgio_stream_control(struct fio_file *f, bool open_stream, uint16_t *stream_id)
+{
+	struct sg_io_hdr hdr;
+	unsigned char cmd[16];
+	unsigned char sb[64];
+	unsigned char buf[8];
+	int ret;
+
+	memset(&hdr, 0, sizeof(hdr));
+	memset(cmd, 0, sizeof(cmd));
+	memset(sb, 0, sizeof(sb));
+	memset(buf, 0, sizeof(buf));
+
+	hdr.interface_id = 'S';
+	hdr.cmdp = cmd;
+	hdr.cmd_len = 16;
+	hdr.sbp = sb;
+	hdr.mx_sb_len = sizeof(sb);
+	hdr.timeout = SCSI_TIMEOUT_MS;
+	hdr.cmdp[0] = 0x9e;
+	hdr.dxfer_direction = SG_DXFER_FROM_DEV;
+	hdr.dxferp = buf;
+	hdr.dxfer_len = sizeof(buf);
+	sgio_set_be32(sizeof(buf), &hdr.cmdp[10]);
+
+	if (open_stream)
+		hdr.cmdp[1] = 0x34;
+	else {
+		hdr.cmdp[1] = 0x54;
+		sgio_set_be16(*stream_id, &hdr.cmdp[4]);
+	}
+
+	ret = ioctl(f->fd, SG_IO, &hdr);
+
+	if (ret < 0)
+		return ret;
+
+	if (hdr.info & SG_INFO_CHECK)
+		return 1;
+
+	if (open_stream) {
+		*stream_id = sgio_get_be16(&buf[4]);
+		dprint(FD_FILE, "sgio_stream_control: opened stream %u\n", (unsigned int) *stream_id);
+		assert(*stream_id != 0);
+	} else
+		dprint(FD_FILE, "sgio_stream_control: closed stream %u\n", (unsigned int) *stream_id);
+
+	return 0;
+}
+
 static int fio_sgio_open(struct thread_data *td, struct fio_file *f)
 {
 	struct sgio_data *sd = td->io_ops_data;
+	struct sg_options *o = td->eo;
 	int ret;
 
 	ret = generic_open_file(td, f);
@@ -1067,9 +1123,33 @@ static int fio_sgio_open(struct thread_data *td, struct fio_file *f)
 		return ret;
 	}
 
+	if (o->write_mode == FIO_SG_WRITE_STREAM) {
+		if (o->stream_id)
+			f->engine_pos = o->stream_id;
+		else {
+			ret = fio_sgio_stream_control(f, true, (uint16_t *) &f->engine_pos);
+			if (ret)
+				return ret;
+		}
+	}
+
 	return 0;
 }
 
+int fio_sgio_close(struct thread_data *td, struct fio_file *f)
+{
+	struct sg_options *o = td->eo;
+	int ret;
+
+	if (!o->stream_id && o->write_mode == FIO_SG_WRITE_STREAM) {
+		ret = fio_sgio_stream_control(f, false, (uint16_t *) &f->engine_pos);
+		if (ret)
+			return ret;
+	}
+
+	return generic_close_file(td, f);
+}
+
 /*
  * Build an error string with details about the driver, host or scsi
  * error contained in the sg header Caller will use as necessary.
@@ -1344,7 +1424,7 @@ static struct ioengine_ops ioengine = {
 	.event		= fio_sgio_event,
 	.cleanup	= fio_sgio_cleanup,
 	.open_file	= fio_sgio_open,
-	.close_file	= generic_close_file,
+	.close_file	= fio_sgio_close,
 	.get_file_size	= fio_sgio_get_file_size,
 	.flags		= FIO_SYNCIO | FIO_RAWIO,
 	.options	= options,
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/6] sg: add support for WRITE SAME(16) commands with NDOB flag set
       [not found]   ` <CGME20211115200821uscas1p1319ea93782358999fb69feb0f2f2c087@uscas1p1.samsung.com>
@ 2021-11-15 20:07     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-15 20:07 UTC (permalink / raw)
  To: axboe, fio; +Cc: Vincent Fu

Add the sg_write_mode option write_same_ndob to issue WRITE SAME(16) commands
with the no data output buffer flag set. This flag is not supported for WRITE
SAME(10). So all commands with this option will be WRITE SAME(16).

Also include an example job file.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
---
 HOWTO                           |  5 ++++
 engines/sg.c                    | 19 +++++++++++---
 examples/sg_write_same_ndob.fio | 44 +++++++++++++++++++++++++++++++++
 fio.1                           |  6 +++++
 4 files changed, 70 insertions(+), 4 deletions(-)
 create mode 100644 examples/sg_write_same_ndob.fio

diff --git a/HOWTO b/HOWTO
index c641a2a5..3c507d50 100644
--- a/HOWTO
+++ b/HOWTO
@@ -2501,6 +2501,11 @@ with the caveat that when used on the command line, they must come after the
 		for each command but only the first 512 bytes will be used and
 		transferred to the device. The writefua option is ignored with this
 		selection.
+	**write_same_ndob**
+		Issue WRITE SAME(16) commands as above but with the No Data Output
+		Buffer (NDOB) bit set. No data will be transferred to the device with
+		this bit set. Data written will be a pre-determined pattern such as
+		all zeroes.
 	**verify_bytchk_00**
 		Issue VERIFY commands with BYTCHK set to 00. This directs the
 		device to carry out a medium verification with no data comparison.
diff --git a/engines/sg.c b/engines/sg.c
index 0c525fae..3c4e986d 100644
--- a/engines/sg.c
+++ b/engines/sg.c
@@ -68,6 +68,7 @@ enum {
 	FIO_SG_WRITE		= 1,
 	FIO_SG_WRITE_VERIFY,
 	FIO_SG_WRITE_SAME,
+	FIO_SG_WRITE_SAME_NDOB,
 	FIO_SG_VERIFY_BYTCHK_00,
 	FIO_SG_VERIFY_BYTCHK_01,
 	FIO_SG_VERIFY_BYTCHK_11,
@@ -131,6 +132,10 @@ static struct fio_option options[] = {
 			    .oval = FIO_SG_WRITE_SAME,
 			    .help = "Issue SCSI WRITE SAME commands",
 			  },
+			  { .ival = "write_same_ndob",
+			    .oval = FIO_SG_WRITE_SAME_NDOB,
+			    .help = "Issue SCSI WRITE SAME(16) commands with NDOB flag set",
+			  },
 			  { .ival = "verify_bytchk_00",
 			    .oval = FIO_SG_VERIFY_BYTCHK_00,
 			    .help = "Issue SCSI VERIFY commands with BYTCHK set to 00",
@@ -517,9 +522,9 @@ static enum fio_q_status fio_sgio_doio(struct thread_data *td,
 }
 
 static void fio_sgio_rw_lba(struct sg_io_hdr *hdr, unsigned long long lba,
-			    unsigned long long nr_blocks)
+			    unsigned long long nr_blocks, bool override16)
 {
-	if (lba < MAX_10B_LBA) {
+	if (lba < MAX_10B_LBA && !override16) {
 		sgio_set_be32((uint32_t) lba, &hdr->cmdp[2]);
 		sgio_set_be16((uint16_t) nr_blocks, &hdr->cmdp[7]);
 	} else {
@@ -560,7 +565,7 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u)
 		if (o->readfua)
 			hdr->cmdp[1] |= 0x08;
 
-		fio_sgio_rw_lba(hdr, lba, nr_blocks);
+		fio_sgio_rw_lba(hdr, lba, nr_blocks, false);
 
 	} else if (io_u->ddir == DDIR_WRITE) {
 		sgio_hdr_init(sd, hdr, io_u, 1);
@@ -591,6 +596,11 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u)
 			else
 				hdr->cmdp[0] = 0x93; // write same(16)
 			break;
+		case FIO_SG_WRITE_SAME_NDOB:
+			hdr->cmdp[0] = 0x93; // write same(16)
+			hdr->cmdp[1] |= 0x1; // no data output buffer
+			hdr->dxfer_len = 0;
+			break;
 		case FIO_SG_VERIFY_BYTCHK_00:
 			if (lba < MAX_10B_LBA)
 				hdr->cmdp[0] = 0x2f; // VERIFY(10)
@@ -615,7 +625,8 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u)
 			break;
 		};
 
-		fio_sgio_rw_lba(hdr, lba, nr_blocks);
+		fio_sgio_rw_lba(hdr, lba, nr_blocks,
+			o->write_mode == FIO_SG_WRITE_SAME_NDOB);
 
 	} else if (io_u->ddir == DDIR_TRIM) {
 		struct sgio_trim *st;
diff --git a/examples/sg_write_same_ndob.fio b/examples/sg_write_same_ndob.fio
new file mode 100644
index 00000000..fb047319
--- /dev/null
+++ b/examples/sg_write_same_ndob.fio
@@ -0,0 +1,44 @@
+#
+# **********************************
+# * !!THIS IS A DESTRUCTIVE TEST!! *
+# * IF NOT CHANGED THIS TEST WILL  *
+# * DESTROY DATA ON /dev/sdb       *
+# **********************************
+#
+# Test WRITE SAME commands with the NDOB flag set
+# issued via the sg ioengine
+# All of the jobs below should complete without error
+# except the last one
+#
+# job			description
+# precon		Precondition the device by writing 20 blocks with a
+# 			known pattern
+# write_same_ndob	Write 19 sectors of all zeroes with the NDOB flag set
+# verify-pass		Verify 19 blocks of all zeroes
+# verify-fail		Verify 20 blocks of all zeroes. This should fail.
+#
+
+[global]
+filename=/dev/sdb
+buffer_pattern=0x01
+ioengine=sg
+rw=write
+bs=512
+stonewall
+
+[precon]
+number_ios=20
+
+[write_same_ndob]
+sg_write_mode=write_same_ndob
+number_ios=19
+
+[verify-pass]
+sg_write_mode=verify_bytchk_01
+buffer_pattern=0x00
+number_ios=19
+
+[verify-fail]
+sg_write_mode=verify_bytchk_01
+buffer_pattern=0x00
+number_ios=20
diff --git a/fio.1 b/fio.1
index 2d69615b..b1af6e8f 100644
--- a/fio.1
+++ b/fio.1
@@ -2306,6 +2306,12 @@ generate 8k of data for each command butonly the first 512 bytes will
 be used and transferred to the device. The writefua option is ignored
 with this selection.
 .TP
+.B write_same_ndob
+Issue WRITE SAME(16) commands as above but with the No Data Output
+Buffer (NDOB) bit set. No data will be transferred to the device with
+this bit set. Data written will be a pre-determined pattern such as
+all zeroes.
+.TP
 .B verify_bytchk_00
 Issue VERIFY commands with BYTCHK set to 00. This directs the device to carry
 out a medium verification with no data comparison.
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 6/6] docs: documentation for sg WRITE STREAM(16)
       [not found]   ` <CGME20211115200822uscas1p2795a33fbed15d3f1b6029116a8123d05@uscas1p2.samsung.com>
@ 2021-11-15 20:07     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-15 20:07 UTC (permalink / raw)
  To: axboe, fio; +Cc: Vincent Fu

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
---
 HOWTO | 9 +++++++++
 fio.1 | 9 +++++++++
 2 files changed, 18 insertions(+)

diff --git a/HOWTO b/HOWTO
index 0f204afa..ccf2442d 100644
--- a/HOWTO
+++ b/HOWTO
@@ -2510,6 +2510,9 @@ with the caveat that when used on the command line, they must come after the
 		Buffer (NDOB) bit set. No data will be transferred to the device with
 		this bit set. Data written will be a pre-determined pattern such as
 		all zeroes.
+	**write_stream**
+		Issue WRITE STREAM(16) commands. Use the **stream_id** option to specify
+		the stream identifier.
 	**verify_bytchk_00**
 		Issue VERIFY commands with BYTCHK set to 00. This directs the
 		device to carry out a medium verification with no data comparison.
@@ -2525,6 +2528,12 @@ with the caveat that when used on the command line, they must come after the
 		This is similar to the WRITE SAME command except that data is compared instead
 		of written.
 
+.. option:: stream_id=int : [sg]
+
+	Set the stream identifier for WRITE STREAM commands. If this is set to 0 (which is not
+	a valid stream identifier) fio will open a stream and then close it when done. Default
+	is 0.
+
 .. option:: hipri : [sg]
 
 	If this option is set, fio will attempt to use polled IO completions.
diff --git a/fio.1 b/fio.1
index 71f98135..823c925d 100644
--- a/fio.1
+++ b/fio.1
@@ -2318,6 +2318,10 @@ Buffer (NDOB) bit set. No data will be transferred to the device with
 this bit set. Data written will be a pre-determined pattern such as
 all zeroes.
 .TP
+.B write_stream
+Issue WRITE STREAM(16) commands. Use the stream_id option to specify
+the stream identifier.
+.TP
 .B verify_bytchk_00
 Issue VERIFY commands with BYTCHK set to 00. This directs the device to carry
 out a medium verification with no data comparison.
@@ -2336,6 +2340,11 @@ WRITE SAME command except that data is compared instead of written.
 .RE
 .RE
 .TP
+.BI (sg)stream_id \fR=\fPint
+Set the stream identifier for WRITE STREAM commands. If this is set to 0 (which is not
+a valid stream identifier) fio will open a stream and then close it when done. Default
+is 0.
+.TP
 .BI (nbd)uri \fR=\fPstr
 Specify the NBD URI of the server to test.
 The string is a standard NBD URI (see
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/6] sg: add support for WRITE STREAM(16) commands
       [not found]   ` <CGME20211115200821uscas1p28671af8f28d8326c7dd2dc2ff1204d4b@uscas1p2.samsung.com>
@ 2021-11-15 20:07     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-15 20:07 UTC (permalink / raw)
  To: axboe, fio; +Cc: Vincent Fu

Add the "write_stream" option to sg_write_mode to send WRITE STREAM(16)
commands. Use the new stream_id option to set the stream identifier.

Example:

sg_stream_ctl -o /dev/sdb
Assigned stream id: 1
./fio --name=test --filename=/dev/sdb --ioengine=sg --sg_write_mode=write_stream --stream_id=1 --rw=randwrite --time_based --runtime=10s
...
sg_stream_ctl -c --id=1 /dev/sdb

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
---
 engines/sg.c | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/engines/sg.c b/engines/sg.c
index d15b438f..b51edb07 100644
--- a/engines/sg.c
+++ b/engines/sg.c
@@ -69,6 +69,7 @@ enum {
 	FIO_SG_WRITE_VERIFY,
 	FIO_SG_WRITE_SAME,
 	FIO_SG_WRITE_SAME_NDOB,
+	FIO_SG_WRITE_STREAM,
 	FIO_SG_VERIFY_BYTCHK_00,
 	FIO_SG_VERIFY_BYTCHK_01,
 	FIO_SG_VERIFY_BYTCHK_11,
@@ -80,6 +81,7 @@ struct sg_options {
 	unsigned int readfua;
 	unsigned int writefua;
 	unsigned int write_mode;
+	uint16_t stream_id;
 };
 
 static struct fio_option options[] = {
@@ -158,10 +160,24 @@ static struct fio_option options[] = {
 			    .oval = FIO_SG_VERIFY_BYTCHK_11,
 			    .help = "Issue SCSI VERIFY commands with BYTCHK set to 11",
 			  },
+			  { .ival = "write_stream",
+			    .oval = FIO_SG_WRITE_STREAM,
+			    .help = "Issue SCSI WRITE STREAM(16) commands",
+			  },
 		},
 		.category = FIO_OPT_C_ENGINE,
 		.group	= FIO_OPT_G_SG,
 	},
+	{
+		.name	= "stream_id",
+		.lname	= "stream id for WRITE STREAM(16) commands",
+		.type	= FIO_OPT_INT,
+		.off1	= offsetof(struct sg_options, stream_id),
+		.help	= "Stream ID for WRITE STREAM(16) commands",
+		.def	= "0",
+		.category = FIO_OPT_C_ENGINE,
+		.group	= FIO_OPT_G_SG,
+	},
 	{
 		.name	= NULL,
 	},
@@ -611,6 +627,14 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u)
 			hdr->cmdp[1] |= 0x1; // no data output buffer
 			hdr->dxfer_len = 0;
 			break;
+		case FIO_SG_WRITE_STREAM:
+			hdr->cmdp[0] = 0x9a; // write stream (16)
+			if (o->writefua)
+				hdr->cmdp[1] |= 0x08;
+			sgio_set_be64(lba, &hdr->cmdp[2]);
+			sgio_set_be16(o->stream_id, &hdr->cmdp[10]);
+			sgio_set_be16((uint16_t) nr_blocks, &hdr->cmdp[12]);
+			break;
 		case FIO_SG_VERIFY_BYTCHK_00:
 			if (lba < MAX_10B_LBA)
 				hdr->cmdp[0] = 0x2f; // VERIFY(10)
@@ -635,8 +659,9 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u)
 			break;
 		};
 
-		fio_sgio_rw_lba(hdr, lba, nr_blocks,
-			o->write_mode == FIO_SG_WRITE_SAME_NDOB);
+		if (o->write_mode != FIO_SG_WRITE_STREAM)
+			fio_sgio_rw_lba(hdr, lba, nr_blocks,
+				o->write_mode == FIO_SG_WRITE_SAME_NDOB);
 
 	} else if (io_u->ddir == DDIR_TRIM) {
 		struct sgio_trim *st;
-- 
2.25.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* RE: [PATCH 0/6] additional sg ionegine commands
       [not found]   ` <CGME20211129152026uscas1p1c9f4f5b6d00f3b0eea2d2b6d9868fcc6@uscas1p1.samsung.com>
@ 2021-11-29 15:19     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2021-11-29 15:19 UTC (permalink / raw)
  To: axboe, fio

Jens, please let me know if you have any feedback about this patch series.

Vincent

> -----Original Message-----
> From: Vincent Fu
> Sent: Monday, November 15, 2021 3:07 PM
> To: axboe@kernel.dk; fio@vger.kernel.org
> Cc: Vincent Fu <vincent.fu@samsung.com>
> Subject: [PATCH 0/6] additional sg ionegine commands
> 
> Jens, please consider this patch series that adds to the sg ioengine support
> for the SCSI commands VERIFY, WRITE SAME(16), and WRITE STREAM(16).
> 
> Vincent
> 
> 
> Vincent Fu (6):
>   sg: add support for VERIFY command using write modes
>   sg: add support for WRITE SAME(16) commands with NDOB flag set
>   sg: improve sg_write_mode option names
>   sg: add support for WRITE STREAM(16) commands
>   sg: allow fio to open and close streams for WRITE STREAM(16) commands
>   docs: documentation for sg WRITE STREAM(16)
> 
>  HOWTO                           |  36 ++++++-
>  engines/sg.c                    | 181 ++++++++++++++++++++++++++++++--
>  examples/sg_verify-fail.fio     |  48 +++++++++
>  examples/sg_verify.fio          |  57 ++++++++++
>  examples/sg_write_same_ndob.fio |  44 ++++++++
>  fio.1                           |  47 ++++++++-
>  6 files changed, 397 insertions(+), 16 deletions(-)  create mode 100644
> examples/sg_verify-fail.fio  create mode 100644 examples/sg_verify.fio
> create mode 100644 examples/sg_write_same_ndob.fio
> 
> --
> 2.25.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 0/6] additional sg ionegine commands
       [not found]   ` <CGME20220118130352uscas1p1a51e58ff20951777a16d2d201d63cbdb@uscas1p1.samsung.com>
@ 2022-01-18 13:02     ` Vincent Fu
  0 siblings, 0 replies; 10+ messages in thread
From: Vincent Fu @ 2022-01-18 13:02 UTC (permalink / raw)
  To: axboe, fio

Jens, please let me know your feedback on this series.

Vincent

> -----Original Message-----
> From: Vincent Fu
> Sent: Monday, November 29, 2021 10:20 AM
> To: axboe@kernel.dk; fio@vger.kernel.org
> Subject: RE: [PATCH 0/6] additional sg ionegine commands
> 
> Jens, please let me know if you have any feedback about this patch series.
> 
> Vincent
> 
> > -----Original Message-----
> > From: Vincent Fu
> > Sent: Monday, November 15, 2021 3:07 PM
> > To: axboe@kernel.dk; fio@vger.kernel.org
> > Cc: Vincent Fu <vincent.fu@samsung.com>
> > Subject: [PATCH 0/6] additional sg ionegine commands
> >
> > Jens, please consider this patch series that adds to the sg ioengine
> > support for the SCSI commands VERIFY, WRITE SAME(16), and WRITE
> STREAM(16).
> >
> > Vincent
> >
> >
> > Vincent Fu (6):
> >   sg: add support for VERIFY command using write modes
> >   sg: add support for WRITE SAME(16) commands with NDOB flag set
> >   sg: improve sg_write_mode option names
> >   sg: add support for WRITE STREAM(16) commands
> >   sg: allow fio to open and close streams for WRITE STREAM(16) commands
> >   docs: documentation for sg WRITE STREAM(16)
> >
> >  HOWTO                           |  36 ++++++-
> >  engines/sg.c                    | 181 ++++++++++++++++++++++++++++++--
> >  examples/sg_verify-fail.fio     |  48 +++++++++
> >  examples/sg_verify.fio          |  57 ++++++++++
> >  examples/sg_write_same_ndob.fio |  44 ++++++++
> >  fio.1                           |  47 ++++++++-
> >  6 files changed, 397 insertions(+), 16 deletions(-)  create mode
> > 100644 examples/sg_verify-fail.fio  create mode 100644
> > examples/sg_verify.fio create mode 100644
> > examples/sg_write_same_ndob.fio
> >
> > --
> > 2.25.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/6] additional sg ionegine commands
  2021-11-15 20:07 ` [PATCH 0/6] additional sg ionegine commands Vincent Fu
                     ` (7 preceding siblings ...)
       [not found]   ` <CGME20220118130352uscas1p1a51e58ff20951777a16d2d201d63cbdb@uscas1p1.samsung.com>
@ 2022-01-18 13:37   ` Jens Axboe
  8 siblings, 0 replies; 10+ messages in thread
From: Jens Axboe @ 2022-01-18 13:37 UTC (permalink / raw)
  To: Vincent Fu, fio

On Mon, 15 Nov 2021 20:07:17 +0000, Vincent Fu wrote:
> Jens, please consider this patch series that adds to the sg ioengine
> support for the SCSI commands VERIFY, WRITE SAME(16), and WRITE
> STREAM(16).
> 
> Vincent
> 
> 
> [...]

Applied, thanks!

[1/6] sg: add support for VERIFY command using write modes
      commit: e8ab121c88d61624c0925b54013cd57c2dc171f2
[2/6] sg: add support for WRITE SAME(16) commands with NDOB flag set
      commit: 91e13ff509253667c11fce864693849d2cb77b67
[3/6] sg: improve sg_write_mode option names
      commit: eadf32608213dc2a44303fce0b417fbb95d1a0a6
[4/6] sg: add support for WRITE STREAM(16) commands
      commit: 9917adb5d3b9c480ac710af4bc2c9c0421c6a5df
[5/6] sg: allow fio to open and close streams for WRITE STREAM(16) commands
      commit: 5f647ee93b0b8ee07d6cbcef571986f8a18b1234
[6/6] docs: documentation for sg WRITE STREAM(16)
      commit: 71efbed61dfb157dfa7fe550f500b53f9731e1cb

Best regards,
-- 
Jens Axboe



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-01-18 13:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20211115200821uscas1p12939025b77aaf0ec414bf1427cf1b72a@uscas1p1.samsung.com>
2021-11-15 20:07 ` [PATCH 0/6] additional sg ionegine commands Vincent Fu
     [not found]   ` <CGME20211115200821uscas1p1319ea93782358999fb69feb0f2f2c087@uscas1p1.samsung.com>
2021-11-15 20:07     ` [PATCH 2/6] sg: add support for WRITE SAME(16) commands with NDOB flag set Vincent Fu
     [not found]   ` <CGME20211115200821uscas1p2e7dc56386571a492e3379b718ca2770c@uscas1p2.samsung.com>
2021-11-15 20:07     ` [PATCH 1/6] sg: add support for VERIFY command using write modes Vincent Fu
     [not found]   ` <CGME20211115200821uscas1p28671af8f28d8326c7dd2dc2ff1204d4b@uscas1p2.samsung.com>
2021-11-15 20:07     ` [PATCH 4/6] sg: add support for WRITE STREAM(16) commands Vincent Fu
     [not found]   ` <CGME20211115200822uscas1p2795a33fbed15d3f1b6029116a8123d05@uscas1p2.samsung.com>
2021-11-15 20:07     ` [PATCH 6/6] docs: documentation for sg WRITE STREAM(16) Vincent Fu
     [not found]   ` <CGME20211115200822uscas1p16f41fc3283e4f36e668ff9ea189f16c5@uscas1p1.samsung.com>
2021-11-15 20:07     ` [PATCH 5/6] sg: allow fio to open and close streams for WRITE STREAM(16) commands Vincent Fu
     [not found]   ` <CGME20211115200821uscas1p209c5e40580f1e5a6328f1a725f887f0f@uscas1p2.samsung.com>
2021-11-15 20:07     ` [PATCH 3/6] sg: improve sg_write_mode option names Vincent Fu
     [not found]   ` <CGME20211129152026uscas1p1c9f4f5b6d00f3b0eea2d2b6d9868fcc6@uscas1p1.samsung.com>
2021-11-29 15:19     ` [PATCH 0/6] additional sg ionegine commands Vincent Fu
     [not found]   ` <CGME20220118130352uscas1p1a51e58ff20951777a16d2d201d63cbdb@uscas1p1.samsung.com>
2022-01-18 13:02     ` Vincent Fu
2022-01-18 13:37   ` Jens Axboe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.