• David Howells's avatar
    CacheFiles: Don't write a full page if there's only a partial page to cache · a17754fb
    David Howells authored
    cachefiles_write_page() writes a full page to the backing file for the last
    page of the netfs file, even if the netfs file's last page is only a partial
    page.
    
    This causes the EOF on the backing file to be extended beyond the EOF of the
    netfs, and thus the backing file will be truncated by cachefiles_attr_changed()
    called from cachefiles_lookup_object().
    
    So we need to limit the write we make to the backing file on that last page
    such that it doesn't push the EOF too far.
    
    Also, if a backing file that has a partial page at the end is expanded, we
    discard the partial page and refetch it on the basis that we then have a hole
    in the file with invalid data, and should the power go out...  A better way to
    deal with this could be to record a note that the partial page contains invalid
    data until the correct data is written into it.
    
    This isn't a problem for netfs's that discard the whole backing file if the
    file size changes (such as NFS).
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    a17754fb
rdwr.c 22.1 KB