• Miklos Szeredi's avatar
    vfs: add i_op->atomic_open() · d18e9008
    Miklos Szeredi authored
    Add a new inode operation which is called on the last component of an open.
    Using this the filesystem can look up, possibly create and open the file in one
    atomic operation.  If it cannot perform this (e.g. the file type turned out to
    be wrong) it may signal this by returning NULL instead of an open struct file
    pointer.
    
    i_op->atomic_open() is only called if the last component is negative or needs
    lookup.  Handling cached positive dentries here doesn't add much value: these
    can be opened using f_op->open().  If the cached file turns out to be invalid,
    the open can be retried, this time using ->atomic_open() with a fresh dentry.
    
    For now leave the old way of using open intents in lookup and revalidate in
    place.  This will be removed once all the users are converted.
    
    David Howells noticed that if ->atomic_open() opens the file but does not create
    it, handle_truncate() will be called on it even if it is not a regular file.
    Fix this by checking the file type in this case too.
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    d18e9008
open.c 28.4 KB