Giter VIP home page Giter VIP logo

libzbc's People

Contributors

alandtse avatar damien-lemoal avatar davidbutterfield avatar dmitry-fomichev avatar floatious avatar harshavardhana avatar hgst avatar jengelh avatar kaga-koko avatar kawasaki avatar mmilburn avatar nmtadam avatar rajatgoel avatar suzu-masa avatar ttlajus avatar twilfredo avatar yhr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libzbc's Issues

Reading from a zone

Hi,

I am using libzbc in emulation mode (i.e. with a conventional device).
After writing to a zone via zbc_write_zone, reading from the zone using zbc_read_zone fails.

I think the reason for this is because of zbc_fake.c line 271:

if (zone->zbz_write_pointer + lba_count >
            zone->zbz_start + zone->zbz_length)
                return -EIO;

I believe this snippet is copied over from zbc_file_pwrite.

I think for zbc_file_pread, it should be modified to:

if (start_lba + lba_count >
            zone->zbz_start + zone->zbz_length)
                return -EIO;

Thanks!
Albert

Writing a Complete Zone on the Actual Drive

Hi,

I am trying to write an entire zone (256 MB) on an actual drive (not a fake one) and I am getting a "Cannot Allocate Memory (-12)" error. I am using the "zbc_write_zone" program.

The same does not happen if I write only 4 MB, and the interesting thing is that the program ends up writing 4 MB, 64 times. Hence, the total amount written is 256 MB. Yet, it gives an error if I write all 256 MB at once. Is this a bug or is this expected behavior?

Also, I get the same error "Cannot Allocate Memory (-12)" if I ever write more than 4 MB. Please find attached, the output from my terminal.

Note: This does not happen on a fake drive with emulation. I am able to write an entire zone without issue.

Thanks,

Yash
SMRDriveTest.txt

configure: error: Couldn't find scsi/sg.h

I'm trying to build libzbc v5.8.5 on an Oracle Linux VM - 4.14.35-1902.3.2.el7uek.x86_64. The configure step fails with this error:

./configure --with-test CFLAGS=-fPIC
.
.
.
checking whether more special flags are required for pthreads... no
checking for PTHREAD_PRIO_INHERIT... yes
checking for scsi/scsi.h... yes
checking for scsi/sg.h... no
configure: error: Couldn't find scsi/sg.h

I've had no luck building this on physical machine with the same OS installed as well. I get the same error. Any ideas, what's going on?

Build without libgtk/GUI?

Is there a way to compile without libgtk? I am hitting this issue referenced earlier: #2 but I don't want to build the GUI program and it seems it should be optional based on how the autoconf file is authored.

Issue running configure on Ubuntu 16

checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking scsi/scsi.h usability... no
checking scsi/scsi.h presence... yes
configure: WARNING: scsi/scsi.h: present but cannot be compiled
configure: WARNING: scsi/scsi.h:     check for missing prerequisite headers?
configure: WARNING: scsi/scsi.h: see the Autoconf documentation
configure: WARNING: scsi/scsi.h:     section "Present But Cannot Be Compiled"
configure: WARNING: scsi/scsi.h: proceeding with the compiler's result
configure: WARNING:     ## dddddddddddddddddddddddddddddddddddd ##
configure: WARNING:     ## Report this to [email protected] ##
configure: WARNING:     ## dddddddddddddddddddddddddddddddddddd ##
checking for scsi/scsi.h... no
configure: error: Couldn't find scsi/scsi.h

-rw-r--r-- 1 root root 6969 Feb 5 2019 /usr/include/scsi/scsi.h

Any help/tips appreciated!

Support for vector I/O preadv & pwritev

I was going to add support for vector I/O with new zbc_preadv and zbc_pwritev interfaces with your approval.

One question I have before getting started is if vector I/O is supported by Direct I/O when using the sg driver.

In here: https://www.tldp.org/HOWTO/pdf/SCSI-Generic-HOWTO.pdf
I see

Furthermore iovec_count's variety of scatter gather (into the user space) is only available when normal (or "indirect") IO is being used. Hence when the SG_FLAG_DIRECT_IO or SG_FLAG_MMAP_IO are set in 'flags' then 'iovec_count' should be zero.

