diff options
author | Tejun Heo <tj@kernel.org> | 2014-01-10 08:57:24 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-01-10 16:48:08 -0500 |
commit | 99177a34110889a8f2c36420c34e3bcc9bfd8a70 (patch) | |
tree | 53aa8ccc23e3bd92192a8d0518aa4f5f84a634d9 /fs/kernfs/kernfs-internal.h | |
parent | f601f9a2bf7dc1f7ee18feece4c4e2fc6845d6c4 (diff) |
kernfs: remove kernfs_addrm_cxt
kernfs_addrm_cxt and the accompanying kernfs_addrm_start/finish() were
added because there were operations which should be performed outside
kernfs_mutex after adding and removing kernfs_nodes. The necessary
operations were recorded in kernfs_addrm_cxt and performed by
kernfs_addrm_finish(); however, after the recent changes which
relocated deactivation and unmapping so that they're performed
directly during removal, the only operation kernfs_addrm_finish()
performs is kernfs_put(), which can be moved inside the removal path
too.
This patch moves the kernfs_put() of the base ref to __kernfs_remove()
and remove kernfs_addrm_cxt and kernfs_addrm_start/finish().
* kernfs_add_one() is updated to grab and release the parent's active
ref and kernfs_mutex itself. kernfs_get/put_active() and
kernfs_addrm_start/finish() invocations around it are removed from
all users.
* __kernfs_remove() puts an unlinked node directly instead of chaining
it to kernfs_addrm_cxt. Its callers are updated to grab and release
kernfs_mutex instead of calling kernfs_addrm_start/finish() around
it.
v2: Updated to fit the v2 restructuring of removal path.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/kernfs/kernfs-internal.h')
-rw-r--r-- | fs/kernfs/kernfs-internal.h | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h index e9ec38c86074..4bc57848076c 100644 --- a/fs/kernfs/kernfs-internal.h +++ b/fs/kernfs/kernfs-internal.h | |||
@@ -46,13 +46,6 @@ static inline struct kernfs_root *kernfs_root(struct kernfs_node *kn) | |||
46 | } | 46 | } |
47 | 47 | ||
48 | /* | 48 | /* |
49 | * Context structure to be used while adding/removing nodes. | ||
50 | */ | ||
51 | struct kernfs_addrm_cxt { | ||
52 | struct kernfs_node *removed; | ||
53 | }; | ||
54 | |||
55 | /* | ||
56 | * mount.c | 49 | * mount.c |
57 | */ | 50 | */ |
58 | struct kernfs_super_info { | 51 | struct kernfs_super_info { |
@@ -101,10 +94,7 @@ extern const struct inode_operations kernfs_dir_iops; | |||
101 | 94 | ||
102 | struct kernfs_node *kernfs_get_active(struct kernfs_node *kn); | 95 | struct kernfs_node *kernfs_get_active(struct kernfs_node *kn); |
103 | void kernfs_put_active(struct kernfs_node *kn); | 96 | void kernfs_put_active(struct kernfs_node *kn); |
104 | void kernfs_addrm_start(struct kernfs_addrm_cxt *acxt); | 97 | int kernfs_add_one(struct kernfs_node *kn, struct kernfs_node *parent); |
105 | int kernfs_add_one(struct kernfs_addrm_cxt *acxt, struct kernfs_node *kn, | ||
106 | struct kernfs_node *parent); | ||
107 | void kernfs_addrm_finish(struct kernfs_addrm_cxt *acxt); | ||
108 | struct kernfs_node *kernfs_new_node(struct kernfs_root *root, const char *name, | 98 | struct kernfs_node *kernfs_new_node(struct kernfs_root *root, const char *name, |
109 | umode_t mode, unsigned flags); | 99 | umode_t mode, unsigned flags); |
110 | 100 | ||