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);