However, inspecting the 4.20 kernel, I don't see any limitation so perhaps this statement is obsolete. Are you aware?

As an experiment I added a single sg_iovec_t iovec[1]; to zbc_sg_cmd and funneled all I/O through this single vector in zbc_sg_cmd_init. I think this is a decent hack

	if (cmd->out_bufsz) {
		cmd->io_hdr.dxferp = cmd->iovec;
		cmd->io_hdr.iovec_count = 1;
		cmd->iovec[0].iov_base = cmd->out_buf;
		cmd->iovec[0].iov_len = cmd->out_bufsz;
	}

I'm not seeing any errors with reads or writes. Do you think this is enough to prove this out?

testsuit fail for Seagate 8TB HDD with ATA Interface

Hi, I am trying to use libzbc library to test the Seagate Host Aware 8TB HDD Drive.

$ sudo zbc_info /dev/sg1
Device /dev/sg1: ATA ST8000AS0022-1WL SN01
ATA ZAC interface, Host-aware disk model
15628053168 logical blocks of 512 B
1953506646 physical blocks of 4096 B
8001.563 GB capacity

All tests pass except the two Sense Key Tests for reporting zones as shown below:

Executing sense key, sense code tests...
    010: REPORT_ZONES logical block out of range...                                                                     [Failed]
        => Expected Illegal-request / Logical-block-address-out-of-range
           Got  / 
    011: REPORT_ZONES invalid reporting option...                                                                       [Failed]
        => Expected Illegal-request / Invalid-field-in-cdb
           Got Illegal-request / Unaligned-write-command

Running the tests individually gives us the following output:

Test 010


