• Jens Axboe's avatar
    iov_iter: add helper to save iov_iter state · 8fb0f47a
    Jens Axboe authored
    In an ideal world, when someone is passed an iov_iter and returns X bytes,
    then X bytes would have been consumed/advanced from the iov_iter. But we
    have use cases that always consume the entire iterator, a few examples
    of that are iomap and bdev O_DIRECT. This means we cannot rely on the
    state of the iov_iter once we've called ->read_iter() or ->write_iter().
    
    This would be easier if we didn't always have to deal with truncate of
    the iov_iter, as rewinding would be trivial without that. We recently
    added a commit to track the truncate state, but that grew the iov_iter
    by 8 bytes and wasn't the best solution.
    
    Implement a helper to save enough of the iov_iter state to sanely restore
    it after we've called the read/write iterator helpers. This currently
    only works for IOVEC/BVEC/KVEC as that's all we need, support for other
    iterator types are left as an exercise for the reader.
    
    Link: https://lore.kernel.org/linux-fsdevel/CAHk-=wiacKV4Gh-MYjteU0LwNBSGpWrK-Ov25HdqB1ewinrFPg@mail.gmail.com/Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    8fb0f47a
iov_iter.c 48.1 KB