aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/sysfs/dir.c')
-rw-r--r--fs/sysfs/dir.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
index 1bdc42f4fd93..481fdec09f4e 100644
--- a/fs/sysfs/dir.c
+++ b/fs/sysfs/dir.c
@@ -156,6 +156,10 @@ static void sysfs_deactivate(struct sysfs_dirent *sd)
156 int v; 156 int v;
157 157
158 BUG_ON(sd->s_sibling || !(sd->s_flags & SYSFS_FLAG_REMOVED)); 158 BUG_ON(sd->s_sibling || !(sd->s_flags & SYSFS_FLAG_REMOVED));
159
160 if (!(sysfs_type(sd) & SYSFS_ACTIVE_REF))
161 return;
162
159 sd->s_sibling = (void *)&wait; 163 sd->s_sibling = (void *)&wait;
160 164
161 rwsem_acquire(&sd->dep_map, 0, 0, _RET_IP_); 165 rwsem_acquire(&sd->dep_map, 0, 0, _RET_IP_);
@@ -315,7 +319,6 @@ struct sysfs_dirent *sysfs_new_dirent(const char *name, umode_t mode, int type)
315 319
316 atomic_set(&sd->s_count, 1); 320 atomic_set(&sd->s_count, 1);
317 atomic_set(&sd->s_active, 0); 321 atomic_set(&sd->s_active, 0);
318 sysfs_dirent_init_lockdep(sd);
319 322
320 sd->s_name = name; 323 sd->s_name = name;
321 sd->s_mode = mode; 324 sd->s_mode = mode;