Skip to content
Snippets Groups Projects
  • Jens Axboe's avatar
    bcd4f3ac
    splice: direct splicing updates ppos twice · bcd4f3ac
    Jens Axboe authored
    
    OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> reported that he's noticed
    nfsd read corruption in recent kernels, and did the hard work of
    discovering that it's due to splice updating the file position twice.
    This means that the next operation would start further ahead than it
    should.
    
    nfsd_vfs_read()
        splice_direct_to_actor()
            while(len) {
                do_splice_to()                     [update sd->pos]
                    -> generic_file_splice_read()  [read from sd->pos]
                nfsd_direct_splice_actor()
                    -> __splice_from_pipe()        [update sd->pos]
    
    There's nothing wrong with the core splice code, but the direct
    splicing is an addon that calls both input and output paths.
    So it has to take care in locally caching offset so it remains correct.
    
    Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
    bcd4f3ac
    History
    splice: direct splicing updates ppos twice
    Jens Axboe authored
    
    OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> reported that he's noticed
    nfsd read corruption in recent kernels, and did the hard work of
    discovering that it's due to splice updating the file position twice.
    This means that the next operation would start further ahead than it
    should.
    
    nfsd_vfs_read()
        splice_direct_to_actor()
            while(len) {
                do_splice_to()                     [update sd->pos]
                    -> generic_file_splice_read()  [read from sd->pos]
                nfsd_direct_splice_actor()
                    -> __splice_from_pipe()        [update sd->pos]
    
    There's nothing wrong with the core splice code, but the direct
    splicing is an addon that calls both input and output paths.
    So it has to take care in locally caching offset so it remains correct.
    
    Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.