summaryrefslogtreecommitdiffstats
path: root/fs/proc/generic.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/proc/generic.c')
-rw-r--r--fs/proc/generic.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index ab6a321076b8..af644caaaf85 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -25,6 +25,7 @@
25#include <linux/spinlock.h> 25#include <linux/spinlock.h>
26#include <linux/completion.h> 26#include <linux/completion.h>
27#include <linux/uaccess.h> 27#include <linux/uaccess.h>
28#include <linux/seq_file.h>
28 29
29#include "internal.h" 30#include "internal.h"
30 31
@@ -555,6 +556,35 @@ struct proc_dir_entry *proc_create(const char *name, umode_t mode,
555} 556}
556EXPORT_SYMBOL(proc_create); 557EXPORT_SYMBOL(proc_create);
557 558
559static int proc_seq_open(struct inode *inode, struct file *file)
560{
561 struct proc_dir_entry *de = PDE(inode);
562
563 return seq_open(file, de->seq_ops);
564}
565
566static const struct file_operations proc_seq_fops = {
567 .open = proc_seq_open,
568 .read = seq_read,
569 .llseek = seq_lseek,
570 .release = seq_release,
571};
572
573struct proc_dir_entry *proc_create_seq_data(const char *name, umode_t mode,
574 struct proc_dir_entry *parent, const struct seq_operations *ops,
575 void *data)
576{
577 struct proc_dir_entry *p;
578
579 p = proc_create_reg(name, mode, &parent, data);
580 if (!p)
581 return NULL;
582 p->proc_fops = &proc_seq_fops;
583 p->seq_ops = ops;
584 return proc_register(parent, p);
585}
586EXPORT_SYMBOL(proc_create_seq_data);
587
558void proc_set_size(struct proc_dir_entry *de, loff_t size) 588void proc_set_size(struct proc_dir_entry *de, loff_t size)
559{ 589{
560 de->size = size; 590 de->size = size;