• Jeff Layton's avatar
    ext4: fix i_version handling in ext4 · a642c2c0
    Jeff Layton authored
    ext4 currently updates the i_version counter when the atime is updated
    during a read. This is less than ideal as it can cause unnecessary cache
    invalidations with NFSv4 and unnecessary remeasurements for IMA.
    
    The increment in ext4_mark_iloc_dirty is also problematic since it can
    corrupt the i_version counter for ea_inodes. We aren't bumping the file
    times in ext4_mark_iloc_dirty, so changing the i_version there seems
    wrong, and is the cause of both problems.
    
    Remove that callsite and add increments to the setattr, setxattr and
    ioctl codepaths, at the same times that we update the ctime. The
    i_version bump that already happens during timestamp updates should take
    care of the rest.
    
    In ext4_move_extents, increment the i_version on both inodes, and also
    add in missing ctime updates.
    
    [ Some minor updates since we've already enabled the i_version counter
      unconditionally already via another patch series. -- TYT ]
    
    Cc: stable@kernel.org
    Cc: Lukas Czerner <lczerner@redhat.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Reviewed-by: default avatarChristian Brauner (Microsoft) <brauner@kernel.org>
    Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
    Link: https://lore.kernel.org/r/20220908172448.208585-3-jlayton@kernel.orgSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    a642c2c0
ioctl.c 42.4 KB