proc: introduce proc_create_seq_private
Variant of proc_create_data that directly take a struct seq_operations
argument + a private state size and drastically reduces the boilerplate
code in the callers.
All trivial callers converted over.
Signed-off-by: Christoph Hellwig <hch@lst.de>
diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index af644ca..f87cb00 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -560,6 +560,8 @@ static int proc_seq_open(struct inode *inode, struct file *file)
{
struct proc_dir_entry *de = PDE(inode);
+ if (de->state_size)
+ return seq_open_private(file, de->seq_ops, de->state_size);
return seq_open(file, de->seq_ops);
}
@@ -570,9 +572,9 @@ static const struct file_operations proc_seq_fops = {
.release = seq_release,
};
-struct proc_dir_entry *proc_create_seq_data(const char *name, umode_t mode,
+struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode,
struct proc_dir_entry *parent, const struct seq_operations *ops,
- void *data)
+ unsigned int state_size, void *data)
{
struct proc_dir_entry *p;
@@ -581,9 +583,10 @@ struct proc_dir_entry *proc_create_seq_data(const char *name, umode_t mode,
return NULL;
p->proc_fops = &proc_seq_fops;
p->seq_ops = ops;
+ p->state_size = state_size;
return proc_register(parent, p);
}
-EXPORT_SYMBOL(proc_create_seq_data);
+EXPORT_SYMBOL(proc_create_seq_private);
void proc_set_size(struct proc_dir_entry *de, loff_t size)
{
diff --git a/fs/proc/internal.h b/fs/proc/internal.h
index 4fb01c5..bcfe830 100644
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -46,6 +46,7 @@ struct proc_dir_entry {
const struct file_operations *proc_fops;
const struct seq_operations *seq_ops;
void *data;
+ unsigned int state_size;
unsigned int low_ino;
nlink_t nlink;
kuid_t uid;