diff options
Diffstat (limited to 'fs/sysfs')
| -rw-r--r-- | fs/sysfs/dir.c | 5 | ||||
| -rw-r--r-- | fs/sysfs/file.c | 5 | ||||
| -rw-r--r-- | fs/sysfs/group.c | 4 | ||||
| -rw-r--r-- | fs/sysfs/inode.c | 10 | ||||
| -rw-r--r-- | fs/sysfs/sysfs.h | 1 | 
5 files changed, 9 insertions, 16 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c index 37d7a6875d86..59734ba1ee60 100644 --- a/fs/sysfs/dir.c +++ b/fs/sysfs/dir.c  | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include <linux/mount.h> | 8 | #include <linux/mount.h> | 
| 9 | #include <linux/module.h> | 9 | #include <linux/module.h> | 
| 10 | #include <linux/kobject.h> | 10 | #include <linux/kobject.h> | 
| 11 | #include <linux/namei.h> | ||
| 11 | #include "sysfs.h" | 12 | #include "sysfs.h" | 
| 12 | 13 | ||
| 13 | DECLARE_RWSEM(sysfs_rename_sem); | 14 | DECLARE_RWSEM(sysfs_rename_sem); | 
| @@ -99,7 +100,7 @@ static int create_dir(struct kobject * k, struct dentry * p, | |||
| 99 | umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; | 100 | umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; | 
| 100 | 101 | ||
| 101 | down(&p->d_inode->i_sem); | 102 | down(&p->d_inode->i_sem); | 
| 102 | *d = sysfs_get_dentry(p,n); | 103 | *d = lookup_one_len(n, p, strlen(n)); | 
| 103 | if (!IS_ERR(*d)) { | 104 | if (!IS_ERR(*d)) { | 
| 104 | error = sysfs_make_dirent(p->d_fsdata, *d, k, mode, SYSFS_DIR); | 105 | error = sysfs_make_dirent(p->d_fsdata, *d, k, mode, SYSFS_DIR); | 
| 105 | if (!error) { | 106 | if (!error) { | 
| @@ -315,7 +316,7 @@ int sysfs_rename_dir(struct kobject * kobj, const char *new_name) | |||
| 315 | 316 | ||
| 316 | down(&parent->d_inode->i_sem); | 317 | down(&parent->d_inode->i_sem); | 
| 317 | 318 | ||
| 318 | new_dentry = sysfs_get_dentry(parent, new_name); | 319 | new_dentry = lookup_one_len(new_name, parent, strlen(new_name)); | 
| 319 | if (!IS_ERR(new_dentry)) { | 320 | if (!IS_ERR(new_dentry)) { | 
| 320 | if (!new_dentry->d_inode) { | 321 | if (!new_dentry->d_inode) { | 
| 321 | error = kobject_set_name(kobj, "%s", new_name); | 322 | error = kobject_set_name(kobj, "%s", new_name); | 
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index 849aac115460..e9cfa39f4099 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c  | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <linux/module.h> | 5 | #include <linux/module.h> | 
| 6 | #include <linux/dnotify.h> | 6 | #include <linux/dnotify.h> | 
| 7 | #include <linux/kobject.h> | 7 | #include <linux/kobject.h> | 
| 8 | #include <linux/namei.h> | ||
| 8 | #include <asm/uaccess.h> | 9 | #include <asm/uaccess.h> | 
| 9 | #include <asm/semaphore.h> | 10 | #include <asm/semaphore.h> | 
| 10 | 11 | ||
| @@ -400,7 +401,7 @@ int sysfs_update_file(struct kobject * kobj, const struct attribute * attr) | |||
| 400 | int res = -ENOENT; | 401 | int res = -ENOENT; | 
| 401 | 402 | ||
| 402 | down(&dir->d_inode->i_sem); | 403 | down(&dir->d_inode->i_sem); | 
| 403 | victim = sysfs_get_dentry(dir, attr->name); | 404 | victim = lookup_one_len(attr->name, dir, strlen(attr->name)); | 
| 404 | if (!IS_ERR(victim)) { | 405 | if (!IS_ERR(victim)) { | 
| 405 | /* make sure dentry is really there */ | 406 | /* make sure dentry is really there */ | 
| 406 | if (victim->d_inode && | 407 | if (victim->d_inode && | 
| @@ -443,7 +444,7 @@ int sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode) | |||
| 443 | int res = -ENOENT; | 444 | int res = -ENOENT; | 
| 444 | 445 | ||
| 445 | down(&dir->d_inode->i_sem); | 446 | down(&dir->d_inode->i_sem); | 
| 446 | victim = sysfs_get_dentry(dir, attr->name); | 447 | victim = lookup_one_len(attr->name, dir, strlen(attr->name)); | 
| 447 | if (!IS_ERR(victim)) { | 448 | if (!IS_ERR(victim)) { | 
| 448 | if (victim->d_inode && | 449 | if (victim->d_inode && | 
| 449 | (victim->d_parent->d_inode == dir->d_inode)) { | 450 | (victim->d_parent->d_inode == dir->d_inode)) { | 
diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c index f11ac5ea7021..122145b0895c 100644 --- a/fs/sysfs/group.c +++ b/fs/sysfs/group.c  | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/kobject.h> | 11 | #include <linux/kobject.h> | 
| 12 | #include <linux/module.h> | 12 | #include <linux/module.h> | 
| 13 | #include <linux/dcache.h> | 13 | #include <linux/dcache.h> | 
| 14 | #include <linux/namei.h> | ||
| 14 | #include <linux/err.h> | 15 | #include <linux/err.h> | 
| 15 | #include "sysfs.h" | 16 | #include "sysfs.h" | 
| 16 | 17 | ||
| @@ -68,7 +69,8 @@ void sysfs_remove_group(struct kobject * kobj, | |||
| 68 | struct dentry * dir; | 69 | struct dentry * dir; | 
| 69 | 70 | ||
| 70 | if (grp->name) | 71 | if (grp->name) | 
| 71 | dir = sysfs_get_dentry(kobj->dentry,grp->name); | 72 | dir = lookup_one_len(grp->name, kobj->dentry, | 
| 73 | strlen(grp->name)); | ||
| 72 | else | 74 | else | 
| 73 | dir = dget(kobj->dentry); | 75 | dir = dget(kobj->dentry); | 
| 74 | 76 | ||
diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c index 565cac1d4200..8de13bafaa76 100644 --- a/fs/sysfs/inode.c +++ b/fs/sysfs/inode.c  | |||
| @@ -166,16 +166,6 @@ int sysfs_create(struct dentry * dentry, int mode, int (*init)(struct inode *)) | |||
| 166 | return error; | 166 | return error; | 
| 167 | } | 167 | } | 
| 168 | 168 | ||
| 169 | struct dentry * sysfs_get_dentry(struct dentry * parent, const char * name) | ||
| 170 | { | ||
| 171 | struct qstr qstr; | ||
| 172 | |||
| 173 | qstr.name = name; | ||
| 174 | qstr.len = strlen(name); | ||
| 175 | qstr.hash = full_name_hash(name,qstr.len); | ||
| 176 | return lookup_hash(&qstr,parent); | ||
| 177 | } | ||
| 178 | |||
| 179 | /* | 169 | /* | 
| 180 | * Get the name for corresponding element represented by the given sysfs_dirent | 170 | * Get the name for corresponding element represented by the given sysfs_dirent | 
| 181 | */ | 171 | */ | 
diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h index 29da6f5f07c8..3f8953e0e5d0 100644 --- a/fs/sysfs/sysfs.h +++ b/fs/sysfs/sysfs.h  | |||
| @@ -7,7 +7,6 @@ extern int sysfs_create(struct dentry *, int mode, int (*init)(struct inode *)); | |||
| 7 | 7 | ||
| 8 | extern int sysfs_make_dirent(struct sysfs_dirent *, struct dentry *, void *, | 8 | extern int sysfs_make_dirent(struct sysfs_dirent *, struct dentry *, void *, | 
| 9 | umode_t, int); | 9 | umode_t, int); | 
| 10 | extern struct dentry * sysfs_get_dentry(struct dentry *, const char *); | ||
| 11 | 10 | ||
| 12 | extern int sysfs_add_file(struct dentry *, const struct attribute *, int); | 11 | extern int sysfs_add_file(struct dentry *, const struct attribute *, int); | 
| 13 | extern void sysfs_hash_and_remove(struct dentry * dir, const char * name); | 12 | extern void sysfs_hash_and_remove(struct dentry * dir, const char * name); | 
