diff options
Diffstat (limited to 'fs/sysfs/inode.c')
-rw-r--r-- | fs/sysfs/inode.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c index 45128b79bc68..efb4062fe099 100644 --- a/fs/sysfs/inode.c +++ b/fs/sysfs/inode.c | |||
@@ -189,25 +189,16 @@ void sysfs_instantiate(struct dentry *dentry, struct inode *inode) | |||
189 | int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name) | 189 | int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name) |
190 | { | 190 | { |
191 | struct sysfs_addrm_cxt acxt; | 191 | struct sysfs_addrm_cxt acxt; |
192 | struct sysfs_dirent **pos, *sd; | 192 | struct sysfs_dirent *sd; |
193 | 193 | ||
194 | if (!dir_sd) | 194 | if (!dir_sd) |
195 | return -ENOENT; | 195 | return -ENOENT; |
196 | 196 | ||
197 | sysfs_addrm_start(&acxt, dir_sd); | 197 | sysfs_addrm_start(&acxt, dir_sd); |
198 | 198 | ||
199 | for (pos = &dir_sd->s_children; *pos; pos = &(*pos)->s_sibling) { | 199 | sd = sysfs_find_dirent(dir_sd, name); |
200 | sd = *pos; | 200 | if (sd) |
201 | 201 | sysfs_remove_one(&acxt, sd); | |
202 | if (!sysfs_type(sd)) | ||
203 | continue; | ||
204 | if (!strcmp(sd->s_name, name)) { | ||
205 | *pos = sd->s_sibling; | ||
206 | sd->s_sibling = NULL; | ||
207 | sysfs_remove_one(&acxt, sd); | ||
208 | break; | ||
209 | } | ||
210 | } | ||
211 | 202 | ||
212 | if (sysfs_addrm_finish(&acxt)) | 203 | if (sysfs_addrm_finish(&acxt)) |
213 | return 0; | 204 | return 0; |