Omar Sandoval
da55f2cc78
blk-mq: use sbq wait queues instead of restart for driver tags
...
Commit 50e1dab86a ("blk-mq-sched: fix starvation for multiple hardware
queues and shared tags") fixed one starvation issue for shared tags.
However, we can still get into a situation where we fail to allocate a
tag because all tags are allocated but we don't have any pending
requests on any hardware queue.
One solution for this would be to restart all queues that share a tag
map, but that really sucks. Ideally, we could just block and wait for a
tag, but that isn't always possible from blk_mq_dispatch_rq_list().
However, we can still use the struct sbitmap_queue wait queues with a
custom callback instead of blocking. This has a few benefits:
1. It avoids iterating over all hardware queues when completing an I/O,
which the current restart code has to do.
2. It benefits from the existing rolling wakeup code.
3. It avoids punting to another thread just to have it block.
Signed-off-by: Omar Sandoval <osandov@fb.com >
Signed-off-by: Jens Axboe <axboe@fb.com >
2017-02-23 11:55:46 -07:00
..
2017-02-08 11:19:43 -08:00
2017-01-29 18:30:56 -05:00
2017-01-19 09:57:20 +01:00
2016-12-31 14:35:04 +00:00
2017-02-08 13:54:11 +00:00
2017-02-20 10:00:10 -08:00
2016-12-29 14:17:40 -05:00
2016-12-28 14:36:52 -05:00
2017-02-10 10:16:34 -08:00
2017-02-20 17:26:11 -08:00
2017-01-12 02:30:13 +01:00
2017-02-01 11:01:30 +01:00
2017-02-20 13:23:30 -08:00
2017-02-20 17:55:15 -08:00
2017-02-02 08:20:50 -07:00
2017-02-02 08:21:32 -07:00
2017-01-31 14:00:44 -07:00
2017-02-23 11:55:46 -07:00
2017-02-17 14:06:45 -07:00
2017-02-02 10:20:16 -07:00
2017-02-12 21:52:19 -05:00
2017-01-18 17:12:26 -05:00
2017-01-27 15:08:35 -07:00
2017-02-08 15:41:43 -08:00
2017-02-14 08:29:56 -07:00
2017-02-07 20:58:30 +01:00
2017-01-14 11:29:43 +01:00
2017-02-01 09:13:51 +01:00
2017-01-14 19:32:40 -05:00
2017-02-04 00:47:59 +01:00
2017-02-01 08:37:27 +01:00
2017-02-20 10:06:32 -08:00
2017-02-01 09:14:07 +01:00
2017-02-02 11:52:14 -05:00
2016-12-26 20:29:24 -08:00
2017-02-02 10:20:16 -07:00
2017-01-20 14:32:39 -08:00
2017-02-07 10:57:47 +01:00
2017-01-31 15:46:49 +09:00
2017-01-27 15:08:35 -07:00
2017-02-06 13:14:10 +01:00
2017-01-19 15:56:19 +00:00
2017-01-06 15:56:18 +01:00
2017-02-01 08:45:46 +01:00
2017-02-07 10:42:10 +01:00
2017-02-10 09:09:59 -07:00
2017-02-03 08:28:25 -08:00
2017-01-16 14:03:31 -05:00
2017-02-02 08:20:53 -07:00
2017-01-31 13:23:09 -05:00
2017-02-06 23:26:43 -05:00
2017-02-06 23:26:43 -05:00
2017-02-06 23:26:43 -05:00
2017-02-06 08:54:01 +01:00
2017-01-05 23:06:06 -08:00
2017-02-02 08:23:19 -07:00
2017-01-10 18:31:55 -08:00
2017-02-10 11:15:08 +01:00
2017-01-31 10:59:48 +01:00
2017-02-08 13:34:41 +01:00
2017-01-31 14:00:44 -07:00
2017-01-27 13:05:26 -08:00
2017-02-10 15:13:10 +01:00
2017-02-10 15:13:10 +01:00
2017-02-20 10:52:23 -08:00
2017-01-23 15:00:45 +00:00
2017-02-01 09:13:45 +01:00
2017-01-12 14:33:16 +01:00
2017-01-19 08:40:44 +01:00
2017-02-01 09:13:58 +01:00
2017-01-17 10:56:45 -08:00
2017-01-14 08:38:05 +01:00
2017-02-10 09:04:19 +01:00
2016-12-25 17:21:23 +01:00
2017-01-29 19:59:42 +01:00
2017-01-31 08:32:13 -07:00
2017-01-23 11:37:13 -08:00
2017-02-03 09:56:43 -08:00
2017-01-14 11:31:50 +01:00
2017-01-04 13:22:38 -07:00
2017-01-10 18:31:55 -08:00
2017-02-03 14:13:19 -08:00
2017-01-27 11:10:50 -05:00
2017-01-10 18:31:55 -08:00
2017-01-10 18:31:54 -08:00
2017-01-24 16:26:14 -08:00
2017-02-03 08:28:25 -08:00
2017-02-16 15:32:19 +01:00
2017-02-20 13:23:30 -08:00
2017-02-08 13:56:37 -05:00
2017-01-24 12:50:47 -05:00
2017-01-24 16:26:14 -08:00
2017-02-22 13:34:00 -07:00
2017-02-22 13:34:00 -07:00
2017-02-10 14:54:37 +01:00
2016-12-29 11:03:15 -08:00
2016-12-25 11:54:48 -08:00
2017-01-28 07:49:42 -05:00
2017-01-14 11:14:35 +01:00
2017-02-10 09:08:09 +01:00
2017-01-25 14:40:19 -05:00
2017-01-25 14:40:19 -05:00
2017-02-09 14:29:27 +01:00
2017-02-09 22:52:17 +01:00
2017-01-27 11:26:58 +01:00
2017-01-14 11:14:53 +01:00
2017-02-01 09:13:55 +01:00
2017-02-07 13:21:15 +01:00
2017-01-04 18:36:41 +00:00
2017-01-07 18:22:40 -08:00
2017-01-25 12:54:22 -08:00
2017-01-23 11:44:18 -08:00
2017-02-01 09:17:51 +01:00
2017-02-10 09:04:19 +01:00
2017-02-03 12:34:59 +01:00
2016-12-30 03:26:31 -08:00
2017-02-15 22:29:51 -05:00
2017-01-27 08:17:44 -07:00
2017-02-20 13:23:30 -08:00
2017-02-23 11:55:41 -07:00
2017-01-10 18:31:55 -08:00
2017-01-10 18:31:54 -08:00
2017-01-12 09:33:39 +01:00
2017-01-12 09:33:39 +01:00
2017-01-12 09:33:39 +01:00
2017-01-25 12:53:20 -08:00
2017-01-20 03:33:57 +01:00
2017-01-10 18:31:55 -08:00
2017-01-06 13:00:01 -05:00
2017-01-13 12:31:24 -05:00
2017-02-10 11:15:08 +01:00
2017-01-10 18:31:55 -08:00
2017-01-20 11:01:17 -05:00
2017-01-14 09:54:13 +01:00
2016-12-25 11:54:48 -08:00
2017-01-14 12:11:59 +01:00