Skip to content
  • Heinrich Schuchardt's avatar
    fallocate: create FAN_MODIFY and IN_MODIFY events · 820c12d5
    Heinrich Schuchardt authored
    
    
    The fanotify and the inotify API can be used to monitor changes of the
    file system.  System call fallocate() modifies files.  Hence it should
    trigger the corresponding fanotify (FAN_MODIFY) and inotify (IN_MODIFY)
    events.  The most interesting case is FALLOC_FL_COLLAPSE_RANGE because
    this value allows to create arbitrary file content from random data.
    
    This patch adds the missing call to fsnotify_modify().
    
    The FAN_MODIFY and IN_MODIFY event will be created when fallocate()
    succeeds.  It will even be created if the file length remains unchanged,
    e.g.  when calling fanotify with flag FALLOC_FL_KEEP_SIZE.
    
    This logic was primarily chosen to keep the coding simple.
    
    It resembles the logic of the write() system call.
    
    When we call write() we always create a FAN_MODIFY event, even in the case
    of overwriting with identical data.
    
    Events FAN_MODIFY and IN_MODIFY do not provide any guarantee that data was
    actually changed.
    
    Furthermore even if if the filesize remains unchanged, fallocate() may
    influence whether a subsequent write() will succeed and hence the
    fallocate() call may be considered a modification.
    
    The fallocate(2) man page teaches: After a successful call, subsequent
    writes into the range specified by offset and len are guaranteed not to
    fail because of lack of disk space.
    
    So calling fallocate(fd, FALLOC_FL_KEEP_SIZE, offset, len) may result in
    different outcomes of a subsequent write depending on the values of offset
    and len.
    
    Signed-off-by: Heinrich Schuchardt's avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Eric Paris <eparis@parisplace.org>
    Cc: John McCutchan <john@johnmccutchan.com>
    Cc: Robert Love <rlove@rlove.org>
    Cc: Michael Kerrisk <mtk.manpages@gmail.com>
    Cc: Theodore Ts'o <tytso@mit.edu>
    Cc: Dave Chinner <david@fromorbit.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    820c12d5