• Bart Van Assche's avatar
    blk-mq: Avoid that requeueing starts stopped queues · 52d7f1b5
    Bart Van Assche authored
    Since blk_mq_requeue_work() starts stopped queues and since
    execution of this function can be scheduled after a queue has
    been stopped it is not possible to stop queues without using
    an additional state variable to track whether or not the queue
    has been stopped. Hence modify blk_mq_requeue_work() such that it
    does not start stopped queues. My conclusion after a review of
    the blk_mq_stop_hw_queues() and blk_mq_{delay_,}kick_requeue_list()
    callers is as follows:
    * In the dm driver starting and stopping queues should only happen
      if __dm_suspend() or __dm_resume() is called and not if the
      requeue list is processed.
    * In the SCSI core queue stopping and starting should only be
      performed by the scsi_internal_device_block() and
      scsi_internal_device_unblock() functions but not by any other
      function. Although the blk_mq_stop_hw_queue() call in
      scsi_queue_rq() may help to reduce CPU load if a LLD queue is
      full, figuring out whether or not a queue should be restarted
      when requeueing a command would require to introduce additional
      locking in scsi_mq_requeue_cmd() to avoid a race with
      scsi_internal_device_block(). Avoid this complexity by removing
      the blk_mq_stop_hw_queue() call from scsi_queue_rq().
    * In the NVMe core only the functions that call
      blk_mq_start_stopped_hw_queues() explicitly should start stopped
      queues.
    * A blk_mq_start_stopped_hwqueues() call must be added in the
      xen-blkfront driver in its blkif_recover() function.
    Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Roger Pau Monné <roger.pau@citrix.com>
    Cc: Mike Snitzer <snitzer@redhat.com>
    Cc: James Bottomley <jejb@linux.vnet.ibm.com>
    Cc: Martin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    52d7f1b5
blk-mq.c 56.4 KB