Skip to content
  • Dave Reisner's avatar
    tmpfiles: use write(2) for the 'w' action · 54693d9b
    Dave Reisner authored
    This resolves problems with filesystems which do not implement the
    aio_write file operation. In this case, the kernel will fall back using
    a loop writing technique for each pointer in a received iovec. The
    result is strange errors in dmesg such as:
    
    [   31.855871] elevator: type  not found
    [   31.856262] elevator: switch to
    [   31.856262]  failed
    
    It does not make sense to implement a synchronous aio_write method for
    sysfs as this isn't a real filesystem where a reasonable use case for
    using writev exists, nor is there an expectation that tmpfiles will be
    used to write more data than can be reasonably written in a single write
    syscall.
    
    In addition, some sysfs attrs are currently buggy and will NOT reject
    the second write with the newline, causing the sysfs value to be zeroed
    out. This of course should be fixed in the kernel regardless of any
    wrongdoing in userspace, but this simple change makes us immune to such
    a bug.
    
    This change means that we do not write a trailing newline by default, as
    the expected use case of 'w' is for sysfs and procfs. In exchange, honor
    C-style backslash escapes so that if the newline is really needed, the
    user can add it.
    54693d9b