diff options
author | Ming Lei <ming.lei@redhat.com> | 2017-04-15 08:38:23 -0400 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-04-19 16:15:45 -0400 |
commit | 4981d04dd8f1ab19e2cce008da556d7f099b6e68 (patch) | |
tree | 79b9fd949a54ae4ed3247dddf4d9b2b83076dc6e /drivers | |
parent | 3a5088c8c11ac9d56f7e90acaaae9e0e98c1ff94 (diff) |
mtip32xx: pass BLK_MQ_F_NO_SCHED
The recent introduced MQ IO scheduler breaks mtip32xx in the
following way.
mtip32xx use the 'request_index' passed to .init_request() as
hardware tag index for initializing hardware queue, and it
actually require that rq->tag is always same with 'request_index'
passed to .init_request(). Current blk-mq IO scheduler can't
guarantee this point, so this patch passes BLK_MQ_F_NO_SCHED
and at least make mtip32xx working.
This patch fixes the following strange hardware failure. The
issue can be triggered easily when doing I/O with mq-deadline
enabled.
[ 186.972578] {1}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 32993
[ 186.972578] {1}[Hardware Error]: event severity: fatal
[ 186.972579] {1}[Hardware Error]: Error 0, type: fatal
[ 186.972580] {1}[Hardware Error]: section_type: PCIe error
[ 186.972580] {1}[Hardware Error]: port_type: 0, PCIe end point
[ 186.972581] {1}[Hardware Error]: version: 1.0
[ 186.972581] {1}[Hardware Error]: command: 0x0407, status: 0x0010
[ 186.972582] {1}[Hardware Error]: device_id: 0000:07:00.0
[ 186.972582] {1}[Hardware Error]: slot: 4
[ 186.972583] {1}[Hardware Error]: secondary_bus: 0x00
[ 186.972583] {1}[Hardware Error]: vendor_id: 0x1344, device_id: 0x5150
[ 186.972584] {1}[Hardware Error]: class_code: 008001
[ 186.972585] Kernel panic - not syncing: Fatal hardware error!
Reported-by: Jozef Mikovic <jmikovic@redhat.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/block/mtip32xx/mtip32xx.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c index f96ab717534c..1d1dc11aa5fa 100644 --- a/drivers/block/mtip32xx/mtip32xx.c +++ b/drivers/block/mtip32xx/mtip32xx.c | |||
@@ -3969,7 +3969,7 @@ static int mtip_block_initialize(struct driver_data *dd) | |||
3969 | dd->tags.reserved_tags = 1; | 3969 | dd->tags.reserved_tags = 1; |
3970 | dd->tags.cmd_size = sizeof(struct mtip_cmd); | 3970 | dd->tags.cmd_size = sizeof(struct mtip_cmd); |
3971 | dd->tags.numa_node = dd->numa_node; | 3971 | dd->tags.numa_node = dd->numa_node; |
3972 | dd->tags.flags = BLK_MQ_F_SHOULD_MERGE; | 3972 | dd->tags.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_NO_SCHED; |
3973 | dd->tags.driver_data = dd; | 3973 | dd->tags.driver_data = dd; |
3974 | dd->tags.timeout = MTIP_NCQ_CMD_TIMEOUT_MS; | 3974 | dd->tags.timeout = MTIP_NCQ_CMD_TIMEOUT_MS; |
3975 | 3975 | ||