sysfs: Only take active references on attributes.
[safe/jmp/linux-2.6] / fs / sysfs / dir.c
index 1bdc42f..481fdec 100644 (file)
@@ -156,6 +156,10 @@ static void sysfs_deactivate(struct sysfs_dirent *sd)
        int v;
 
        BUG_ON(sd->s_sibling || !(sd->s_flags & SYSFS_FLAG_REMOVED));
+
+       if (!(sysfs_type(sd) & SYSFS_ACTIVE_REF))
+               return;
+
        sd->s_sibling = (void *)&wait;
 
        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)
 
        atomic_set(&sd->s_count, 1);
        atomic_set(&sd->s_active, 0);
-       sysfs_dirent_init_lockdep(sd);
 
        sd->s_name = name;
        sd->s_mode = mode;