aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/seq_file.c18
-rw-r--r--include/linux/seq_file.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/fs/seq_file.c b/fs/seq_file.c
index 38bb59f3f2ad..774c1eb7f1c9 100644
--- a/fs/seq_file.c
+++ b/fs/seq_file.c
@@ -599,6 +599,24 @@ int single_open(struct file *file, int (*show)(struct seq_file *, void *),
599} 599}
600EXPORT_SYMBOL(single_open); 600EXPORT_SYMBOL(single_open);
601 601
602int single_open_size(struct file *file, int (*show)(struct seq_file *, void *),
603 void *data, size_t size)
604{
605 char *buf = kmalloc(size, GFP_KERNEL);
606 int ret;
607 if (!buf)
608 return -ENOMEM;
609 ret = single_open(file, show, data);
610 if (ret) {
611 kfree(buf);
612 return ret;
613 }
614 ((struct seq_file *)file->private_data)->buf = buf;
615 ((struct seq_file *)file->private_data)->size = size;
616 return 0;
617}
618EXPORT_SYMBOL(single_open_size);
619
602int single_release(struct inode *inode, struct file *file) 620int single_release(struct inode *inode, struct file *file)
603{ 621{
604 const struct seq_operations *op = ((struct seq_file *)file->private_data)->op; 622 const struct seq_operations *op = ((struct seq_file *)file->private_data)->op;
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h
index 68a04a343cad..2da29ac178fc 100644
--- a/include/linux/seq_file.h
+++ b/include/linux/seq_file.h
@@ -123,6 +123,7 @@ static inline int seq_nodemask_list(struct seq_file *m, nodemask_t *mask)
123} 123}
124 124
125int single_open(struct file *, int (*)(struct seq_file *, void *), void *); 125int single_open(struct file *, int (*)(struct seq_file *, void *), void *);
126int single_open_size(struct file *, int (*)(struct seq_file *, void *), void *, size_t);
126int single_release(struct inode *, struct file *); 127int single_release(struct inode *, struct file *);
127void *__seq_open_private(struct file *, const struct seq_operations *, int); 128void *__seq_open_private(struct file *, const struct seq_operations *, int);
128int seq_open_private(struct file *, const struct seq_operations *, int); 129int seq_open_private(struct file *, const struct seq_operations *, int);