1. 28 7月, 2010 13 次提交
    • E
      fanotify: drop the useless priority argument · 08ae8938
      Eric Paris 提交于
      The priority argument in fanotify is useless.  Kill it.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      08ae8938
    • E
      fsnotify: add group priorities · cb2d429f
      Eric Paris 提交于
      This introduces an ordering to fsnotify groups.  With purely asynchronous
      notification based "things" implementing fsnotify (inotify, dnotify) ordering
      isn't particularly important.  But if people want to use fsnotify for the
      basis of sycronous notification or blocking notification ordering becomes
      important.
      
      eg. A Hierarchical Storage Management listener would need to get its event
      before an AV scanner could get its event (since the HSM would need to
      bring the data in for the AV scanner to scan.)  Typically asynchronous notification
      would want to run after the AV scanner made any relevant access decisions
      so as to not send notification about an event that was denied.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      cb2d429f
    • E
      fsnotify: rename mark_entry to just mark · 841bdc10
      Eric Paris 提交于
      previously I used mark_entry when talking about marks on inodes.  The
      _entry is pretty useless.  Just use "mark" instead.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      841bdc10
    • E
      fsnotify: rename fsnotify_mark_entry to just fsnotify_mark · e61ce867
      Eric Paris 提交于
      The name is long and it serves no real purpose.  So rename
      fsnotify_mark_entry to just fsnotify_mark.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      e61ce867
    • E
      fsnotify: mount point listeners list and global mask · 7131485a
      Eric Paris 提交于
      currently all of the notification systems implemented select which inodes
      they care about and receive messages only about those inodes (or the
      children of those inodes.)  This patch begins to flesh out fsnotify support
      for the concept of listeners that want to hear notification for an inode
      accessed below a given monut point.  This patch implements a second list
      of fsnotify groups to hold these types of groups and a second global mask
      to hold the events of interest for this type of group.
      
      The reason we want a second group list and mask is because the inode based
      notification should_send_event support which makes each group look for a mark
      on the given inode.  With one nfsmount listener that means that every group would
      have to take the inode->i_lock, look for their mark, not find one, and return
      for every operation.   By seperating vfsmount from inode listeners only when
      there is a inode listener will the inode groups have to look for their
      mark and take the inode lock.  vfsmount listeners will have to grab the lock and
      look for a mark but there should be fewer of them, and one vfsmount listener
      won't cause the i_lock to be grabbed and released for every fsnotify group
      on every io operation.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      7131485a
    • E
      fsnotify: add groups to fsnotify_inode_groups when registering inode watch · 4ca76352
      Eric Paris 提交于
      Currently all fsnotify groups are added immediately to the
      fsnotify_inode_groups list upon creation.  This means, even groups with no
      watches (common for audit) will be on the global tracking list and will
      get checked for every event.  This patch adds groups to the global list on
      when the first inode mark is added to the group.
      Signed-of-by: NEric Paris <eparis@redhat.com>
      4ca76352
    • E
      fsnotify: initialize the group->num_marks in a better place · 36fddeba
      Eric Paris 提交于
      Currently the comments say that group->num_marks is held because the group
      is on the fsnotify_group list.  This isn't strictly the case, we really
      just hold the num_marks for the life of the group (any time group->refcnt
      is != 0)  This patch moves the initialization stuff and makes it clear when
      it is really being held.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      36fddeba
    • E
      fsnotify: rename fsnotify_groups to fsnotify_inode_groups · 19c2a0e1
      Eric Paris 提交于
      Simple renaming patch.  fsnotify is about to support mount point listeners
      so I am renaming fsnotify_groups and fsnotify_mask to indicate these are lists
      used only for groups which have watches on inodes.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      19c2a0e1
    • E
      fsnotify: drop mask argument from fsnotify_alloc_group · 0d2e2a1d
      Eric Paris 提交于
      Nothing uses the mask argument to fsnotify_alloc_group.  This patch drops
      that argument.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      0d2e2a1d
    • E
      fsnotify: fsnotify_obtain_group should be fsnotify_alloc_group · ffab8340
      Eric Paris 提交于
      fsnotify_obtain_group was intended to be able to find an already existing
      group.  Nothing uses that functionality.  This just renames it to
      fsnotify_alloc_group so it is clear what it is doing.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      ffab8340
    • E
      fsnotify: fsnotify_obtain_group kzalloc cleanup · cd7752ce
      Eric Paris 提交于
      fsnotify_obtain_group uses kzalloc but then proceedes to set things to 0.
      This patch just deletes those useless lines.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      cd7752ce
    • E
      fsnotify: remove group_num altogether · 74be0cc8
      Eric Paris 提交于
      The original fsnotify interface has a group-num which was intended to be
      able to find a group after it was added.  I no longer think this is a
      necessary thing to do and so we remove the group_num.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      74be0cc8
    • E
      fsnotify: kzalloc fsnotify groups · f0553af0
      Eric Paris 提交于
      Use kzalloc for fsnotify_groups so that none of the fields can leak any
      information accidentally.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      f0553af0
  2. 12 6月, 2009 3 次提交
    • E
      fsnotify: generic notification queue and waitq · a2d8bc6c
      Eric Paris 提交于
      inotify needs to do asyc notification in which event information is stored
      on a queue until the listener is ready to receive it.  This patch
      implements a generic notification queue for inotify (and later fanotify) to
      store events to be sent at a later time.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      Acked-by: NAl Viro <viro@zeniv.linux.org.uk>
      Cc: Christoph Hellwig <hch@lst.de>
      a2d8bc6c
    • E
      fsnotify: add marks to inodes so groups can interpret how to handle those inodes · 3be25f49
      Eric Paris 提交于
      This patch creates a way for fsnotify groups to attach marks to inodes.
      These marks have little meaning to the generic fsnotify infrastructure
      and thus their meaning should be interpreted by the group that attached
      them to the inode's list.
      
      dnotify and inotify  will make use of these markings to indicate which
      inodes are of interest to their respective groups.  But this implementation
      has the useful property that in the future other listeners could actually
      use the marks for the exact opposite reason, aka to indicate which inodes
      it had NO interest in.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      Acked-by: NAl Viro <viro@zeniv.linux.org.uk>
      Cc: Christoph Hellwig <hch@lst.de>
      3be25f49
    • E
      fsnotify: unified filesystem notification backend · 90586523
      Eric Paris 提交于
      fsnotify is a backend for filesystem notification.  fsnotify does
      not provide any userspace interface but does provide the basis
      needed for other notification schemes such as dnotify.  fsnotify
      can be extended to be the backend for inotify or the upcoming
      fanotify.  fsnotify provides a mechanism for "groups" to register for
      some set of filesystem events and to then deliver those events to
      those groups for processing.
      
      fsnotify has a number of benefits, the first being actually shrinking the size
      of an inode.  Before fsnotify to support both dnotify and inotify an inode had
      
              unsigned long           i_dnotify_mask; /* Directory notify events */
              struct dnotify_struct   *i_dnotify; /* for directory notifications */
              struct list_head        inotify_watches; /* watches on this inode */
              struct mutex            inotify_mutex;  /* protects the watches list
      
      But with fsnotify this same functionallity (and more) is done with just
      
              __u32                   i_fsnotify_mask; /* all events for this inode */
              struct hlist_head       i_fsnotify_mark_entries; /* marks on this inode */
      
      That's right, inotify, dnotify, and fanotify all in 64 bits.  We used that
      much space just in inotify_watches alone, before this patch set.
      
      fsnotify object lifetime and locking is MUCH better than what we have today.
      inotify locking is incredibly complex.  See 8f7b0ba1 as an example of
      what's been busted since inception.  inotify needs to know internal semantics
      of superblock destruction and unmounting to function.  The inode pinning and
      vfs contortions are horrible.
      
      no fsnotify implementers do allocation under locks.  This means things like
      f04b30de which (due to an overabundance of caution) changes GFP_KERNEL to
      GFP_NOFS can be reverted.  There are no longer any allocation rules when using
      or implementing your own fsnotify listener.
      
      fsnotify paves the way for fanotify.  In brief fanotify is a notification
      mechanism that delivers the lisener both an 'event' and an open file descriptor
      to the object in question.  This means that fanotify is pathname agnostic.
      Some on lkml may not care for the original companies or users that pushed for
      TALPA, but fanotify was designed with flexibility and input for other users in
      mind.  The readahead group expressed interest in fanotify as it could be used
      to profile disk access on boot without breaking the audit system.  The desktop
      search groups have also expressed interest in fanotify as it solves a number
      of the race conditions and problems present with managing inotify when more
      than a limited number of specific files are of interest.  fanotify can provide
      for a userspace access control system which makes it a clean interface for AV
      vendors to hook without trying to do binary patching on the syscall table,
      LSM, and everywhere else they do their things today.  With this patch series
      fanotify can be implemented in less than 1200 lines of easy to review code.
      Almost all of which is the socket based user interface.
      
      This patch series builds fsnotify to the point that it can implement
      dnotify and inotify_user.  Patches exist and will be sent soon after
      acceptance to finish the in kernel inotify conversion (audit) and implement
      fanotify.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      Acked-by: NAl Viro <viro@zeniv.linux.org.uk>
      Cc: Christoph Hellwig <hch@lst.de>
      90586523