• Daniel Wagner's avatar
    nvmet: update AEN list and array at one place · 0f5be6a4
    Daniel Wagner authored
    All async events are enqueued via nvmet_add_async_event() which
    updates the ctrl->async_event_cmds[] array and additionally an struct
    nvmet_async_event is added to the ctrl->async_events list.
    
    Under normal operations the nvmet_async_event_work() updates again
    the ctrl->async_event_cmds and removes the corresponding struct
    nvmet_async_event from the list again. Though nvmet_sq_destroy() could
    be called which calls nvmet_async_events_free() which only updates the
    ctrl->async_event_cmds[] array.
    
    Add new functions nvmet_async_events_process() and
    nvmet_async_events_free() to process async events, update an array and
    the list.
    
    When we destroy submission queue after clearing the aen present on
    the ctrl->async list we also loop over ctrl->async_event_cmds[] for
    any requests posted by the host for which we don't have the AEN in
    the ctrl->async_events list by calling nvmet_async_event_process()
    and nvmet_async_events_free().
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarDaniel Wagner <dwagner@suse.de>
    [chaitanya.kulkarni@wdc.com
     * Loop over and clear out outstanding requests
     * Update changelog
    ]
    Signed-off-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
    0f5be6a4
core.c 35.6 KB