• K
    NVMe: Fix blk-mq hot cpu notification · 1efccc9d
    Keith Busch 提交于
    The driver may issue commands to a device that may never return, so its
    request_queue could always have active requests while the controller is
    running. Waiting for the queue to freeze could block forever, which is
    what blk-mq's hot cpu notification handler was doing when nvme drives
    were in use.
    
    This has the nvme driver make the asynchronous event command's tag
    reserved and does not keep the request active. We can't have more than
    one since the request is released back to the request_queue before the
    command is completed. Having only one avoids potential tag collisions,
    and reserving the tag for this purpose prevents other admin tasks from
    reusing the tag.
    
    I also couldn't think of a scenario where issuing AEN requests single
    depth is worse than issuing them in batches, so I don't think we lose
    anything with this change.
    
    As an added bonus, doing it this way removes "Cancelling I/O" warnings
    observed when unbinding the nvme driver from a device.
    Reported-by: NYigal Korman <yigal@plexistor.com>
    Signed-off-by: NKeith Busch <keith.busch@intel.com>
    Signed-off-by: NJens Axboe <axboe@fb.com>
    1efccc9d
nvme-core.c 79.3 KB