• Christoph Hellwig's avatar
    blk-mq: add ->init_request and ->exit_request methods · e9b267d9
    Christoph Hellwig authored
    The current blk_mq_init_commands/blk_mq_free_commands interface has a
    two problems:
    
     1) Because only the constructor is passed to blk_mq_init_commands there
        is no easy way to clean up when a comman initialization failed.  The
        current code simply leaks the allocations done in the constructor.
    
     2) There is no good place to call blk_mq_free_commands: before
        blk_cleanup_queue there is no guarantee that all outstanding
        commands have completed, so we can't free them yet.  After
        blk_cleanup_queue the queue has usually been freed.  This can be
        worked around by grabbing an unconditional reference before calling
        blk_cleanup_queue and dropping it after blk_mq_free_commands is
        done, although that's not exatly pretty and driver writers are
        guaranteed to get it wrong sooner or later.
    
    Both issues are easily fixed by making the request constructor and
    destructor normal blk_mq_ops methods.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    e9b267d9
virtio_blk.c 20.7 KB