• D
    mq-deadline: Make sure to always unlock zones · f3bc78d2
    Damien Le Moal 提交于
    In case of a failed write request (all retries failed) and when using
    libata, the SCSI error handler calls scsi_finish_command(). In the
    case of blk-mq this means that scsi_mq_done() does not get called,
    that blk_mq_complete_request() does not get called and also that the
    mq-deadline .completed_request() method is not called. This results in
    the target zone of the failed write request being left in a locked
    state, preventing that any new write requests are issued to the same
    zone.
    
    Fix this by replacing the .completed_request() method with the
    .finish_request() method as this method is always called whether or
    not a request completes successfully. Since the .finish_request()
    method is only called by the blk-mq core if a .prepare_request()
    method exists, add a dummy .prepare_request() method.
    
    Fixes: 5700f691 ("mq-deadline: Introduce zone locking support")
    Cc: Hannes Reinecke <hare@suse.com>
    Reviewed-by: NMing Lei <ming.lei@redhat.com>
    Signed-off-by: NDamien Le Moal <damien.lemoal@wdc.com>
    [ bvanassche: edited patch description ]
    Signed-off-by: NBart Van Assche <bart.vanassche@wdc.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    f3bc78d2
mq-deadline.c 20.1 KB