• Jens Axboe's avatar
    NVMe: fix retry/error logic in nvme_queue_rq() · fe54303e
    Jens Axboe authored
    The logic around retrying and erroring IO in nvme_queue_rq() is broken
    in a few ways:
    
    - If we fail allocating dma memory for a discard, we return retry. We
      have the 'iod' stored in ->special, but we free the 'iod'.
    
    - For a normal request, if we fail dma mapping of setting up prps, we
      have the same iod situation. Additionally, we haven't set the callback
      for the request yet, so we also potentially leak IOMMU resources.
    
    Get rid of the ->special 'iod' store. The retry is uncommon enough that
    it's not worth optimizing for or holding on to resources to attempt to
    speed it up. Additionally, it's usually best practice to free any
    request related resources when doing retries.
    Acked-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    fe54303e
nvme-core.c 70.9 KB