Tejun Heo 81c173cb5e kernfs: remove KERNFS_REMOVED
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: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-02-07 15:42:41 -08:00
..
2013-10-24 23:43:27 -04:00
2014-01-25 03:13:02 -05:00
2014-01-25 03:13:02 -05:00
2014-01-23 18:54:14 +02:00
2013-06-29 12:56:53 +04:00
2014-01-26 11:51:09 +01:00
2014-02-02 16:24:07 -08:00
2013-12-04 12:27:46 +01:00
2013-12-08 21:14:59 -05:00
2014-01-28 18:56:37 -08:00
2014-01-31 08:14:35 -08:00
2014-02-07 15:42:41 -08:00
2013-09-16 18:20:25 -07:00
2014-01-31 15:39:07 -08:00
2014-01-25 03:14:05 -05:00
2013-06-29 12:56:32 +04:00
2014-01-25 03:13:03 -05:00
2013-06-29 12:56:39 +04:00
2013-12-22 11:03:49 -08:00
2013-12-05 16:36:21 -06:00
2013-06-29 12:57:04 +04:00
2013-10-24 23:34:54 -04:00
2013-09-13 23:06:40 -04:00
2013-06-29 12:57:05 +04:00
2014-01-26 12:37:55 -05:00
2013-11-23 22:33:47 -08:00
2013-09-10 18:56:31 -04:00
2013-10-24 23:34:54 -04:00
2013-11-09 00:16:20 -05:00
2013-10-24 23:34:54 -04:00
2014-01-26 08:26:40 -05:00
2013-11-23 22:33:47 -08:00
2013-10-24 23:35:00 -04:00
2013-10-24 23:34:54 -04:00
2014-01-22 19:36:57 +01:00
2013-11-09 00:16:31 -05:00
2013-05-29 12:57:34 -07:00