• Christoph Hellwig's avatar
    iomap: implement direct I/O · ff6a9292
    Christoph Hellwig authored
    This adds a full fledget direct I/O implementation using the iomap
    interface. Full fledged in this case means all features are supported:
    AIO, vectored I/O, any iov_iter type including kernel pointers, bvecs
    and pipes, support for hole filling and async apending writes.  It does
    not mean supporting all the warts of the old generic code.  We expect
    i_rwsem to be held over the duration of the call, and we expect to
    maintain i_dio_count ourselves, and we pass on any kinds of mapping
    to the file system for now.
    
    The algorithm used is very simple: We use iomap_apply to iterate over
    the range of the I/O, and then we use the new bio_iov_iter_get_pages
    helper to lock down the user range for the size of the extent.
    bio_iov_iter_get_pages can currently lock down twice as many pages as
    the old direct I/O code did, which means that we will have a better
    batch factor for everything but overwrites of badly fragmented files.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
    Tested-by: default avatarJens Axboe <axboe@fb.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    ff6a9292
iomap.c 22.7 KB