• C
    iomap: implement direct I/O · ff6a9292
    Christoph Hellwig 提交于
    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: NChristoph Hellwig <hch@lst.de>
    Reviewed-by: NKent Overstreet <kent.overstreet@gmail.com>
    Tested-by: NJens Axboe <axboe@fb.com>
    Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: NDave Chinner <david@fromorbit.com>
    ff6a9292
iomap.h 3.3 KB