29 Sep, 2020

1 commit

  • Add support for user space to set a max open zone and a max active zone
    limit via configfs. By default, the default values are 0 == no limit.

    Call the block layer API functions used for exposing the configured
    limits to sysfs.

    Add accounting in null_blk_zoned so that these new limits are respected.
    Performing an operation that would exceed these limits results in a
    standard I/O error.

    A max open zone limit exists in the ZBC standard.
    While null_blk_zoned is used to test the Zoned Block Device model in
    Linux, when it comes to differences between ZBC and ZNS, null_blk_zoned
    mostly follows ZBC.

    Therefore, implement the manage open zone resources function from ZBC,
    but additionally add support for max active zones.
    This enables user space not only to test against a device with an open
    zone limit, but also to test against a device with an active zone limit.

    Signed-off-by: Niklas Cassel
    Reviewed-by: Damien Le Moal
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: Jens Axboe

    Niklas Cassel
     

25 Sep, 2020

1 commit

  • Support a shared tag bitmap, whereby request tags are unique over all
    submission queues, and not just per submission queue.

    As such, per device total queue depth is normally hw_queue_depth *
    submit_queues, but hw_queue_depth when set. And a similar story for when
    shared_tags is set, where that is the queue depth over all null blk
    devices.

    Signed-off-by: John Garry
    Tested-by: Douglas Gilbert
    Signed-off-by: Jens Axboe

    John Garry
     

22 Aug, 2020

1 commit


08 Jul, 2020

1 commit

  • Allow emulation of a zoned device with a per zone capacity smaller than
    the zone size as as defined in the Zoned Namespace (ZNS) Command Set
    specification. The zone capacity defaults to the zone size if not
    specified and must be smaller than the zone size otherwise.

    Reviewed-by: Matias Bjørling
    Reviewed-by: Chaitanya Kulkarni
    Reviewed-by: Himanshu Madhani
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Johannes Thumshirn
    Reviewed-by: Daniel Wagner
    Signed-off-by: Aravind Ramesh
    Signed-off-by: Christoph Hellwig

    Aravind Ramesh
     

01 Jul, 2020

2 commits


24 Jun, 2020

1 commit

  • Move the call to blk_should_fake_timeout out of blk_mq_complete_request
    and into the drivers, skipping call sites that are obvious error
    handlers, and remove the now superflous blk_mq_force_complete_rq helper.
    This ensures we don't keep injecting errors into completions that just
    terminate the Linux request after the hardware has been reset or the
    command has been aborted.

    Reviewed-by: Daniel Wagner
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

03 Jun, 2020

1 commit

  • Pull block updates from Jens Axboe:
    "Core block changes that have been queued up for this release:

    - Remove dead blk-throttle and blk-wbt code (Guoqing)

    - Include pid in blktrace note traces (Jan)

    - Don't spew I/O errors on wouldblock termination (me)

    - Zone append addition (Johannes, Keith, Damien)

    - IO accounting improvements (Konstantin, Christoph)

    - blk-mq hardware map update improvements (Ming)

    - Scheduler dispatch improvement (Salman)

    - Inline block encryption support (Satya)

    - Request map fixes and improvements (Weiping)

    - blk-iocost tweaks (Tejun)

    - Fix for timeout failing with error injection (Keith)

    - Queue re-run fixes (Douglas)

    - CPU hotplug improvements (Christoph)

    - Queue entry/exit improvements (Christoph)

    - Move DMA drain handling to the few drivers that use it (Christoph)

    - Partition handling cleanups (Christoph)"

    * tag 'for-5.8/block-2020-06-01' of git://git.kernel.dk/linux-block: (127 commits)
    block: mark bio_wouldblock_error() bio with BIO_QUIET
    blk-wbt: rename __wbt_update_limits to wbt_update_limits
    blk-wbt: remove wbt_update_limits
    blk-throttle: remove tg_drain_bios
    blk-throttle: remove blk_throtl_drain
    null_blk: force complete for timeout request
    blk-mq: drain I/O when all CPUs in a hctx are offline
    blk-mq: add blk_mq_all_tag_iter
    blk-mq: open code __blk_mq_alloc_request in blk_mq_alloc_request_hctx
    blk-mq: use BLK_MQ_NO_TAG in more places
    blk-mq: rename BLK_MQ_TAG_FAIL to BLK_MQ_NO_TAG
    blk-mq: move more request initialization to blk_mq_rq_ctx_init
    blk-mq: simplify the blk_mq_get_request calling convention
    blk-mq: remove the bio argument to ->prepare_request
    nvme: force complete cancelled requests
    blk-mq: blk-mq: provide forced completion method
    block: fix a warning when blkdev.h is included for !CONFIG_BLOCK builds
    block: blk-crypto-fallback: remove redundant initialization of variable err
    block: reduce part_stat_lock() scope
    block: use __this_cpu_add() instead of access by smp_processor_id()
    ...

    Linus Torvalds
     

