Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update mtime when mmap'ed pages become writable #1127

Closed
wants to merge 1 commit into from

Commits on Dec 4, 2012

  1. Update mtime when mmap'ed pages become writable

    GNU Tar is sensitive to situations where mtimes on open files are
    updated to times in the past.
    
    When doing write operations on mmap'ed files, the modification time update
    presently occurs during a flush. Observant programs that open such files
    shortly after they are closed will observe that modification times
    appear to occur in the past. This caused a failure that was observed
    during binary package generation on Gentoo where PaX-marking is done on
    certain files via mmap almost immediately prior to package generation,
    which relies on GNU tar. It can be replicated with a Hello World program
    by doing:
    
    gcc hello.c && scanelf -Xxz -r a.out && tar -cf hello.tgz a.out
    
    Brian Behlendorf suggested that we could prevent this by doing mtime
    updates in the kernel's page_mkwrite() callback function, which is
    invoked whenever a page becomes writeable. We implement that by
    replacing the page_mkwrite function with a wrapper function that invokes
    zfs_inode_update() after invoking the kernel's generic page_mkwrite. It
    would be better to do an mtime update and flush on each close()
    operation done from userland on a dirty file, but unfortunately, the
    Linux kernel provides us with no way to do that.
    
    Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>
    ryao committed Dec 4, 2012
    Copy the full SHA
    e79420b View commit details
    Browse the repository at this point in the history