sudo ./zbc_test_report_zones -v -lba 15628053168 /dev/sg1
(libzbc) /dev/sg1: ########## Trying BLOCK driver ##########
(libzbc) /dev/sg1: ########## BLOCK driver failed -6 ##########
(libzbc) /dev/sg1: ########## Trying ATA driver ##########
(libzbc) /dev/sg1: Sending command 0x00:0x00 (TEST UNIT READY):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 |      |      |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command TEST UNIT READY done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command TEST UNIT READY executed in 0 ms, 0 B transfered
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x07 | 0x20 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x00 | 0x90 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x02 (0x01), host status 0x0000, driver status 0x0008 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 0 ms, 0 B transfered
(libzbc) Device signature is 00:00
(libzbc) Standard ATA signature detected
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x0d | 0x0e | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x04 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x40 | 0x4a | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 28 ms, 524288 B transfered
(libzbc) Host aware ATA device detected
(libzbc) /dev/sg1: Sending command 0x12:0x00 (INQUIRY):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x12 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |   4 | 0x60 | 0x00 |      |      |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command INQUIRY done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command INQUIRY executed in 0 ms, 96 B transfered
(libzbc) /dev/sg1: Sending command 0x9e:0x10 (READ CAPACITY 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x9e | 0x10 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x20 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command READ CAPACITY 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command READ CAPACITY 16 executed in 0 ms, 32 B transfered
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x0d | 0x0e | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x01 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x30 | 0x00 | 0x09 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x00 | 0x47 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 0 ms, 512 B transfered
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x06 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0xc3 | 0x00 | 0x01 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x00 | 0xef | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 0 ms, 0 B transfered
(libzbc) /dev/sg1: Using SCSI R/W commands
(libzbc) /dev/sg1: ########## ATA driver succeeded ##########
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x0d | 0x0e | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x04 | 0x00 | 0xa3 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0xb0 | 0x03 | 0x2a | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x81 | 0x40 | 0x4a | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 8 ms, 524288 B transfered
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x0d | 0x0e | 0x80 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x08 | 0xa3 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0xb0 | 0x03 | 0x2a | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x81 | 0x40 | 0x4a | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 0 ms, 4096 B transfered
[ZONE_INFO],00000,0x3,0x1,15627976704,76464,15627976704

Test 011:

(libzbc) /dev/sg1: ########## Trying BLOCK driver ##########
(libzbc) /dev/sg1: ########## BLOCK driver failed -6 ##########
(libzbc) /dev/sg1: ########## Trying ATA driver ##########
(libzbc) /dev/sg1: Sending command 0x00:0x00 (TEST UNIT READY):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 |      |      |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command TEST UNIT READY done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command TEST UNIT READY executed in 4 ms, 0 B transfered
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x07 | 0x20 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x00 | 0x90 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x02 (0x01), host status 0x0000, driver status 0x0008 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 0 ms, 0 B transfered
(libzbc) Device signature is 00:00
(libzbc) Standard ATA signature detected
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x0d | 0x0e | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x04 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x40 | 0x4a | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 28 ms, 524288 B transfered
(libzbc) Host aware ATA device detected
(libzbc) /dev/sg1: Sending command 0x12:0x00 (INQUIRY):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x12 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |   4 | 0x60 | 0x00 |      |      |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command INQUIRY done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command INQUIRY executed in 0 ms, 96 B transfered
(libzbc) /dev/sg1: Sending command 0x9e:0x10 (READ CAPACITY 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x9e | 0x10 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x20 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command READ CAPACITY 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command READ CAPACITY 16 executed in 0 ms, 32 B transfered
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x0d | 0x0e | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x01 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x30 | 0x00 | 0x09 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x00 | 0x47 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 216 ms, 512 B transfered
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x06 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0xc3 | 0x00 | 0x01 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x00 | 0xef | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x00 (0x00), host status 0x0000, driver status 0x0000 (flags 0x0000)
(libzbc) /dev/sg1: Command ATA 16 executed in 0 ms, 0 B transfered
(libzbc) /dev/sg1: Using SCSI R/W commands
(libzbc) /dev/sg1: ########## ATA driver succeeded ##########
(libzbc) /dev/sg1: Sending command 0x85:0x00 (ATA 16):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x85 | 0x0d | 0x0e | 0x0a |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x04 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  12 | 0x00 | 0x40 | 0x4a | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: Command ATA 16 done: status 0x02 (0x01), host status 0x0000, driver status 0x0008 (flags 0x0000)
(libzbc) [ERROR] /dev/sg1: Command ATA 16 failed with status 0x02 (0x01), host status 0x0000, driver status 0x0008 (flags 0x0000)
(libzbc) /dev/sg1: Sense data (22 B):
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |Byte |   0  |  1   |  2   |  3   |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   0 | 0x72 | 0x05 | 0x21 | 0x04 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   4 | 0x00 | 0x00 | 0x00 | 0x0e |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |   8 | 0x09 | 0x0c | 0x01 | 0x04 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |  12 | 0x04 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * |=====+======+======+======+======+
(libzbc) /dev/sg1: * |  16 | 0x00 | 0x00 | 0x00 | 0x00 |
(libzbc) /dev/sg1: * +==================================
(libzbc) /dev/sg1: * |  20 | 0x40 | 0x51 |      |      |
(libzbc) /dev/sg1: * +==================================
[TEST][ERROR],zbc_report_nr_zones at lba 0, ro 0x0a failed -5
[TEST][ERROR][SENSE_KEY],Illegal-request
[TEST][ERROR][ASC_ASCQ],Unaligned-write-command

Should these two tests pass for the ATA disks as well?

Thanks,
Shehbaz

Errors of runing zbc_test.sh in libzbc-master

Hi,
I am trying compile-and-install libzbc-master following README,but when runing zbc_test.sh in libzbc-master there are errors :Test program zbc_test_close_zone not found in directory /home/zhaoyajun/Documents/libzbc-master/test/programs .
Whether or not /test/programs/close_zone/Makemodule.am do not run ,I need your help.
Thanks .
David

License Question (BSD and/or LGPL)

This is more of a question than a problem/issue..

Background:
I am interested in writing Rust bindings for libzbc. I see the header and library source files of libzbc have both BSD-2-Clause and LGPL-3.0-or-later licenses present. If/when I finish this poject, I'd like to release it under the same licenses as libzbc.

Question:
Are consumers of libzbc free to choose from either license, or will they need to comply with both?
Said another way: Will anybody linking statically to libzbc also need to release their application's source code in order to comply with LGPL obligations (since there is no static linking exception)?

I can organize the Rust project to link against libzbc either way (statically, or dynamically). I'll probably add a feature flag so linking either way remains possible. I'm just trying to decide which method of linking should be the default.

Thanks in advance for any guidance / much appreciated

Max Segments assuming device path

In using a custom symbolic link for the device path, the zbc_sg_max_segments code will fail to read the max segments as it is assuming the absolute device path.

Add code to check if the zbd_filename is a link and decode the link. Something like:

/**
 * Gets the absolute device path from the input device
 */
static void zbc_sg_device_path(struct zbc_device *dev, char *path, int path_len)
{
	struct stat lst;
	ssize_t len;


    strncpy(path, dev->zbd_filename, path_len);

    if (lstat(dev->zbd_filename, &lst) == 0) {
        if (S_ISLNK(lst.st_mode)) {
            len = readlink(dev->zbd_filename, path, path_len-1);
            if (len < 0) {
                zbc_error("%s: readlink failed %d (%s)\n",
                           dev->zbd_filename,
                           errno, strerror(errno));
            } else {
                path[len] = '\0';
            }
        }
    }
}

Can't build on Ubuntu 12.10

Hi. I'm trying to build on Ubuntu 12.10 (yes, it's back-level) and am running into a problem I don't know how to solve. Would you please help me out?

When I run ./configure, I get the following response:
...
checking for GTK... no
configure: error: Package requirements (gtk+-2.0) were not met:

No package 'gtk+-2.0' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GTK_CFLAGS
and GTK_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

So, I cleverly tried installing gtk+-2.0 by issuing "sudo apt-get install gtk+-2.0". This gets me the following response:
...
Note, selecting 'gir1.0-gtk-2.0' for regex 'gtk+-2.0'
gir1.2-gtk-2.0 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.

Can you suggest what I need to do? Thanks,

Steve

Fake ZBC Driver Metadata is not persisted across power cycle

I'm doing host restart testing where we power down the host after I/O is written and then verify the host data on power on. Nothing should be in-flight when the power down occurs.

Prior power loss I see sectors being written
(libzbc) /data/fake/fakesmr3: Write 784 sectors at sector 218352

However after a power cycle the zone is empty, resulting in I/O errors
(libzbc) /data/fake/fakesmr3: Read 784 sectors at sector 218352 (libzbc) [ERROR] /data/fake/fakesmr3: Read 784 sectors at sector 218352 failed 5 (Input/output error)

Using zbc_report_zones I can easily see there are zones we have written to but remain empty following power-cycle, including our zone with the target read
Zone 00100: type 0x2 (Sequential-write-required), cond 0xe (Full), reset recommended 0, non_seq 0, sector 204800, 2048 sectors, wp 206848 Zone 00101: type 0x2 (Sequential-write-required), cond 0xe (Full), reset recommended 0, non_seq 0, sector 206848, 2048 sectors, wp 208896 Zone 00102: type 0x2 (Sequential-write-required), cond 0xe (Full), reset recommended 0, non_seq 0, sector 208896, 2048 sectors, wp 210944 Zone 00103: type 0x2 (Sequential-write-required), cond 0xe (Full), reset recommended 0, non_seq 0, sector 210944, 2048 sectors, wp 212992 Zone 00104: type 0x2 (Sequential-write-required), cond 0xe (Full), reset recommended 0, non_seq 0, sector 212992, 2048 sectors, wp 215040 Zone 00105: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 215040, 2048 sectors, wp 215040 Zone 00106: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 217088, 2048 sectors, wp 217088 Zone 00107: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 219136, 2048 sectors, wp 219136 Zone 00108: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 221184, 2048 sectors, wp 221184
The question I have is does the fake driver support power-loss testing? It's almost like the metadata isn't synchronized with the process and data is loss. Does this seem like a sound understanding of the problem?

about logs of sg* or ad*

I ran the commands in the order posted. Most of tests hadn't succeed, such as zbc_set_zones.
I have attached a terminal log script. Please have a look
test.txt

Thanks
Sincerely

David

zlib set zones persistent across boots.

I suggest that, instead of putting the set zones emulation metadata into /tmp, that it be placed in /etc/zbc/.meta. This would allow persistence across boots.

Thanks

Error Reporting with Multi-Threaded I/O

Currently the zbc_errno struct is defined per device and is cleared / reset per I/O. When using async I/O to the same device, one runs the risk of losing critical sense key / sense code information.

I'm wondering if we can make zbc_errno thread local.

Alternatively, we could open multiple zbd device handles per I/O thread.

cannot build v4.3.1

I can build v4.3.0 but v4.3.1 fails with

lib/zbc_block.c:29:28: fatal error: linux/blkzoned.h: No such file or directory

The build machine is on kernel 4.4.0-42-generic and I've got the kernel headers installed.

v4.0

When I was using v4.0 on an emulated SATA drive, all the tests run. However, zbc_report_zones listed 0 zones. gzbc showed no zones.

Switching to v2.0 and everything seems to work.

Can anybody reproduce this problem?

Release 5.8.1 FTBFS

[   28s] + cd libzbc-5.8.1
[   28s] + autoreconf -fi
[   31s] libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'.
[   31s] libtoolize: copying file 'build-aux/ltmain.sh'
[   31s] libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
[   31s] libtoolize: copying file 'm4/libtool.m4'
[   31s] libtoolize: copying file 'm4/ltoptions.m4'
[   31s] libtoolize: copying file 'm4/ltsugar.m4'
[   31s] libtoolize: copying file 'm4/ltversion.m4'
[   31s] libtoolize: copying file 'm4/lt~obsolete.m4'
[   34s] configure.ac:19: installing 'build-aux/ar-lib'
[   34s] configure.ac:12: installing 'build-aux/compile'
[   34s] configure.ac:21: installing 'build-aux/config.guess'
[   34s] configure.ac:21: installing 'build-aux/config.sub'
[   34s] configure.ac:9: installing 'build-aux/install-sh'
[   34s] configure.ac:9: installing 'build-aux/missing'
[   34s] automake: error: cannot open < tools/gzbc/Makemodule.am: No such file or directory
[   34s] autoreconf: automake failed with exit status: 1

Make it possible to choose backends we want to try

I think there should be an easy way to choose the device types we want to try in zbc_open. If you guys are ok with adding another parameter to zbc_open (say a bitmask enabling/disabling) device types, I can work on a diff for that.

zbc_info: Invalid number of gap zones 128 (should be <= 32)

Hello,

When I clone and compile/install the latest changes, I found that the zbc_info execution error, please help check if it caused by recent changes

# modprobe scsi_debug max_luns=1 sector_size=4096 dev_size_mb=8192 zbc=managed zone_size_mb=64 zone_nr_conv=32
# zbc_info /dev/sg4 
Invalid number of gap zones 128 (should be <= 32)

# zbc_report_zones /dev/sg4 | grep Conventional | wc
     32     384    3123
zbc_report_zones /dev/sg4 | grep "Zone 00" | wc
    128    2208   16953
# zbc_report_zones /dev/sg4
Device /dev/sg4:
    Vendor ID: Linux scsi_debug 0191
    SCSI ZBC device interface, Host-managed zone model
    16777216 512-bytes sectors
    2097152 logical blocks of 4096 B
    2097152 physical blocks of 4096 B
    8.590 GB capacity
    Read commands are unrestricted
    4096 KiB max R/W size
    Maximum number of open sequential write required zones: 8
    Zone Domains command set is NOT supported
    Zone Realms command set is NOT supported
    Zone operation counts are NOT supported
    128 zones from 0, reporting option 0x00
128 / 128 zones:
Zone 00000: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 0, 131072 sectors
Zone 00001: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 131072, 131072 sectors
Zone 00002: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 262144, 131072 sectors
Zone 00003: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 393216, 131072 sectors
Zone 00004: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 524288, 131072 sectors
Zone 00005: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 655360, 131072 sectors
Zone 00006: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 786432, 131072 sectors
Zone 00007: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 917504, 131072 sectors
Zone 00008: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1048576, 131072 sectors
Zone 00009: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1179648, 131072 sectors
Zone 00010: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1310720, 131072 sectors
Zone 00011: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1441792, 131072 sectors
Zone 00012: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1572864, 131072 sectors
Zone 00013: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1703936, 131072 sectors
Zone 00014: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1835008, 131072 sectors
Zone 00015: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 1966080, 131072 sectors
Zone 00016: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 2097152, 131072 sectors
Zone 00017: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 2228224, 131072 sectors
Zone 00018: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 2359296, 131072 sectors
Zone 00019: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 2490368, 131072 sectors
Zone 00020: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 2621440, 131072 sectors
Zone 00021: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 2752512, 131072 sectors
Zone 00022: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 2883584, 131072 sectors
Zone 00023: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3014656, 131072 sectors
Zone 00024: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3145728, 131072 sectors
Zone 00025: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3276800, 131072 sectors
Zone 00026: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3407872, 131072 sectors
Zone 00027: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3538944, 131072 sectors
Zone 00028: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3670016, 131072 sectors
Zone 00029: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3801088, 131072 sectors
Zone 00030: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 3932160, 131072 sectors
Zone 00031: type 0x1 (Conventional), cond 0x0 (Not-write-pointer), sector 4063232, 131072 sectors
Zone 00032: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 4194304, 131072 sectors, wp 4194304
Zone 00033: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 4325376, 131072 sectors, wp 4325376
Zone 00034: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 4456448, 131072 sectors, wp 4456448
Zone 00035: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 4587520, 131072 sectors, wp 4587520
Zone 00036: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 4718592, 131072 sectors, wp 4718592
Zone 00037: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 4849664, 131072 sectors, wp 4849664
Zone 00038: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 4980736, 131072 sectors, wp 4980736
Zone 00039: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 5111808, 131072 sectors, wp 5111808
Zone 00040: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 5242880, 131072 sectors, wp 5242880
Zone 00041: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 5373952, 131072 sectors, wp 5373952
Zone 00042: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 5505024, 131072 sectors, wp 5505024
Zone 00043: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 5636096, 131072 sectors, wp 5636096
Zone 00044: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 5767168, 131072 sectors, wp 5767168
Zone 00045: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 5898240, 131072 sectors, wp 5898240
Zone 00046: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6029312, 131072 sectors, wp 6029312
Zone 00047: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6160384, 131072 sectors, wp 6160384
Zone 00048: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6291456, 131072 sectors, wp 6291456
Zone 00049: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6422528, 131072 sectors, wp 6422528
Zone 00050: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6553600, 131072 sectors, wp 6553600
Zone 00051: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6684672, 131072 sectors, wp 6684672
Zone 00052: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6815744, 131072 sectors, wp 6815744
Zone 00053: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 6946816, 131072 sectors, wp 6946816
Zone 00054: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7077888, 131072 sectors, wp 7077888
Zone 00055: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7208960, 131072 sectors, wp 7208960
Zone 00056: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7340032, 131072 sectors, wp 7340032
Zone 00057: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7471104, 131072 sectors, wp 7471104
Zone 00058: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7602176, 131072 sectors, wp 7602176
Zone 00059: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7733248, 131072 sectors, wp 7733248
Zone 00060: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7864320, 131072 sectors, wp 7864320
Zone 00061: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 7995392, 131072 sectors, wp 7995392
Zone 00062: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 8126464, 131072 sectors, wp 8126464
Zone 00063: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 8257536, 131072 sectors, wp 8257536
Zone 00064: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 8388608, 131072 sectors, wp 8388608
Zone 00065: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 8519680, 131072 sectors, wp 8519680
Zone 00066: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 8650752, 131072 sectors, wp 8650752
Zone 00067: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 8781824, 131072 sectors, wp 8781824
Zone 00068: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 8912896, 131072 sectors, wp 8912896
Zone 00069: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9043968, 131072 sectors, wp 9043968
Zone 00070: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9175040, 131072 sectors, wp 9175040
Zone 00071: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9306112, 131072 sectors, wp 9306112
Zone 00072: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9437184, 131072 sectors, wp 9437184
Zone 00073: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9568256, 131072 sectors, wp 9568256
Zone 00074: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9699328, 131072 sectors, wp 9699328
Zone 00075: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9830400, 131072 sectors, wp 9830400
Zone 00076: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 9961472, 131072 sectors, wp 9961472
Zone 00077: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 10092544, 131072 sectors, wp 10092544
Zone 00078: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 10223616, 131072 sectors, wp 10223616
Zone 00079: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 10354688, 131072 sectors, wp 10354688
Zone 00080: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 10485760, 131072 sectors, wp 10485760
Zone 00081: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 10616832, 131072 sectors, wp 10616832
Zone 00082: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 10747904, 131072 sectors, wp 10747904
Zone 00083: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 10878976, 131072 sectors, wp 10878976
Zone 00084: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11010048, 131072 sectors, wp 11010048
Zone 00085: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11141120, 131072 sectors, wp 11141120
Zone 00086: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11272192, 131072 sectors, wp 11272192
Zone 00087: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11403264, 131072 sectors, wp 11403264
Zone 00088: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11534336, 131072 sectors, wp 11534336
Zone 00089: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11665408, 131072 sectors, wp 11665408
Zone 00090: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11796480, 131072 sectors, wp 11796480
Zone 00091: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 11927552, 131072 sectors, wp 11927552
Zone 00092: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12058624, 131072 sectors, wp 12058624
Zone 00093: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12189696, 131072 sectors, wp 12189696
Zone 00094: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12320768, 131072 sectors, wp 12320768
Zone 00095: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12451840, 131072 sectors, wp 12451840
Zone 00096: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12582912, 131072 sectors, wp 12582912
Zone 00097: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12713984, 131072 sectors, wp 12713984
Zone 00098: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12845056, 131072 sectors, wp 12845056
Zone 00099: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 12976128, 131072 sectors, wp 12976128
Zone 00100: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 13107200, 131072 sectors, wp 13107200
Zone 00101: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 13238272, 131072 sectors, wp 13238272
Zone 00102: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 13369344, 131072 sectors, wp 13369344
Zone 00103: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 13500416, 131072 sectors, wp 13500416
Zone 00104: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 13631488, 131072 sectors, wp 13631488
Zone 00105: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 13762560, 131072 sectors, wp 13762560
Zone 00106: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 13893632, 131072 sectors, wp 13893632
Zone 00107: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14024704, 131072 sectors, wp 14024704
Zone 00108: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14155776, 131072 sectors, wp 14155776
Zone 00109: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14286848, 131072 sectors, wp 14286848
Zone 00110: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14417920, 131072 sectors, wp 14417920
Zone 00111: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14548992, 131072 sectors, wp 14548992
Zone 00112: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14680064, 131072 sectors, wp 14680064
Zone 00113: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14811136, 131072 sectors, wp 14811136
Zone 00114: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 14942208, 131072 sectors, wp 14942208
Zone 00115: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15073280, 131072 sectors, wp 15073280
Zone 00116: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15204352, 131072 sectors, wp 15204352
Zone 00117: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15335424, 131072 sectors, wp 15335424
Zone 00118: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15466496, 131072 sectors, wp 15466496
Zone 00119: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15597568, 131072 sectors, wp 15597568
Zone 00120: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15728640, 131072 sectors, wp 15728640
Zone 00121: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15859712, 131072 sectors, wp 15859712
Zone 00122: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 15990784, 131072 sectors, wp 15990784
Zone 00123: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 16121856, 131072 sectors, wp 16121856
Zone 00124: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 16252928, 131072 sectors, wp 16252928
Zone 00125: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 16384000, 131072 sectors, wp 16384000
Zone 00126: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 16515072, 131072 sectors, wp 16515072
Zone 00127: type 0x2 (Sequential-write-required), cond 0x1 (Empty), reset recommended 0, non_seq 0, sector 16646144, 131072 sectors, wp 16646144

Thanks,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.