Skip to content
  • Stefan Hajnoczi's avatar
    41abca8c
    block: add blk_io_plug_call() API · 41abca8c
    Stefan Hajnoczi authored
    
    
    Introduce a new API for thread-local blk_io_plug() that does not
    traverse the block graph. The goal is to make blk_io_plug() multi-queue
    friendly.
    
    Instead of having block drivers track whether or not we're in a plugged
    section, provide an API that allows them to defer a function call until
    we're unplugged: blk_io_plug_call(fn, opaque). If blk_io_plug_call() is
    called multiple times with the same fn/opaque pair, then fn() is only
    called once at the end of the function - resulting in batching.
    
    This patch introduces the API and changes blk_io_plug()/blk_io_unplug().
    blk_io_plug()/blk_io_unplug() no longer require a BlockBackend argument
    because the plug state is now thread-local.
    
    Later patches convert block drivers to blk_io_plug_call() and then we
    can finally remove .bdrv_co_io_plug() once all block drivers have been
    converted.
    
    Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Acked-by: default avatarKevin Wolf <kwolf@redhat.com>
    Message-id: 20230530180959.1108766-2-stefanha@redhat.com
    Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    41abca8c
    block: add blk_io_plug_call() API
    Stefan Hajnoczi authored
    
    
    Introduce a new API for thread-local blk_io_plug() that does not
    traverse the block graph. The goal is to make blk_io_plug() multi-queue
    friendly.
    
    Instead of having block drivers track whether or not we're in a plugged
    section, provide an API that allows them to defer a function call until
    we're unplugged: blk_io_plug_call(fn, opaque). If blk_io_plug_call() is
    called multiple times with the same fn/opaque pair, then fn() is only
    called once at the end of the function - resulting in batching.
    
    This patch introduces the API and changes blk_io_plug()/blk_io_unplug().
    blk_io_plug()/blk_io_unplug() no longer require a BlockBackend argument
    because the plug state is now thread-local.
    
    Later patches convert block drivers to blk_io_plug_call() and then we
    can finally remove .bdrv_co_io_plug() once all block drivers have been
    converted.
    
    Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Acked-by: default avatarKevin Wolf <kwolf@redhat.com>
    Message-id: 20230530180959.1108766-2-stefanha@redhat.com
    Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Loading