• Robert Elliott's avatar
    blk-mq: cleanup after blk_mq_init_rq_map failures · 5676e7b6
    Robert Elliott authored
    In blk-mq.c blk_mq_alloc_tag_set, if:
    	set->tags = kmalloc_node()
    succeeds, but one of the blk_mq_init_rq_map() calls fails,
    	goto out_unwind;
    needs to free set->tags so the caller is not obligated
    to do so.  None of the current callers (null_blk,
    virtio_blk, virtio_blk, or the forthcoming scsi-mq)
    do so.
    
    set->tags needs to be set to NULL after doing so,
    so other tag cleanup logic doesn't try to free
    a stale pointer later.  Also set it to NULL
    in blk_mq_free_tag_set.
    
    Tested with error injection on the forthcoming
    scsi-mq + hpsa combination.
    Signed-off-by: default avatarRobert Elliott <elliott@hp.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    5676e7b6
blk-mq.c 46.5 KB