• Chaitanya Kulkarni's avatar
    nvmet: don't use BLK_MQ_REQ_NOWAIT for passthru · 150dfb6c
    Chaitanya Kulkarni authored
    By default, we set the passthru request allocation flag such that it
    returns the error in the following code path and we fail the I/O when
    BLK_MQ_REQ_NOWAIT is used for request allocation :-
    
    nvme_alloc_request()
     blk_mq_alloc_request()
      blk_mq_queue_enter()
       if (flag & BLK_MQ_REQ_NOWAIT)
            return -EBUSY; <-- return if busy.
    
    On some controllers using BLK_MQ_REQ_NOWAIT ends up in I/O error where
    the controller is perfectly healthy and not in a degraded state.
    
    Block layer request allocation does allow us to wait instead of
    immediately returning the error when we BLK_MQ_REQ_NOWAIT flag is not
    used. This has shown to fix the I/O error problem reported under
    heavy random write workload.
    
    Remove the BLK_MQ_REQ_NOWAIT parameter for passthru request allocation
    which resolves this issue.
    Signed-off-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    150dfb6c
passthru.c 15.1 KB