diff options
| -rw-r--r-- | fs/sysfs/dir.c | 5 | ||||
| -rw-r--r-- | fs/sysfs/file.c | 1 | ||||
| -rw-r--r-- | fs/sysfs/sysfs.h | 1 |
3 files changed, 6 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; |
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index 40961366e929..e222b2582746 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
| @@ -509,6 +509,7 @@ int sysfs_add_file_mode(struct sysfs_dirent *dir_sd, | |||
| 509 | if (!sd) | 509 | if (!sd) |
| 510 | return -ENOMEM; | 510 | return -ENOMEM; |
| 511 | sd->s_attr.attr = (void *)attr; | 511 | sd->s_attr.attr = (void *)attr; |
| 512 | sysfs_dirent_init_lockdep(sd); | ||
| 512 | 513 | ||
| 513 | sysfs_addrm_start(&acxt, dir_sd); | 514 | sysfs_addrm_start(&acxt, dir_sd); |
| 514 | rc = sysfs_add_one(&acxt, sd); | 515 | rc = sysfs_add_one(&acxt, sd); |
diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h index bb7723c4f5a5..7db6884f4206 100644 --- a/fs/sysfs/sysfs.h +++ b/fs/sysfs/sysfs.h | |||
| @@ -79,6 +79,7 @@ struct sysfs_dirent { | |||
| 79 | #define SYSFS_KOBJ_BIN_ATTR 0x0004 | 79 | #define SYSFS_KOBJ_BIN_ATTR 0x0004 |
| 80 | #define SYSFS_KOBJ_LINK 0x0008 | 80 | #define SYSFS_KOBJ_LINK 0x0008 |
| 81 | #define SYSFS_COPY_NAME (SYSFS_DIR | SYSFS_KOBJ_LINK) | 81 | #define SYSFS_COPY_NAME (SYSFS_DIR | SYSFS_KOBJ_LINK) |
| 82 | #define SYSFS_ACTIVE_REF (SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR) | ||
| 82 | 83 | ||
| 83 | #define SYSFS_FLAG_MASK ~SYSFS_TYPE_MASK | 84 | #define SYSFS_FLAG_MASK ~SYSFS_TYPE_MASK |
| 84 | #define SYSFS_FLAG_REMOVED 0x0200 | 85 | #define SYSFS_FLAG_REMOVED 0x0200 |
