diff options
author | Stephen Boyd <sboyd@codeaurora.org> | 2015-10-12 21:09:09 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-10-18 01:09:03 -0400 |
commit | b97f679954b7771183f3c0a6a47b17e185e64a8a (patch) | |
tree | 0b91b510adba6a9c2016e603ea1fb624164a3eac /fs/debugfs | |
parent | 8346aa765e14348b7b436825b3c4740895a2fe1a (diff) |
debugfs: Consolidate file mode checks in debugfs_create_*()
The code that creates debugfs file with different file ops based
on the file mode is duplicated in each debugfs_create_*() API.
Consolidate that code into debugfs_create_mode(), that takes
three file ops structures so that we don't have to keep
copy/pasting that logic.
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/debugfs')
-rw-r--r-- | fs/debugfs/file.c | 98 |
1 files changed, 32 insertions, 66 deletions
diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c index b70c20fae502..5d594efa7c93 100644 --- a/fs/debugfs/file.c +++ b/fs/debugfs/file.c | |||
@@ -42,6 +42,22 @@ const struct file_operations debugfs_file_operations = { | |||
42 | .llseek = noop_llseek, | 42 | .llseek = noop_llseek, |
43 | }; | 43 | }; |
44 | 44 | ||
45 | static struct dentry *debugfs_create_mode(const char *name, umode_t mode, | ||
46 | struct dentry *parent, void *value, | ||
47 | const struct file_operations *fops, | ||
48 | const struct file_operations *fops_ro, | ||
49 | const struct file_operations *fops_wo) | ||
50 | { | ||
51 | /* if there are no write bits set, make read only */ | ||
52 | if (!(mode & S_IWUGO)) | ||
53 | return debugfs_create_file(name, mode, parent, value, fops_ro); | ||
54 | /* if there are no read bits set, make write only */ | ||
55 | if (!(mode & S_IRUGO)) | ||
56 | return debugfs_create_file(name, mode, parent, value, fops_wo); | ||
57 | |||
58 | return debugfs_create_file(name, mode, parent, value, fops); | ||
59 | } | ||
60 | |||
45 | static int debugfs_u8_set(void *data, u64 val) | 61 | static int debugfs_u8_set(void *data, u64 val) |
46 | { | 62 | { |
47 | *(u8 *)data = val; | 63 | *(u8 *)data = val; |
@@ -83,14 +99,8 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_u8_wo, NULL, debugfs_u8_set, "%llu\n"); | |||
83 | struct dentry *debugfs_create_u8(const char *name, umode_t mode, | 99 | struct dentry *debugfs_create_u8(const char *name, umode_t mode, |
84 | struct dentry *parent, u8 *value) | 100 | struct dentry *parent, u8 *value) |
85 | { | 101 | { |
86 | /* if there are no write bits set, make read only */ | 102 | return debugfs_create_mode(name, mode, parent, value, &fops_u8, |
87 | if (!(mode & S_IWUGO)) | 103 | &fops_u8_ro, &fops_u8_wo); |
88 | return debugfs_create_file(name, mode, parent, value, &fops_u8_ro); | ||
89 | /* if there are no read bits set, make write only */ | ||
90 | if (!(mode & S_IRUGO)) | ||
91 | return debugfs_create_file(name, mode, parent, value, &fops_u8_wo); | ||
92 | |||
93 | return debugfs_create_file(name, mode, parent, value, &fops_u8); | ||
94 | } | 104 | } |
95 | EXPORT_SYMBOL_GPL(debugfs_create_u8); | 105 | EXPORT_SYMBOL_GPL(debugfs_create_u8); |
96 | 106 | ||
@@ -135,14 +145,8 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_u16_wo, NULL, debugfs_u16_set, "%llu\n"); | |||
135 | struct dentry *debugfs_create_u16(const char *name, umode_t mode, | 145 | struct dentry *debugfs_create_u16(const char *name, umode_t mode, |
136 | struct dentry *parent, u16 *value) | 146 | struct dentry *parent, u16 *value) |
137 | { | 147 | { |
138 | /* if there are no write bits set, make read only */ | 148 | return debugfs_create_mode(name, mode, parent, value, &fops_u16, |
139 | if (!(mode & S_IWUGO)) | 149 | &fops_u16_ro, &fops_u16_wo); |
140 | return debugfs_create_file(name, mode, parent, value, &fops_u16_ro); | ||
141 | /* if there are no read bits set, make write only */ | ||
142 | if (!(mode & S_IRUGO)) | ||
143 | return debugfs_create_file(name, mode, parent, value, &fops_u16_wo); | ||
144 | |||
145 | return debugfs_create_file(name, mode, parent, value, &fops_u16); | ||
146 | } | 150 | } |
147 | EXPORT_SYMBOL_GPL(debugfs_create_u16); | 151 | EXPORT_SYMBOL_GPL(debugfs_create_u16); |
148 | 152 | ||
@@ -187,14 +191,8 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_u32_wo, NULL, debugfs_u32_set, "%llu\n"); | |||
187 | struct dentry *debugfs_create_u32(const char *name, umode_t mode, | 191 | struct dentry *debugfs_create_u32(const char *name, umode_t mode, |
188 | struct dentry *parent, u32 *value) | 192 | struct dentry *parent, u32 *value) |
189 | { | 193 | { |
190 | /* if there are no write bits set, make read only */ | 194 | return debugfs_create_mode(name, mode, parent, value, &fops_u32, |
191 | if (!(mode & S_IWUGO)) | 195 | &fops_u32_ro, &fops_u32_wo); |
192 | return debugfs_create_file(name, mode, parent, value, &fops_u32_ro); | ||
193 | /* if there are no read bits set, make write only */ | ||
194 | if (!(mode & S_IRUGO)) | ||
195 | return debugfs_create_file(name, mode, parent, value, &fops_u32_wo); | ||
196 | |||
197 | return debugfs_create_file(name, mode, parent, value, &fops_u32); | ||
198 | } | 196 | } |
199 | EXPORT_SYMBOL_GPL(debugfs_create_u32); | 197 | EXPORT_SYMBOL_GPL(debugfs_create_u32); |
200 | 198 | ||
@@ -240,14 +238,8 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_u64_wo, NULL, debugfs_u64_set, "%llu\n"); | |||
240 | struct dentry *debugfs_create_u64(const char *name, umode_t mode, | 238 | struct dentry *debugfs_create_u64(const char *name, umode_t mode, |
241 | struct dentry *parent, u64 *value) | 239 | struct dentry *parent, u64 *value) |
242 | { | 240 | { |
243 | /* if there are no write bits set, make read only */ | 241 | return debugfs_create_mode(name, mode, parent, value, &fops_u64, |
244 | if (!(mode & S_IWUGO)) | 242 | &fops_u64_ro, &fops_u64_wo); |
245 | return debugfs_create_file(name, mode, parent, value, &fops_u64_ro); | ||
246 | /* if there are no read bits set, make write only */ | ||
247 | if (!(mode & S_IRUGO)) | ||
248 | return debugfs_create_file(name, mode, parent, value, &fops_u64_wo); | ||
249 | |||
250 | return debugfs_create_file(name, mode, parent, value, &fops_u64); | ||
251 | } | 243 | } |
252 | EXPORT_SYMBOL_GPL(debugfs_create_u64); | 244 | EXPORT_SYMBOL_GPL(debugfs_create_u64); |
253 | 245 | ||
@@ -286,14 +278,8 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_x64, debugfs_u64_get, debugfs_u64_set, "0x%016llx\n | |||
286 | struct dentry *debugfs_create_x8(const char *name, umode_t mode, | 278 | struct dentry *debugfs_create_x8(const char *name, umode_t mode, |
287 | struct dentry *parent, u8 *value) | 279 | struct dentry *parent, u8 *value) |
288 | { | 280 | { |
289 | /* if there are no write bits set, make read only */ | 281 | return debugfs_create_mode(name, mode, parent, value, &fops_x8, |
290 | if (!(mode & S_IWUGO)) | 282 | &fops_x8_ro, &fops_x8_wo); |
291 | return debugfs_create_file(name, mode, parent, value, &fops_x8_ro); | ||
292 | /* if there are no read bits set, make write only */ | ||
293 | if (!(mode & S_IRUGO)) | ||
294 | return debugfs_create_file(name, mode, parent, value, &fops_x8_wo); | ||
295 | |||
296 | return debugfs_create_file(name, mode, parent, value, &fops_x8); | ||
297 | } | 283 | } |
298 | EXPORT_SYMBOL_GPL(debugfs_create_x8); | 284 | EXPORT_SYMBOL_GPL(debugfs_create_x8); |
299 | 285 | ||
@@ -310,14 +296,8 @@ EXPORT_SYMBOL_GPL(debugfs_create_x8); | |||
310 | struct dentry *debugfs_create_x16(const char *name, umode_t mode, | 296 | struct dentry *debugfs_create_x16(const char *name, umode_t mode, |
311 | struct dentry *parent, u16 *value) | 297 | struct dentry *parent, u16 *value) |
312 | { | 298 | { |
313 | /* if there are no write bits set, make read only */ | 299 | return debugfs_create_mode(name, mode, parent, value, &fops_x16, |
314 | if (!(mode & S_IWUGO)) | 300 | &fops_x16_ro, &fops_x16_wo); |
315 | return debugfs_create_file(name, mode, parent, value, &fops_x16_ro); | ||
316 | /* if there are no read bits set, make write only */ | ||
317 | if (!(mode & S_IRUGO)) | ||
318 | return debugfs_create_file(name, mode, parent, value, &fops_x16_wo); | ||
319 | |||
320 | return debugfs_create_file(name, mode, parent, value, &fops_x16); | ||
321 | } | 301 | } |
322 | EXPORT_SYMBOL_GPL(debugfs_create_x16); | 302 | EXPORT_SYMBOL_GPL(debugfs_create_x16); |
323 | 303 | ||
@@ -334,14 +314,8 @@ EXPORT_SYMBOL_GPL(debugfs_create_x16); | |||
334 | struct dentry *debugfs_create_x32(const char *name, umode_t mode, | 314 | struct dentry *debugfs_create_x32(const char *name, umode_t mode, |
335 | struct dentry *parent, u32 *value) | 315 | struct dentry *parent, u32 *value) |
336 | { | 316 | { |
337 | /* if there are no write bits set, make read only */ | 317 | return debugfs_create_mode(name, mode, parent, value, &fops_x32, |
338 | if (!(mode & S_IWUGO)) | 318 | &fops_x32_ro, &fops_x32_wo); |
339 | return debugfs_create_file(name, mode, parent, value, &fops_x32_ro); | ||
340 | /* if there are no read bits set, make write only */ | ||
341 | if (!(mode & S_IRUGO)) | ||
342 | return debugfs_create_file(name, mode, parent, value, &fops_x32_wo); | ||
343 | |||
344 | return debugfs_create_file(name, mode, parent, value, &fops_x32); | ||
345 | } | 319 | } |
346 | EXPORT_SYMBOL_GPL(debugfs_create_x32); | 320 | EXPORT_SYMBOL_GPL(debugfs_create_x32); |
347 | 321 | ||
@@ -422,16 +396,8 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_atomic_t_wo, NULL, debugfs_atomic_t_set, "%lld\n"); | |||
422 | struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode, | 396 | struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode, |
423 | struct dentry *parent, atomic_t *value) | 397 | struct dentry *parent, atomic_t *value) |
424 | { | 398 | { |
425 | /* if there are no write bits set, make read only */ | 399 | return debugfs_create_mode(name, mode, parent, value, &fops_atomic_t, |
426 | if (!(mode & S_IWUGO)) | 400 | &fops_atomic_t_ro, &fops_atomic_t_wo); |
427 | return debugfs_create_file(name, mode, parent, value, | ||
428 | &fops_atomic_t_ro); | ||
429 | /* if there are no read bits set, make write only */ | ||
430 | if (!(mode & S_IRUGO)) | ||
431 | return debugfs_create_file(name, mode, parent, value, | ||
432 | &fops_atomic_t_wo); | ||
433 | |||
434 | return debugfs_create_file(name, mode, parent, value, &fops_atomic_t); | ||
435 | } | 401 | } |
436 | EXPORT_SYMBOL_GPL(debugfs_create_atomic_t); | 402 | EXPORT_SYMBOL_GPL(debugfs_create_atomic_t); |
437 | 403 | ||