• Miklos Szeredi's avatar
    fuse: don't need GETATTR after every READ · 802dc049
    Miklos Szeredi authored
    If 'auto_inval_data' mode is active, then fuse_file_read_iter() will call
    fuse_update_attributes(), which will check the attribute validity and send
    a GETATTR request if some of the attributes are no longer valid.  The page
    cache is then invalidated if the size or mtime have changed.
    
    Then, if a READ request was sent and reply received (which is the case if
    the data wasn't cached yet, or if the file is opened for O_DIRECT), the
    atime attribute is invalidated.
    
    This will result in the next read() also triggering a GETATTR, ...
    
    This can be fixed by only sending GETATTR if the mode or size are invalid,
    we don't need to do a refresh if only atime is invalid.
    
    More generally, none of the callers of fuse_update_attributes() need an
    up-to-date atime value, so for now just remove STATX_ATIME from the request
    mask when attributes are updated for internal use.
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    802dc049
dir.c 40.9 KB