On Wed, Apr 26, 2017 at 06:48:43PM +0800, Ming Lei wrote: > Looks there are some choices for this issue: > > 1) if internal ops uses independent tag space > - we need to clean up the mtip32xx driver > > 2) if internal ops shares tag space with normal request > - export blk_mq_get_driver_tag() for mtip32xx > > or > > - use private way to send internal ops, and the drawback > is that we still need to reserve tag and the reserved tag > can't be used at all. The fundamental problem in mtip is that it uses the block layer to allocate requests, but not to issue them. Either it needs to switch to use blk_execute_rq(_nowait) to issue the command, or it needs to stop using blk_mq_alloc_request to allocatate the internal commands. Everything else is a layering violation just asking for more problems down the road. > > >From mtip32xx source code, I can see both share same tag space. > When I try to search hw manual via google, not succeed yet. > > Christoph, could you share us your findings about if internal ops > uses independent tag space or not? As said earlier in the thread - mtip32xx is a beefed up AHCI design, and the internal commands issued are bog standard ATA commands. So I would be very surprised if the hardware requires a specific tag. The way the driver is written it might very well expect a tag to be set aside, though.