30 May, 2020

1 commit

  • The commit 7b11eab041da ("blk-mq: blk-mq: provide forced completion
    method") exports new API to force a request to complete without error
    injection.

    There should be no error injection when completing a request by timeout
    handler.

    Otherwise, the below would hang because timeout handler is failed.

    echo 100 > /sys/kernel/debug/fail_io_timeout/probability
    echo 1000 > /sys/kernel/debug/fail_io_timeout/times
    echo 1 > /sys/block/nullb0/io-timeout-fail
    dd if=/dev/zero of=/dev/nullb0 bs=512 count=1 oflag=direct

    With this patch, the timeout handler is able to complete the IO.

    Signed-off-by: Dongli Zhang
    Signed-off-by: Jens Axboe

    Dongli Zhang
     

21 May, 2020

1 commit

  • Zoned block device specification do not define the behavior of
    discard/trim command as this command is generally replaced by the reset
    write pointer (zone reset) command. Emulate this in null_blk by making
    zoned and discard options mutually exclusive.

    Suggested-by: Damien Le Moal
    Signed-off-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Chaitanya Kulkarni
     

19 May, 2020

1 commit

  • This patch suppresses an uninteresting KMSAN complaint without affecting
    performance of the null_blk driver if CONFIG_KMSAN is disabled.

    Reported-by: Alexander Potapenko
    Signed-off-by: Bart Van Assche
    Tested-by: Alexander Potapenko
    Cc: Christoph Hellwig
    Cc: Ming Lei
    Cc: Damien Le Moal
    Cc: Chaitanya Kulkarni
    Cc: Alexander Potapenko
    Signed-off-by: Jens Axboe

    Bart Van Assche
     

23 Apr, 2020

2 commits

  • Move all zoned mode related code from null_blk_main.c to
    null_blk_zoned.c, avoiding an ugly #ifdef in the process.
    Rename null_zone_init() into null_init_zoned_dev(), null_zone_exit()
    into null_free_zoned_dev() and add the new function
    null_register_zoned_dev() to finalize the zoned dev setup before
    add_disk().

    Signed-off-by: Damien Le Moal
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: Jens Axboe

    Damien Le Moal
     
  • For write operations issued to a null_blk device with zoned mode
    enabled, the state and write pointer position of the zone targeted by
    the command should be checked before badblocks and memory backing
    are handled as the write may be first failed due to, for instance, a
    sector position not aligned with the zone write pointer. This order of
    checking for errors reflects more accuratly the behavior of physical
    zoned devices.

    Furthermore, the write pointer position of the target zone should be
    incremented only and only if no errors are reported by badblocks and
    memory backing handling.

    To fix this, introduce the small helper function null_process_cmd()
    which execute null_handle_badblocks() and null_handle_memory_backed()
    and use this function in null_zone_write() to correctly handle write
    requests to zoned null devices depending on the type and state of the
    write target zone. Also call this function in null_handle_zoned() to
    process read requests to zoned null devices.

    null_process_cmd() is called directly from null_handle_cmd() for
    regular null devices, resulting in no functional change for these type
    of devices. To have symmetric names, the function null_handle_zoned()
    is renamed to null_process_zoned_cmd().

    Signed-off-by: Damien Le Moal
    Reviewed-by: Chaitanya Kulkarni
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Damien Le Moal
     

31 Mar, 2020

1 commit

  • Pull block driver updates from Jens Axboe:

    - floppy driver cleanup series from Willy

    - NVMe updates and fixes (Various)

    - null_blk trace improvements (Chaitanya)

    - bcache fixes (Coly)

    - md fixes (via Song)

    - loop block size change optimizations (Martijn)

    - scnprintf() use (Takashi)

    * tag 'for-5.7/drivers-2020-03-29' of git://git.kernel.dk/linux-block: (81 commits)
    null_blk: add trace in null_blk_zoned.c
    null_blk: add tracepoint helpers for zoned mode
    block: add a zone condition debug helper
    nvme: cleanup namespace identifier reporting in nvme_init_ns_head
    nvme: rename __nvme_find_ns_head to nvme_find_ns_head
    nvme: refactor nvme_identify_ns_descs error handling
    nvme-tcp: Add warning on state change failure at nvme_tcp_setup_ctrl
    nvme-rdma: Add warning on state change failure at nvme_rdma_setup_ctrl
    nvme: Fix controller creation races with teardown flow
    nvme: Make nvme_uninit_ctrl symmetric to nvme_init_ctrl
    nvme: Fix ctrl use-after-free during sysfs deletion
    nvme-pci: Re-order nvme_pci_free_ctrl
    nvme: Remove unused return code from nvme_delete_ctrl_sync
    nvme: Use nvme_state_terminal helper
    nvme: release ida resources
    nvme: Add compat_ioctl handler for NVME_IOCTL_SUBMIT_IO
    nvmet-tcp: optimize tcp stack TX when data digest is used
    nvme-fabrics: Use scnprintf() for avoiding potential buffer overflow
    nvme-multipath: do not reset on unknown status
    nvmet-rdma: allocate RW ctxs according to mdts
    ...

    Linus Torvalds
     

28 Mar, 2020

2 commits

  • Current make_request based drivers use either blk_alloc_queue_node or
    blk_alloc_queue to allocate a queue, and then set up the make_request_fn
    function pointer and a few parameters using the blk_queue_make_request
    helper. Simplify this by passing the make_request pointer to
    blk_alloc_queue, and while at it merge the _node variant into the main
    helper by always passing a node_id, and remove the superfluous gfp_mask
    parameter. A lower-level __blk_alloc_queue is kept for the blk-mq case.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Use the new blk_mq_init_queue_data instead of open coding the queue
    allocation and initialization.

    Reviewed-by: Johannes Thumshirn
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

13 Mar, 2020

1 commit

  • As null_blk is a very good start point to test block layer, this patch
    adds description and comments to 'timeout', 'requeue' and 'init_hctx' to
    explain how to use fault injection with null_blk.

    The nvme has similar with nvme_core.fail_request in the form of comment.

    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Dongli Zhang
    Signed-off-by: Jens Axboe

    Dongli Zhang
     

12 Mar, 2020

1 commit

  • Steps to reproduce:

    BLKRESETZONE zone 0

    // force EIO
    pwrite(fd, buf, 4096, 4096);

    [issue more IO including zone ioctls]

    It will start failing randomly including IO to unrelated zones because of
    ->error "reuse". Trigger can be partition detection as well if test is not
    run immediately which is even more entertaining.

    The fix is of course to clear ->error where necessary.

    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alexey Dobriyan (SK hynix)
    Signed-off-by: Jens Axboe

    Alexey Dobriyan
     

10 Mar, 2020

5 commits

  • This makes it possible to test the error path in blk_mq_realloc_hw_ctxs()
    and also several error paths in null_blk.

    Signed-off-by: Bart Van Assche
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • If null_add_dev() fails then null_del_dev() is called with a NULL argument.
    Make null_del_dev() handle this scenario correctly. This patch fixes the
    following KASAN complaint:

    null-ptr-deref in null_del_dev+0x28/0x280 [null_blk]
    Read of size 8 at addr 0000000000000000 by task find/1062

    Call Trace:
    dump_stack+0xa5/0xe6
    __kasan_report.cold+0x65/0x99
    kasan_report+0x16/0x20
    __asan_load8+0x58/0x90
    null_del_dev+0x28/0x280 [null_blk]
    nullb_group_drop_item+0x7e/0xa0 [null_blk]
    client_drop_item+0x53/0x80 [configfs]
    configfs_rmdir+0x395/0x4e0 [configfs]
    vfs_rmdir+0xb6/0x220
    do_rmdir+0x238/0x2c0
    __x64_sys_unlinkat+0x75/0x90
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Signed-off-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • If null_add_dev() fails, clear dev->nullb.

    This patch fixes the following KASAN complaint:

    BUG: KASAN: use-after-free in nullb_device_submit_queues_store+0xcf/0x160 [null_blk]
    Read of size 8 at addr ffff88803280fc30 by task check/8409

    Call Trace:
    dump_stack+0xa5/0xe6
    print_address_description.constprop.0+0x26/0x260
    __kasan_report.cold+0x7b/0x99
    kasan_report+0x16/0x20
    __asan_load8+0x58/0x90
    nullb_device_submit_queues_store+0xcf/0x160 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x7ff370926317
    Code: 64 89 02 48 c7 c0 ff ff ff ff eb bb 0f 1f 80 00 00 00 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 01 00 00 00 0f 05 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 48 89 54 24 18 48 89 74 24
    RSP: 002b:00007fff2dd2da48 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007ff370926317
    RDX: 0000000000000002 RSI: 0000559437ef23f0 RDI: 0000000000000001
    RBP: 0000559437ef23f0 R08: 000000000000000a R09: 0000000000000001
    R10: 0000559436703471 R11: 0000000000000246 R12: 0000000000000002
    R13: 00007ff370a006a0 R14: 00007ff370a014a0 R15: 00007ff370a008a0

    Allocated by task 8409:
    save_stack+0x23/0x90
    __kasan_kmalloc.constprop.0+0xcf/0xe0
    kasan_kmalloc+0xd/0x10
    kmem_cache_alloc_node_trace+0x129/0x4c0
    null_add_dev+0x24a/0xe90 [null_blk]
    nullb_device_power_store+0x1b6/0x270 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Freed by task 8409:
    save_stack+0x23/0x90
    __kasan_slab_free+0x112/0x160
    kasan_slab_free+0x12/0x20
    kfree+0xdf/0x250
    null_add_dev+0xaf3/0xe90 [null_blk]
    nullb_device_power_store+0x1b6/0x270 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Fixes: 2984c8684f96 ("nullb: factor disk parameters")
    Signed-off-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • Instead of initializing null_blk hardware queues explicitly after the
    request queue has been created, provide .init_hctx() and .exit_hctx()
    callback functions. The latter functions are not only called during
    request queue allocation but also when the number of hardware queues
    changes. Allocate nr_cpu_ids queues during initialization to support
    increasing the number of hardware queues above the initial hardware
    queue count.

    This change fixes increasing the number of hardware queues above the
    initial number of hardware queues and also keeps nullb->nr_queues in
    sync with the number of hardware queues.

    Fixes: 45919fbfe1c4 ("null_blk: Enable modifying 'submit_queues' after an instance has been configured")
    Signed-off-by: Bart Van Assche
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • Although it is not clear to me why UBSAN complains when 'memory_backed'
    is set, this patch suppresses the UBSAN complaint that is triggered when
    setting that configfs attribute.

    UBSAN: Undefined behaviour in drivers/block/null_blk_main.c:327:1
    load of value 16 is not a valid value for type '_Bool'
    CPU: 2 PID: 8396 Comm: check Not tainted 5.6.0-rc1-dbg+ #14
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    Call Trace:
    dump_stack+0xa5/0xe6
    ubsan_epilogue+0x9/0x26
    __ubsan_handle_load_invalid_value+0x6d/0x76
    nullb_device_memory_backed_store.cold+0x2c/0x38 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Signed-off-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     

26 Feb, 2020

1 commit

  • 'list', 'll_list' and 'csd' are no longer used.

    The 'list' is not used since it was introduced by commit f2298c0403b0
    ("null_blk: multi queue aware block test driver").

    The 'll_list' is no longer used since commit 3c395a969acc ("null_blk: set a
    separate timer for each command").

    The 'csd' is no longer used since commit ce2c350b2cfe ("null_blk: use
    blk_complete_request and blk_mq_complete_request").

    Reviewed-by: Bart Van Assche
    Signed-off-by: Dongli Zhang
    Signed-off-by: Jens Axboe

    Dongli Zhang
     

04 Feb, 2020

2 commits

  • With gcc-7.2, many instances of

    drivers/block/null_blk_main.c: In function ‘nullb_device_zone_nr_conv_store’:
    drivers/block/null_blk_main.c:291:12: warning: ‘new_value’ may be used uninitialized in this function [-Wmaybe-uninitialized]
    dev->NAME = new_value; \
    ^
    drivers/block/null_blk_main.c:279:7: note: ‘new_value’ was declared here
    TYPE new_value; \
    ^

    Presumably notabug, so use uninitialized_var() to suppress them.

    Cc: Shaohua Li
    Cc: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Each line here overflows 80 cols by exactly one character. Delete one tab
    per line to fix.

    Cc: Shaohua Li
    Cc: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

05 Dec, 2019

1 commit


04 Dec, 2019

1 commit

  • The current zone revalidation code has a major problem in that it
    doesn't update the zone size and q->nr_zones atomically, leading
    to a short window where an out of bounds access to the zone arrays
    is possible.

    To fix this move the setting of the zone size into the crticial
    sections blk_revalidate_disk_zones so that it gets updated together
    with the zone bitmaps and q->nr_zones. This also slightly simplifies
    the caller as it deducts the zone size from the report_zones.

    This change also allows to check for a power of two zone size in generic
    code.

    Reported-by: Hans Holmberg
    Reviewed-by: Javier González
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

03 Dec, 2019

3 commits


13 Nov, 2019

3 commits

  • For a null_blk device with zoned mode enabled, the number of
    conventional zones can be configured through configfs with the
    zone_nr_conv parameter. Add this missing parameter in the features
    string.

    Signed-off-by: Damien Le Moal
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Damien Le Moal
     
  • Make the instance name match the method name and define the name to NULL
    instead of providing an inline stub, which is rather pointless for a
    method call.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Damien Le Moal
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     
  • Remove the pointless stub open and release methods, give the operations
    vector a slightly less confusing name, and use normal alignment for the
    assignment operators.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Damien Le Moal
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

18 Oct, 2019

1 commit

  • A zoned block device maintains a write pointer within a zone, and reads
    beyond the write pointer are undefined. Fill data buffer returned above
    the write pointer with 0xFF.

    Signed-off-by: Ajay Joshi
    Reviewed-by: Damien Le Moal
    Reviewed-by: Matias Bjørling
    Signed-off-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Ajay Joshi
     

07 Oct, 2019

2 commits


16 Sep, 2019

3 commits

  • Instead of writing "null_blk: " at the beginning of each
    pr_err/info/warn log message, format messages using pr_fmt() macro.

    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: André Almeida
    Signed-off-by: Jens Axboe

    André Almeida
     
  • Since the variable nr_devices is an unsigned int, the module_param()
    should also use this type. Change the type so they can match.

    Fixes: f7c4ce890dd2 ("null_blk: validate the number of devices")
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: André Almeida
    Signed-off-by: Jens Axboe

    André Almeida
     
  • The module load should fail only if there is something wrong with the
    configuration or if an error prevents it to work properly. The module
    should be able to be loaded with (nr_device == 0), since it will not
    trigger errors or be in malfunction state. Preventing loading with zero
    devices also breaks applications that configures this module using
    configfs API. Remove the nr_device check to fix this.

    Fixes: f7c4ce890dd2 ("null_blk: validate the number of devices")
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: André Almeida
    Signed-off-by: Jens Axboe

    André Almeida