aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/sysfs.h
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-06-13 14:45:18 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-07-11 19:09:07 -0400
commitb6b4a4399c2a83d1af77c99dee0d0b5cc15ec268 (patch)
tree7a5d3134a338f03ab813024d5501bde1d434c98b /fs/sysfs/sysfs.h
parent0b8ead82f5d9d8f08c0d1236f2e350b70a977753 (diff)
sysfs: move s_active functions to fs/sysfs/dir.c
These functions are about to receive more complexity and doesn't really need to be inlined in the first place. Move them from fs/sysfs/sysfs.h to fs/sysfs/dir.c. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/sysfs/sysfs.h')
-rw-r--r--fs/sysfs/sysfs.h94
1 files changed, 6 insertions, 88 deletions
diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
index 627bf3940dfa..f8779eaa53ff 100644
--- a/fs/sysfs/sysfs.h
+++ b/fs/sysfs/sysfs.h
@@ -56,6 +56,12 @@ enum sysfs_s_active_class
56extern struct vfsmount * sysfs_mount; 56extern struct vfsmount * sysfs_mount;
57extern struct kmem_cache *sysfs_dir_cachep; 57extern struct kmem_cache *sysfs_dir_cachep;
58 58
59extern struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd);
60extern void sysfs_put_active(struct sysfs_dirent *sd);
61extern struct sysfs_dirent *sysfs_get_active_two(struct sysfs_dirent *sd);
62extern void sysfs_put_active_two(struct sysfs_dirent *sd);
63extern void sysfs_deactivate(struct sysfs_dirent *sd);
64
59extern void sysfs_delete_inode(struct inode *inode); 65extern void sysfs_delete_inode(struct inode *inode);
60extern void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode); 66extern void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode);
61extern struct inode * sysfs_get_inode(struct sysfs_dirent *sd); 67extern struct inode * sysfs_get_inode(struct sysfs_dirent *sd);
@@ -104,94 +110,6 @@ static inline void sysfs_put(struct sysfs_dirent * sd)
104 release_sysfs_dirent(sd); 110 release_sysfs_dirent(sd);
105} 111}
106 112
107/**
108 * sysfs_get_active - get an active reference to sysfs_dirent
109 * @sd: sysfs_dirent to get an active reference to
110 *
111 * Get an active reference of @sd. This function is noop if @sd
112 * is NULL.
113 *
114 * RETURNS:
115 * Pointer to @sd on success, NULL on failure.
116 */
117static inline struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd)
118{
119 if (sd) {
120 if (unlikely(!down_read_trylock(&sd->s_active)))
121 sd = NULL;
122 }
123 return sd;
124}
125
126/**
127 * sysfs_put_active - put an active reference to sysfs_dirent
128 * @sd: sysfs_dirent to put an active reference to
129 *
130 * Put an active reference to @sd. This function is noop if @sd
131 * is NULL.
132 */
133static inline void sysfs_put_active(struct sysfs_dirent *sd)
134{
135 if (sd)
136 up_read(&sd->s_active);
137}
138
139/**
140 * sysfs_get_active_two - get active references to sysfs_dirent and parent
141 * @sd: sysfs_dirent of interest
142 *
143 * Get active reference to @sd and its parent. Parent's active
144 * reference is grabbed first. This function is noop if @sd is
145 * NULL.
146 *
147 * RETURNS:
148 * Pointer to @sd on success, NULL on failure.
149 */
150static inline struct sysfs_dirent *sysfs_get_active_two(struct sysfs_dirent *sd)
151{
152 if (sd) {
153 if (sd->s_parent && unlikely(!sysfs_get_active(sd->s_parent)))
154 return NULL;
155 if (unlikely(!sysfs_get_active(sd))) {
156 sysfs_put_active(sd->s_parent);
157 return NULL;
158 }
159 }
160 return sd;
161}
162
163/**
164 * sysfs_put_active_two - put active references to sysfs_dirent and parent
165 * @sd: sysfs_dirent of interest
166 *
167 * Put active references to @sd and its parent. This function is
168 * noop if @sd is NULL.
169 */
170static inline void sysfs_put_active_two(struct sysfs_dirent *sd)
171{
172 if (sd) {
173 sysfs_put_active(sd);
174 sysfs_put_active(sd->s_parent);
175 }
176}
177
178/**
179 * sysfs_deactivate - deactivate sysfs_dirent
180 * @sd: sysfs_dirent to deactivate
181 *
182 * Deny new active references and drain existing ones. s_active
183 * will be unlocked when the sysfs_dirent is released.
184 */
185static inline void sysfs_deactivate(struct sysfs_dirent *sd)
186{
187 down_write_nested(&sd->s_active, SYSFS_S_ACTIVE_DEACTIVATE);
188
189 /* s_active will be unlocked by the thread doing the final put
190 * on @sd. Lie to lockdep.
191 */
192 rwsem_release(&sd->s_active.dep_map, 1, _RET_IP_);
193}
194
195static inline int sysfs_is_shadowed_inode(struct inode *inode) 113static inline int sysfs_is_shadowed_inode(struct inode *inode)
196{ 114{
197 return S_ISDIR(inode->i_mode) && inode->i_op->follow_link; 115 return S_ISDIR(inode->i_mode) && inode->i_op->follow_link;