diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/oprofile/oprofilefs.c | 46 |
1 files changed, 14 insertions, 32 deletions
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c index 2766a6d3c2e9..789a1a857ddf 100644 --- a/drivers/oprofile/oprofilefs.c +++ b/drivers/oprofile/oprofilefs.c | |||
| @@ -126,50 +126,41 @@ static const struct file_operations ulong_ro_fops = { | |||
| 126 | }; | 126 | }; |
| 127 | 127 | ||
| 128 | 128 | ||
| 129 | static struct dentry *__oprofilefs_create_file(struct super_block *sb, | 129 | static int __oprofilefs_create_file(struct super_block *sb, |
| 130 | struct dentry *root, char const *name, const struct file_operations *fops, | 130 | struct dentry *root, char const *name, const struct file_operations *fops, |
| 131 | int perm) | 131 | int perm, void *priv) |
| 132 | { | 132 | { |
| 133 | struct dentry *dentry; | 133 | struct dentry *dentry; |
| 134 | struct inode *inode; | 134 | struct inode *inode; |
| 135 | 135 | ||
| 136 | dentry = d_alloc_name(root, name); | 136 | dentry = d_alloc_name(root, name); |
| 137 | if (!dentry) | 137 | if (!dentry) |
| 138 | return NULL; | 138 | return -ENOMEM; |
| 139 | inode = oprofilefs_get_inode(sb, S_IFREG | perm); | 139 | inode = oprofilefs_get_inode(sb, S_IFREG | perm); |
| 140 | if (!inode) { | 140 | if (!inode) { |
| 141 | dput(dentry); | 141 | dput(dentry); |
| 142 | return NULL; | 142 | return -ENOMEM; |
| 143 | } | 143 | } |
| 144 | inode->i_fop = fops; | 144 | inode->i_fop = fops; |
| 145 | d_add(dentry, inode); | 145 | d_add(dentry, inode); |
| 146 | return dentry; | 146 | dentry->d_inode->i_private = priv; |
| 147 | return 0; | ||
| 147 | } | 148 | } |
| 148 | 149 | ||
| 149 | 150 | ||
| 150 | int oprofilefs_create_ulong(struct super_block *sb, struct dentry *root, | 151 | int oprofilefs_create_ulong(struct super_block *sb, struct dentry *root, |
| 151 | char const *name, unsigned long *val) | 152 | char const *name, unsigned long *val) |
| 152 | { | 153 | { |
| 153 | struct dentry *d = __oprofilefs_create_file(sb, root, name, | 154 | return __oprofilefs_create_file(sb, root, name, |
| 154 | &ulong_fops, 0644); | 155 | &ulong_fops, 0644, val); |
| 155 | if (!d) | ||
| 156 | return -EFAULT; | ||
| 157 | |||
| 158 | d->d_inode->i_private = val; | ||
| 159 | return 0; | ||
| 160 | } | 156 | } |
| 161 | 157 | ||
| 162 | 158 | ||
| 163 | int oprofilefs_create_ro_ulong(struct super_block *sb, struct dentry *root, | 159 | int oprofilefs_create_ro_ulong(struct super_block *sb, struct dentry *root, |
| 164 | char const *name, unsigned long *val) | 160 | char const *name, unsigned long *val) |
| 165 | { | 161 | { |
| 166 | struct dentry *d = __oprofilefs_create_file(sb, root, name, | 162 | return __oprofilefs_create_file(sb, root, name, |
| 167 | &ulong_ro_fops, 0444); | 163 | &ulong_ro_fops, 0444, val); |
| 168 | if (!d) | ||
| 169 | return -EFAULT; | ||
| 170 | |||
| 171 | d->d_inode->i_private = val; | ||
| 172 | return 0; | ||
| 173 | } | 164 | } |
| 174 | 165 | ||
| 175 | 166 | ||
| @@ -189,31 +180,22 @@ static const struct file_operations atomic_ro_fops = { | |||
| 189 | int oprofilefs_create_ro_atomic(struct super_block *sb, struct dentry *root, | 180 | int oprofilefs_create_ro_atomic(struct super_block *sb, struct dentry *root, |
| 190 | char const *name, atomic_t *val) | 181 | char const *name, atomic_t *val) |
| 191 | { | 182 | { |
| 192 | struct dentry *d = __oprofilefs_create_file(sb, root, name, | 183 | return __oprofilefs_create_file(sb, root, name, |
| 193 | &atomic_ro_fops, 0444); | 184 | &atomic_ro_fops, 0444, val); |
| 194 | if (!d) | ||
| 195 | return -EFAULT; | ||
| 196 | |||
| 197 | d->d_inode->i_private = val; | ||
| 198 | return 0; | ||
| 199 | } | 185 | } |
| 200 | 186 | ||
| 201 | 187 | ||
| 202 | int oprofilefs_create_file(struct super_block *sb, struct dentry *root, | 188 | int oprofilefs_create_file(struct super_block *sb, struct dentry *root, |
| 203 | char const *name, const struct file_operations *fops) | 189 | char const *name, const struct file_operations *fops) |
| 204 | { | 190 | { |
| 205 | if (!__oprofilefs_create_file(sb, root, name, fops, 0644)) | 191 | return __oprofilefs_create_file(sb, root, name, fops, 0644, NULL); |
| 206 | return -EFAULT; | ||
| 207 | return 0; | ||
| 208 | } | 192 | } |
| 209 | 193 | ||
| 210 | 194 | ||
| 211 | int oprofilefs_create_file_perm(struct super_block *sb, struct dentry *root, | 195 | int oprofilefs_create_file_perm(struct super_block *sb, struct dentry *root, |
| 212 | char const *name, const struct file_operations *fops, int perm) | 196 | char const *name, const struct file_operations *fops, int perm) |
| 213 | { | 197 | { |
| 214 | if (!__oprofilefs_create_file(sb, root, name, fops, perm)) | 198 | return __oprofilefs_create_file(sb, root, name, fops, perm, NULL); |
| 215 | return -EFAULT; | ||
| 216 | return 0; | ||
| 217 | } | 199 | } |
| 218 | 200 | ||
| 219 | 201 | ||
