• Jan Kara's avatar
    direct-io: Fix negative return from dio read beyond eof · 74cedf9b
    Jan Kara authored
    Assume a filesystem with 4KB blocks. When a file has size 1000 bytes and
    we issue direct IO read at offset 1024, blockdev_direct_IO() reads the
    tail of the last block and the logic for handling short DIO reads in
    dio_complete() results in a return value -24 (1000 - 1024) which
    obviously confuses userspace.
    
    Fix the problem by bailing out early once we sample i_size and can
    reliably check that direct IO read starts beyond i_size.
    Reported-by: default avatarAvi Kivity <avi@scylladb.com>
    Fixes: 9fe55eea
    CC: stable@vger.kernel.org
    CC: Steven Whitehouse <swhiteho@redhat.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    74cedf9b
direct-io.c 38.3 KB