Hi Jens,
On 10/15/2018 11:38 AM, Jens Axboe wrote:
> Weird, it looks like we're waiting for something to complete, and then
> we have a few others waiting for queue new IO.
>
> Can you try and move the blk_mq_end_request() inside the priv->lock
> section and see if that helps?
With the change below to your V2 I can't get it to have an
error. I did mkfs.ext4, some big file downloads, and ran
'fsck.ext3 -c' for a while.
Thanks for working late on it.
-Geoff
--- a/drivers/block/ps3disk.c
+++ b/drivers/block/ps3disk.c
@@ -274,10 +274,9 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data)
ps3disk_scatter_gather(dev, req, 0);
}
- blk_mq_end_request(req, error);
-
spin_lock(&priv->lock);
priv->req = NULL;
+ blk_mq_end_request(req, error);
spin_unlock(&priv->lock);
blk_mq_run_hw_queues(priv->queue, true);
@@ -458,7 +457,7 @@ static int ps3disk_probe(struct ps3_system_bus_device *_dev)
set = &priv->tag_set;
set->ops = &ps3disk_mq_ops;
set->nr_hw_queues = 1;
- set->queue_depth = 2;
+ set->queue_depth = 1;
set->numa_node = NUMA_NO_NODE;
set->flags = BLK_MQ_F_SHOULD_MERGE;
error = blk_mq_alloc_tag_set(set);