In my machine, there are 32 queues(32 cpu cores), each queue has 1013
tags, so there can be 32*1013 requests coming from block layer, meantime
smartpqi can only handles 1013 requests. I guess it isn't hard to
trigger softlock by running heavy/concurrent smartpqi IO.
Since pqi_alloc_io_request() does not use spinlock, disable preemption,
etc., so I guess that there is more of a chance of simply IO timeout.
But I see in pqi_get_physical_disk_info() that there is some
intelligence to set the queue depth, which may reduce chance of timeout
(by reducing disk queue depth). Not sure.
And the point of this patchset is exactly that the block layer will only
send up to 'can_queue' requests, irrespective on how many hardware
queues are present.
That is only true for shared tags.
Thanks,
John