1. 18 6月, 2021 1 次提交
  2. 12 6月, 2021 4 次提交
  3. 22 4月, 2021 1 次提交
  4. 05 3月, 2021 2 次提交
  5. 10 2月, 2021 1 次提交
  6. 25 1月, 2021 2 次提交
  7. 10 12月, 2020 2 次提交
  8. 08 12月, 2020 1 次提交
    • M
      blk-mq: add new API of blk_mq_hctx_set_fq_lock_class · fb01a293
      Ming Lei 提交于
      flush_end_io() may be called recursively from some driver, such as
      nvme-loop, so lockdep may complain 'possible recursive locking'.
      Commit b3c6a599("block: Fix a lockdep complaint triggered by
      request queue flushing") tried to address this issue by assigning
      dynamically allocated per-flush-queue lock class. This solution
      adds synchronize_rcu() for each hctx's release handler, and causes
      horrible SCSI MQ probe delay(more than half an hour on megaraid sas).
      
      Add new API of blk_mq_hctx_set_fq_lock_class() for these drivers, so
      we just need to use driver specific lock class for avoiding the
      lockdep warning of 'possible recursive locking'.
      Tested-by: NKashyap Desai <kashyap.desai@broadcom.com>
      Reported-by: NQian Cai <cai@redhat.com>
      Cc: Sumit Saxena <sumit.saxena@broadcom.com>
      Cc: John Garry <john.garry@huawei.com>
      Cc: Kashyap Desai <kashyap.desai@broadcom.com>
      Cc: Bart Van Assche <bvanassche@acm.org>
      Cc: Hannes Reinecke <hare@suse.de>
      Signed-off-by: NMing Lei <ming.lei@redhat.com>
      Reviewed-by: NHannes Reinecke <hare@suse.de>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      fb01a293
  9. 02 12月, 2020 1 次提交
  10. 29 10月, 2020 1 次提交
  11. 04 9月, 2020 4 次提交
  12. 02 9月, 2020 1 次提交
  13. 29 7月, 2020 1 次提交
  14. 01 7月, 2020 1 次提交
  15. 30 6月, 2020 1 次提交
  16. 29 6月, 2020 1 次提交
  17. 24 6月, 2020 2 次提交
  18. 30 5月, 2020 2 次提交
    • M
      blk-mq: drain I/O when all CPUs in a hctx are offline · bf0beec0
      Ming Lei 提交于
      Most of blk-mq drivers depend on managed IRQ's auto-affinity to setup
      up queue mapping. Thomas mentioned the following point[1]:
      
      "That was the constraint of managed interrupts from the very beginning:
      
       The driver/subsystem has to quiesce the interrupt line and the associated
       queue _before_ it gets shutdown in CPU unplug and not fiddle with it
       until it's restarted by the core when the CPU is plugged in again."
      
      However, current blk-mq implementation doesn't quiesce hw queue before
      the last CPU in the hctx is shutdown.  Even worse, CPUHP_BLK_MQ_DEAD is a
      cpuhp state handled after the CPU is down, so there isn't any chance to
      quiesce the hctx before shutting down the CPU.
      
      Add new CPUHP_AP_BLK_MQ_ONLINE state to stop allocating from blk-mq hctxs
      where the last CPU goes away, and wait for completion of in-flight
      requests.  This guarantees that there is no inflight I/O before shutting
      down the managed IRQ.
      
      Add a BLK_MQ_F_STACKING and set it for dm-rq and loop, so we don't need
      to wait for completion of in-flight requests from these drivers to avoid
      a potential dead-lock. It is safe to do this for stacking drivers as those
      do not use interrupts at all and their I/O completions are triggered by
      underlying devices I/O completion.
      
      [1] https://lore.kernel.org/linux-block/alpine.DEB.2.21.1904051331270.1802@nanos.tec.linutronix.de/
      
      [hch: different retry mechanism, merged two patches, minor cleanups]
      Signed-off-by: NMing Lei <ming.lei@redhat.com>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Reviewed-by: NHannes Reinecke <hare@suse.de>
      Reviewed-by: NDaniel Wagner <dwagner@suse.de>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      bf0beec0
    • K
      blk-mq: blk-mq: provide forced completion method · 7b11eab0
      Keith Busch 提交于
      Drivers may need to bypass error injection for error recovery. Rename
      __blk_mq_complete_request() to blk_mq_force_complete_rq() and export
      that function so drivers may skip potential fake timeouts after they've
      reclaimed lost requests.
      Signed-off-by: NKeith Busch <kbusch@kernel.org>
      Reviewed-by: NDaniel Wagner <dwagner@suse.de>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      7b11eab0
  19. 25 4月, 2020 1 次提交
  20. 21 4月, 2020 1 次提交
  21. 19 4月, 2020 1 次提交
    • G
      blk-mq: Replace zero-length array with flexible-array member · f36aaf8b
      Gustavo A. R. Silva 提交于
      The current codebase makes use of the zero-length array language
      extension to the C90 standard, but the preferred mechanism to declare
      variable-length types such as these ones is a flexible array member[1][2],
      introduced in C99:
      
      struct foo {
              int stuff;
              struct boo array[];
      };
      
      By making use of the mechanism above, we will get a compiler warning
      in case the flexible array does not occur last in the structure, which
      will help us prevent some kind of undefined behavior bugs from being
      inadvertently introduced[3] to the codebase from now on.
      
      Also, notice that, dynamic memory allocations won't be affected by
      this change:
      
      "Flexible array members have incomplete type, and so the sizeof operator
      may not be applied. As a quirk of the original implementation of
      zero-length arrays, sizeof evaluates to zero."[1]
      
      This issue was found with the help of Coccinelle.
      
      [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
      [2] https://github.com/KSPP/linux/issues/21
      [3] commit 76497732 ("cxgb3/l2t: Fix undefined behaviour")
      Signed-off-by: NGustavo A. R. Silva <gustavo@embeddedor.com>
      f36aaf8b
  22. 28 3月, 2020 1 次提交
  23. 10 3月, 2020 1 次提交
  24. 14 11月, 2019 1 次提交
  25. 01 11月, 2019 1 次提交
  26. 26 10月, 2019 1 次提交
  27. 07 10月, 2019 2 次提交
  28. 06 9月, 2019 1 次提交
    • D
      block: Delay default elevator initialization · 737eb78e
      Damien Le Moal 提交于
      When elevator_init_mq() is called from blk_mq_init_allocated_queue(),
      the only information known about the device is the number of hardware
      queues as the block device scan by the device driver is not completed
      yet for most drivers. The device type and elevator required features
      are not set yet, preventing to correctly select the default elevator
      most suitable for the device.
      
      This currently affects all multi-queue zoned block devices which default
      to the "none" elevator instead of the required "mq-deadline" elevator.
      These drives currently include host-managed SMR disks connected to a
      smartpqi HBA and null_blk block devices with zoned mode enabled.
      Upcoming NVMe Zoned Namespace devices will also be affected.
      
      Fix this by adding the boolean elevator_init argument to
      blk_mq_init_allocated_queue() to control the execution of
      elevator_init_mq(). Two cases exist:
      1) elevator_init = false is used for calls to
         blk_mq_init_allocated_queue() within blk_mq_init_queue(). In this
         case, a call to elevator_init_mq() is added to __device_add_disk(),
         resulting in the delayed initialization of the queue elevator
         after the device driver finished probing the device information. This
         effectively allows elevator_init_mq() access to more information
         about the device.
      2) elevator_init = true preserves the current behavior of initializing
         the elevator directly from blk_mq_init_allocated_queue(). This case
         is used for the special request based DM devices where the device
         gendisk is created before the queue initialization and device
         information (e.g. queue limits) is already known when the queue
         initialization is executed.
      
      Additionally, to make sure that the elevator initialization is never
      done while requests are in-flight (there should be none when the device
      driver calls device_add_disk()), freeze and quiesce the device request
      queue before calling blk_mq_init_sched() in elevator_init_mq().
      Reviewed-by: NMing Lei <ming.lei@redhat.com>
      Signed-off-by: NDamien Le Moal <damien.lemoal@wdc.com>
      Signed-off-by: NJens Axboe <axboe@kernel.dk>
      737eb78e