Skip to content
  • Tejun Heo's avatar
    kernfs: remove KERNFS_REMOVED · 81c173cb
    Tejun Heo authored
    
    
    KERNFS_REMOVED is used to mark half-initialized and dying nodes so
    that they don't show up in lookups and deny adding new nodes under or
    renaming it; however, its role overlaps that of deactivation.
    
    It's necessary to deny addition of new children while removal is in
    progress; however, this role considerably intersects with deactivation
    - KERNFS_REMOVED prevents new children while deactivation prevents new
    file operations.  There's no reason to have them separate making
    things more complex than necessary.
    
    This patch removes KERNFS_REMOVED.
    
    * Instead of KERNFS_REMOVED, each node now starts its life
      deactivated.  This means that we now use both atomic_add() and
      atomic_sub() on KN_DEACTIVATED_BIAS, which is INT_MIN.  The compiler
      generates an overflow warnings when negating INT_MIN as the negation
      can't be represented as a positive number.  Nothing is actually
      broken but let's bump BIAS by one to avoid the warnings for archs
      which negates the subtrahend..
    
    * A new helper kernfs_active() which tests whether kn->active >= 0 is
      added for convenience and lockdep annotation.  All KERNFS_REMOVED
      tests are replaced with negated kernfs_active() tests.
    
    * __kernfs_remove() is updated to deactivate, but not drain, all nodes
      in the subtree instead of setting KERNFS_REMOVED.  This removes
      deactivation from kernfs_deactivate(), which is now renamed to
      kernfs_drain().
    
    * Sanity check on KERNFS_REMOVED in kernfs_put() is replaced with
      checks on the active ref.
    
    * Some comment style updates in the affected area.
    
    v2: Reordered before removal path restructuring.  kernfs_active()
        dropped and kernfs_get/put_active() used instead.  RB_EMPTY_NODE()
        used in the lookup paths.
    
    v3: Reverted most of v2 except for creating a new node with
        KN_DEACTIVATED_BIAS.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    81c173cb