Skip to content
  • Christoph Hellwig's avatar
    raw-posix: refactor AIO support · 9ef91a67
    Christoph Hellwig authored
    
    
    Currently the raw-posix.c code contains a lot of knowledge about the
    asynchronous I/O scheme that is mostly implemented in posix-aio-compat.c.
    All this code does not really belong here and is getting a bit in the
    way of implementing native AIO on Linux.
    
    So instead move all the guts of the AIO implementation into
    posix-aio-compat.c (which might need a better name, btw).
    
    There's now a very small interface between the AIO providers and raw-posix.c:
    
     - an init routine is called from raw_open_common to return an AIO context
       for this drive.  An AIO implementation may either re-use one context
       for all drives, or use a different one for each as the Linux native
       AIO support will do.
     - an submit routine is called from the aio_reav/writev methods to submit
       an AIO request
    
    There are no indirect calls involved in this interface as we need to
    decide which one to call manually.  We will only call the Linux AIO native
    init function if we were requested to by vl.c, and we will only call
    the native submit function if we are asked to and the request is properly
    aligned.  That's also the reason why the alignment check actually does
    the inverse move and now goes into raw-posix.c.
    
    The old posix-aio-compat.h headers is removed now that most of it's
    content is private to posix-aio-compat.c, and instead we add a new
    block/raw-posix-aio.h headers is created containing only the tiny interface
    between raw-posix.c and the AIO implementation.
    
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
    9ef91a67