• Marko Mäkelä's avatar
    MDEV-14244 MariaDB 10.2.10 fails to run on Debian Stretch with ext3 and O_DIRECT · 19733efa
    Marko Mäkelä authored
    os_file_set_size(): If posix_fallocate() returns EINVAL, fall back
    to writing zero bytes to the file. Also, remove some error log output,
    and make it possible for a server shutdown to interrupt the fall-back
    code.
    
    MariaDB 10.2 used to handle the EINVAL return value from posix_fallocate()
    before commit b731a5bc
    which refactored os_file_set_size() to try posix_fallocate().
    
    Why is the EINVAL returned? The GNU posix_fallocate() function
    would first try the fallocate() system call, which would return
    -EOPNOTSUPP for many file systems (notably, not ext4). Then, it
    would fall back to extending the file one block at a time by invoking
    pwrite(fd, "", 1, offset) where offset is 1 less than a multiple of
    the file block size. This would fail with EINVAL if the file is in
    O_DIRECT mode, because O_DIRECT requires aligned operation.
    19733efa
os0file.cc 177 KB