• Keith Busch's avatar
    NVMe: Async IO queue deletion · 4d115420
    Keith Busch authored
    This attempts to delete all IO queues at the same time asynchronously on
    shutdown. This is necessary for a present device that is not responding;
    a shutdown operation previously would take 2 minutes per queue-pair
    to timeout before moving on to the next queue, making a device removal
    appear to take a very long time or "hung" as reported by users.
    
    In the previous worst case, a removal may be stuck forever until a kill
    signal is given if there are more than 32 queue pairs since it would run
    out of admin command IDs after over an hour of timed out sync commands
    (admin queue depth is 64).
    
    This patch will wait for the admin command timeout for all commands to
    complete, so the worst case now for an unresponsive controller is 60
    seconds, though that still seems like a long time.
    
    Since this adds another way to take queues offline, some duplicate code
    resulted so I moved these into more convienient functions.
    Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
    [make functions static, correct line length and whitespace issues]
    Signed-off-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
    4d115420
nvme-core.c 65.7 KB