diff options
Diffstat (limited to 'fs/debugfs')
-rw-r--r-- | fs/debugfs/file.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c index 2340f6978d6e..a09d3c0aad68 100644 --- a/fs/debugfs/file.c +++ b/fs/debugfs/file.c | |||
@@ -526,12 +526,6 @@ struct array_data { | |||
526 | u32 elements; | 526 | u32 elements; |
527 | }; | 527 | }; |
528 | 528 | ||
529 | static int u32_array_open(struct inode *inode, struct file *file) | ||
530 | { | ||
531 | file->private_data = NULL; | ||
532 | return nonseekable_open(inode, file); | ||
533 | } | ||
534 | |||
535 | static size_t format_array(char *buf, size_t bufsize, const char *fmt, | 529 | static size_t format_array(char *buf, size_t bufsize, const char *fmt, |
536 | u32 *array, u32 array_size) | 530 | u32 *array, u32 array_size) |
537 | { | 531 | { |
@@ -573,26 +567,21 @@ static char *format_array_alloc(const char *fmt, u32 *array, | |||
573 | return ret; | 567 | return ret; |
574 | } | 568 | } |
575 | 569 | ||
576 | static ssize_t u32_array_read(struct file *file, char __user *buf, size_t len, | 570 | static int u32_array_open(struct inode *inode, struct file *file) |
577 | loff_t *ppos) | ||
578 | { | 571 | { |
579 | struct inode *inode = file->f_path.dentry->d_inode; | ||
580 | struct array_data *data = inode->i_private; | 572 | struct array_data *data = inode->i_private; |
581 | size_t size; | ||
582 | 573 | ||
583 | if (*ppos == 0) { | 574 | file->private_data = format_array_alloc("%u", data->array, |
584 | if (file->private_data) { | 575 | data->elements); |
585 | kfree(file->private_data); | 576 | if (!file->private_data) |
586 | file->private_data = NULL; | 577 | return -ENOMEM; |
587 | } | 578 | return nonseekable_open(inode, file); |
588 | 579 | } | |
589 | file->private_data = format_array_alloc("%u", data->array, | ||
590 | data->elements); | ||
591 | } | ||
592 | 580 | ||
593 | size = 0; | 581 | static ssize_t u32_array_read(struct file *file, char __user *buf, size_t len, |
594 | if (file->private_data) | 582 | loff_t *ppos) |
595 | size = strlen(file->private_data); | 583 | { |
584 | size_t size = strlen(file->private_data); | ||
596 | 585 | ||
597 | return simple_read_from_buffer(buf, len, ppos, | 586 | return simple_read_from_buffer(buf, len, ppos, |
598 | file->private_data, size); | 587 | file->private_data, size); |