diff options
| author | Richard Fitzgerald <rf@opensource.wolfsonmicro.com> | 2015-06-23 09:32:54 -0400 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2015-07-20 13:44:50 -0400 |
| commit | 0642ef6f2992eba46c41abb5ceb7d4fa14ba888e (patch) | |
| tree | fd4fe479afa4f75a2b599ef3f450d9fee5b7ff6e | |
| parent | bc0195aad0daa2ad5b0d76cce22b167bc3435590 (diff) | |
debugfs: Export bool read/write functions
The file read/write functions for bools have no special dependencies
on debugfs internals and are sufficiently non-trivial to be worth
exporting so clients can re-use the implementation.
Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
| -rw-r--r-- | fs/debugfs/file.c | 14 | ||||
| -rw-r--r-- | include/linux/debugfs.h | 20 |
2 files changed, 28 insertions, 6 deletions
diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c index 284f9aa0028b..6c55ade071c3 100644 --- a/fs/debugfs/file.c +++ b/fs/debugfs/file.c | |||
| @@ -435,8 +435,8 @@ struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode, | |||
| 435 | } | 435 | } |
| 436 | EXPORT_SYMBOL_GPL(debugfs_create_atomic_t); | 436 | EXPORT_SYMBOL_GPL(debugfs_create_atomic_t); |
| 437 | 437 | ||
| 438 | static ssize_t read_file_bool(struct file *file, char __user *user_buf, | 438 | ssize_t debugfs_read_file_bool(struct file *file, char __user *user_buf, |
| 439 | size_t count, loff_t *ppos) | 439 | size_t count, loff_t *ppos) |
| 440 | { | 440 | { |
| 441 | char buf[3]; | 441 | char buf[3]; |
| 442 | u32 *val = file->private_data; | 442 | u32 *val = file->private_data; |
| @@ -449,9 +449,10 @@ static ssize_t read_file_bool(struct file *file, char __user *user_buf, | |||
| 449 | buf[2] = 0x00; | 449 | buf[2] = 0x00; |
| 450 | return simple_read_from_buffer(user_buf, count, ppos, buf, 2); | 450 | return simple_read_from_buffer(user_buf, count, ppos, buf, 2); |
| 451 | } | 451 | } |
| 452 | EXPORT_SYMBOL_GPL(debugfs_read_file_bool); | ||
| 452 | 453 | ||
| 453 | static ssize_t write_file_bool(struct file *file, const char __user *user_buf, | 454 | ssize_t debugfs_write_file_bool(struct file *file, const char __user *user_buf, |
| 454 | size_t count, loff_t *ppos) | 455 | size_t count, loff_t *ppos) |
| 455 | { | 456 | { |
| 456 | char buf[32]; | 457 | char buf[32]; |
| 457 | size_t buf_size; | 458 | size_t buf_size; |
| @@ -468,10 +469,11 @@ static ssize_t write_file_bool(struct file *file, const char __user *user_buf, | |||
| 468 | 469 | ||
| 469 | return count; | 470 | return count; |
| 470 | } | 471 | } |
| 472 | EXPORT_SYMBOL_GPL(debugfs_write_file_bool); | ||
| 471 | 473 | ||
| 472 | static const struct file_operations fops_bool = { | 474 | static const struct file_operations fops_bool = { |
| 473 | .read = read_file_bool, | 475 | .read = debugfs_read_file_bool, |
| 474 | .write = write_file_bool, | 476 | .write = debugfs_write_file_bool, |
| 475 | .open = simple_open, | 477 | .open = simple_open, |
| 476 | .llseek = default_llseek, | 478 | .llseek = default_llseek, |
| 477 | }; | 479 | }; |
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h index 420311bcee38..9beb636b97eb 100644 --- a/include/linux/debugfs.h +++ b/include/linux/debugfs.h | |||
| @@ -116,6 +116,12 @@ struct dentry *debugfs_create_devm_seqfile(struct device *dev, const char *name, | |||
| 116 | 116 | ||
| 117 | bool debugfs_initialized(void); | 117 | bool debugfs_initialized(void); |
| 118 | 118 | ||
| 119 | ssize_t debugfs_read_file_bool(struct file *file, char __user *user_buf, | ||
| 120 | size_t count, loff_t *ppos); | ||
| 121 | |||
| 122 | ssize_t debugfs_write_file_bool(struct file *file, const char __user *user_buf, | ||
| 123 | size_t count, loff_t *ppos); | ||
| 124 | |||
| 119 | #else | 125 | #else |
| 120 | 126 | ||
| 121 | #include <linux/err.h> | 127 | #include <linux/err.h> |
| @@ -282,6 +288,20 @@ static inline struct dentry *debugfs_create_devm_seqfile(struct device *dev, | |||
| 282 | return ERR_PTR(-ENODEV); | 288 | return ERR_PTR(-ENODEV); |
| 283 | } | 289 | } |
| 284 | 290 | ||
| 291 | static inline ssize_t debugfs_read_file_bool(struct file *file, | ||
| 292 | char __user *user_buf, | ||
| 293 | size_t count, loff_t *ppos) | ||
| 294 | { | ||
| 295 | return -ENODEV; | ||
| 296 | } | ||
| 297 | |||
| 298 | static inline ssize_t debugfs_write_file_bool(struct file *file, | ||
| 299 | const char __user *user_buf, | ||
| 300 | size_t count, loff_t *ppos) | ||
| 301 | { | ||
| 302 | return -ENODEV; | ||
| 303 | } | ||
| 304 | |||
| 285 | #endif | 305 | #endif |
| 286 | 306 | ||
| 287 | #endif | 307 | #endif |
