Add support for zoned block devices
authorBart Van Assche <bart.vanassche@wdc.com>
Fri, 24 Aug 2018 18:31:27 +0000 (11:31 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 24 Aug 2018 18:54:36 +0000 (12:54 -0600)
commitbfbdd35b3e8f7de1bf1f48e7087c04a6b37e9c61
tree60f60a55b46990c3d6167fa93f897c6e2614b43d
parentbd6b959a034cdcfcef010e56b139c609f56b83cf
Add support for zoned block devices

This patch adds support for zoned block devices as follows:
- After the file size has been determined, check whether the file name
  refers to a block device. If so, check whether that block device is a
  host-managed block device. If that is the case, read the zone
  information using the BLKREPORTZONE ioctl. That ioctl is supported by
  the Linux kernel since kernel version v4.10.
- After all command-line options have been processed and all job files
  have been read, verify whether these refer to a zoned block device
  and also whether the specified options are compatible with a zoned
  block device. Complain if that is not the case.
- After each get_next_block() call, verify whether the block is
  appropriate for a zoned block device. When writing data to a
  sequential zone, adjust the write offset to the zone write pointer.
  When reading from a sequential zone, avoid reading past the write
  pointer.
- After I/O submission, update the variable that represents the write
  pointer.
- When writing data and with data verification enabled, reset a zone
  before writing any data into a zone. Otherwise reset a zone before
  issuing a write if that zone is full.
- Translate trim into zone resets. Zoned block devices namely do not
  have to support any of the SCSI commands that are used by the kernel
  to implement the discard ioctl (UNMAP / WRITE SAME).

This work started from a patch from Masato Suzuki <masato.suzuki@wdc.com>.
Some of the ideas in this patch come from Phillip Chen
<phillip.a.chen@seagate.com>.

Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
12 files changed:
HOWTO
Makefile
file.h
filesetup.c
fio.1
init.c
io_u.c
ioengines.c
options.c
thread_options.h
zbd.c [new file with mode: 0644]
zbd.h [new file with mode: 0644]